Hacker Newsnew | past | comments | ask | show | jobs | submit | throwaway17_17's commentslogin

Not Tomo’s developer, but my position on the 1 vs. 0 for list-like object indexing goes like…

1) using 0 as the index of the first element in a list-like object ISA holdover from C (most of the earlier languages used either 1 based or flexible base for indexing);

2) in C, 0 is the index due to the manner of C’s array indexing implementation;

3) if holding onto the C semantics (or syntax in some respects) is not an explicit goal of the language, then flexible indexing should be the default (declared at creation point for the list-like object);

4) in flexible default is not appealing to the language designer, and again, maintaining C semantics is not a goal, then 1 based should be the next reasonable default.

For me, when counting things (and most other native English speakers, if not most people in general), the first item counted is object 1. Therefore, 1 should be the index of the beginning of the list-like objects indexing.

I’m not sure how about 0 being ‘None’, but I might find it intuitive if thinking more about it.



Is Pony still an actively developed language? I remember watching several talks while they brought the language up to release, and read several of the accompanying papers. However, I thought with the primary corporate sponsor dropping the language it had gone basically EOL. Which was a pretty large bummer as I was very interested to see how the reference capability model of permissions and control worked at large scale for concurrency control and management (as well as its potential application to other domains).

It is still developed, although it feels a bit like it was mostly "done" 10 years ago.

https://github.com/ponylang/ponyc

Quite a few recent commits and their blog/X account mentioned their LSP now being bundled with the language...

https://www.ponylang.io/blog/2026/02/last-week-in-pony---feb...

Dunno, now it feels like the "hot" thing is either manual memory languages like Zig, Odin an Rust or languages with novel type systems like Lean, Koka, Idris, etc... GC'd "systems" languages like Nim, Crystal, Pony, Go, etc... all seem kind of old fashioned now.


Go seems to have some enduring affection and popularity for new projects and companies. I recently felt like a lot of the recent shift was less about GC and more about runtime characteristics (static binaries, lean resource consumption, lack of an in-your-face virtual machine).

It never felt like Nim, Pony, or Crystal were ever that popular that a diminished hype cycle registered as something thematic to me (not that I really intend to disagree with your perspective here).


I will be glad to be wrong about, but…

I was under the impression that parallel and concurrent code was the dominant paradigm for programming tasks currently going in most of the semi-mainstream domains. I am certainly willing to concede that I could just be in a bubble that thinks about and designs for concurrency and parallelism as a first class concern, but it doesn’t seem that way.

I mean one of the large features/touted benefits for Rust is the single mutable XOR multiple immutable semantics explicitly to assist with problems in parallel/concurrent code, all of the OTP languages are built on top of a ridiculously parallel and distributed first ‘VM’. It strikes me as peculiar that these types of languages and ecosystems would be so, apparently, popular if the primary use case of ‘safe’/resilient parallel/concurrent code was not a large concern.


TL;DR — it seems to me that it is less anger from devs at being confused over a Case construct and more an attempt to preemptively soothe any ruffled feathers for devs wanting a traditional Switch.

I think your comment was probably rhetorical, but does address/raise a fairly common issue in designing programming languages. My position on this is that it is less like "WHAT THE ___ is a ------- MATCH STATEMENT?!!! THIS IS SO $%^&@*#%& CONFUSING!! I DON'T KNOW THAT WORD!! I ONLY KNOW SWITCH!!" and instead more like the following (from the language designers POV):

Okay, we want a Case construct in the language, but programmers coming from or preferring imperative syntax and semantics may not like the Case concept. But, they often like Switch, or at least are familiar with it appearing in code, sooooooo: first, we will alter the syntax of the tradition Switch to allow a more comfortable transition to using this functional inspired construct; then second, we wholesale replace the semantics of that Switch with the semantics of a Case. This is underpinned by the assumption the the syntax change is small enough that devs won’t recoil from the new construct, then the larger divergence of semantics will hopefully not produce issues because it is just a small semantic change coated in an most familiar syntax.

Interestingly, the author of TFA seems to be operating under the assumption that the Case construct is an unqualified positive change and sneaking the corresponding semantics into that unfortunate imperative code is a wholly positive goal for the language design.

Without taking a position on the above positivity, I think the maneuvers language designers take while designing syntax and semantics (as exhibited in Swift’s Switch syntax for a Case Expression) is motivated by divergent, and often times strange, priorities and prior assumptions. So, from the 10,000’ view, does enshrining priorities and assumptions, and others like it, as a hard coded facet of the language the right path for languages generally? Should a language seek to be an overall more general framework for programming, leaving a vast majority of the syntax and higher-level semantics to be chosen and instantiated by devs where fit-for-purpose and pros/cons direct its inclusion? Or is the goal for opinionated languages, with or without accompanying sugar to help smooth over differences from other languages, the better path? Is there a ‘happy’ medium where:

1) design goals and forward thinking or experimental syntax/semantics get put in the language as an ‘it’s for your own good’ method for advancing the field as a whole and advancing/optimizing a single dev’s programs in particular;

2) the default position of a language should be as generalized as possible, but with abilities and options for users to specify what advanced, uncommon, or divergent syntax/semantics are utilized in a given program?


We're talking about fallthrough happening by default or not by default. You could call it a "map" construct or a "choose" statement for all I care.

Whether or not you have to write the "case" keyword 10 times is an aesthetic choice.

I don't think this has anything to do with program optimization. On all non-theoretical ISA's I'm aware of, you don't need a JUMP instruction to go to the next instruction. We're debating names.

I'm a Ziguana so my answer to the programming philosophy questions would be that we need a language where the complexity emerges in the code, not in the language itself, and we generally want a shared language that can be read and used by anyone, anywhere. If everyone has their own subset of the language (like C++) then it's not really just one language in practice. If every project contains its own domain specific language, it may be harder for others to read because they have to learn custom languages. That's not to say you should never roll your own domain specific language, or that you should never write a program that generates textual source code, but the vast, vast majority of use cases shouldn't require that.

And, yes, be opinionated. I'm fine with some syntactic sugar that makes common or difficult things have shortcuts to make them easier, but again, if I learned a language, I should generally be able to go read someone's code in that language.

What do you consider "advancing the field as a whole"?


Are you aware of whether Chennowith ever discussed the presence, implied or actual, of more extreme resistance groups/factions operating in the same locations and time periods? I’ve seen some informal work discussing the ‘pressure’ on the incumbent power being supported and made more tenable in comparison to the potential for a more radical approach. I have seen anything widely popularized discussing this outside of ‘How to Blow Up a Pipeline’ which does have some good references and particular examples.


Yes, and the result is negative.

Violent Action only incentivizes the selectorate to not defect. This is something Kuran pointed out decades ago as did Chennowith.

The reality is the only way to affect change is to incentivize elite defection, and that requires organized nonviolent action along with exogenous variables.


I can’t help but be a little depressed by this realization. But to take it a step further, while I think there are some people who are genuinely buying this propaganda, I expect that a chunk of the propaganda aligned side also don’t think there is any point correcting the misleading statements. They benefit from the overall control of their ‘side’ and so just go right along sliding toward the fanatical fringe extreme of their side. On the other ‘side’, many people seem to have decided there is no use attempting to counter message after seeing the failure to move any extremists from their positions (and a failure to get even a milk toast correction from the non fanatics who are aligned). I think that the end result of this pattern is a gradually accelerating move towards the far ends, leaving no one to have any reasonable discourse in the center.

I’m not saying I support the center positions, nor that I don’t support what is often called an extreme position, just that this seems to be a watershed moment globally.


Polarization leaves very little room for reasonable discourse at the poles too. Pure tribalism doesn't care about reason unless that reason is in service of the identity and ideology of the tribe.

What if political discourse was focused on policy not identity and couched in terms of mutual interest instead of party affiliation? There would still be tensions, trade-offs, conflicts and political strategy at play but the discourse would be infinitely more reasonable.

I think this is what we mean when we talk about "center positions": a "value-based realism" that recognizes that society is nothing but the mutual alignment of values and interests. I don't understand why "common sense" has become so unpopular.


> I don't understand why "common sense" has become so unpopular.

IMHO, that's exactly it. You named it. Common sense is actually missing from more and more people. Why that is? I don't know - lack of basic common sense education, family, primary school, too much facebook, tiktok, common sense defined by YT shorts?

It's going to get far worse once the AI generation grows up.


I’m genuinely curious, why is there a transformative requirement for something to be art. I think transformative works can certainly be art, but thanks just a possible characteristic of art. Where does this requirement come from, as in, is it somewhere defined academically, or is this a personal position?


Wikipedia defines it as: Art is a diverse range of cultural activity centered around works utilizing creative or imaginative talents, which are expected to evoke a worthwhile experience,[1] generally through an expression of emotional power, conceptual ideas, technical proficiency, or beauty.[2][3][4]

I like the "evoke a worthwhile experience" idea.

Transformation is a bit ambigious imo. In a certain sense, every experience is at least a little transformative.


I know it wasn’t the whole point of your comment, but I fervently hope the legitimacy of art (of any kind and in any medium) is not conferred by the ‘market’. Plays or shows that end having been seen by under 100 people should still be art (and any recording of them should as well), music made for a very niche audience, games that are played by 10s of people, all of those can be art. A painting made by one person to give to another can be art.

I would prefer to look to the democratization of art as the means and ability for individuals to produce substantial, if small, works at a pace, for an audience, for some reward determined solely by the creator.

At the end of the day, ‘what is art’ and ‘are video games art is a dated sentiment, so I agree, I was just repulsed by the suggestion that the definition/legitimacy of something as art can/should be dictated by ‘The Market’ .


Market was maybe a bad term. I mean more “society at large” and not specifically stuff that makes money.

I am more saying that the idea of caring about “being labeled as art” is not that important anymore. Largely because anyone can make and publish anything nowadays. So a play with 100 viewers is still art, yes, but no one really cares about getting that label.


What is art? An experience expressed through a medium. The number of viewers isnt a qualification.


Thanks for the response. I do like the, largely uncontested, move toward disregarding of the label. It certainly seems to dovetail with a more individualized conception of artistic pursuit that appeals to me.


I think your statement about familiarity is spot on. One of the ‘promises’ of the early functional language efforts (late 70s through mid 90s) was that the invariants made it conceptually simple to have a magical, super compiler take the code and produce binary executables that would surpass imperative languages, due to the aforementioned Pandora’s box effect of the non-functional constructs. Universal value semantics are similar, especially without leaky abstractions allowing “please just let me crack the box, I’ll be good and won’t abuse the power”. Commitment to the invariants, in this case purely (logically, at least) value semantics across the entire language could produce executables that approach low-level, less restrictive code results with a much, much lower burden on the programmer.


I wrote the following and then realized maybe it is just a quirk of the example in the reader that the ‘set’/‘=‘ pair comes at the end of the chain. If so, it is just a unique syntax sugar for a function, I don’t think it is, so I’m leaving my comment as I wrote it letting this act as a caveat:

Although I don’t particularly like the ‘|’ to be used for chaining functions, I certainly know that it has been a long term syntax coming from Unix. My only issue with the ‘|=‘ is that it should be unnecessary. The only reason I can see that the special operator is required is that the ‘set’/‘=‘ syntax pair is a non-functional keyword ‘set’ with an (I think) overloaded keyword ‘=‘. If the equal sign was an ordinary function (i.e. a function that take a value, and an identifier, associates the value and the identifier, then returns the new value like the Lisps and derived lands) it could just be used arbitrarily in chains of functions.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: