Hacker News new | ask | show | jobs
by Verdex 1689 days ago
We don't know how to make languages. We're in the Kepler stage of software development. Everyone has a different 'cosmology' to explain what's going on, we don't yet have the technology to understand what's going on, we don't have the math yet to explain what's going on, and we're just in the very beginning stages of even being able to take measurements of anything worth while.

"Here's a feature" Now, will it makes code bases better? Will it make them worse? Do we even have a way to quantify better or worse?

What looks like is happening to me is that general purpose languages are all slowly migrating to look a lot like ML with some sort of existential mechanism. So that is static type system with generics, lambdas, algebraic data types, pattern matching. The existential part is typically expressed with interfaces, but it looks like there's a few options floating around.

Meanwhile, low level programming language designers are all going crazy trying to find a way to replace c / c++. Rust, Odin, Zig, Jai (if it ever actually gets released), etc. That probably won't look like ML or at least it will need to have some other stuff to handle the domain without driving developers crazy.

I'm sure other domains will slowly figure out that they can cheat the triumvirate of engineering (fast, cheap, good) by developing languages that suit their domain.

But I suspect we're looking at 50-100 years before we really start to see any progress that lets us have "feature complete" languages.

1 comments

I wonder if there is any parallels of programming languages to spoken languages.

Every year, new words are constantly added to official dictionaries ... while old words continually fall out of favor/use.

And concepts in one language (e.g. "English" or "Rust") then get adopted/imported into another language (e.g. "French" or "Go").

Words in natural language dictionaries is more akin to functions in libraries. OTOH natural language syntax doesn't change nearly as fast.

But OP is right - we haven't really been doing programming all that long in the grand scheme of things, and there are still too many unsettled questions.

Also, in many cases, we came up with desirable concepts long ago, but using them wasn't feasible due to performance overhead until recently.

There's also domain-specific language / slang.

I think this analogy is a good one. I've always held that software development has a crafty side in addition to the raw computer science. And I think you nailed it that this is where that comes in. There's multiple ways to write any program. So the only "complete" language is one that allows you to express anything and everything exactly the way you want to.

For instance, one could argue that using process forking vs threads vs fibers vs async / await are all just different connotations of the same denotation of "doing multiple things in parallel".

Spoken languages are constantly evolving and mostly evolve at the keyword / reserved level and sometimes when interacting with neighboring languages through necessity you’ll get pidgins and creoles (think of them as external DSLs). But because spoken languages are so fluid there is a massive amount of ambiguity over time. It’s not like we can read Middle English very well now (we need scholars oftentimes) and another problem with human languages is the entity knowledge problem with idioms oftentimes being computationally “AI complete” (requiring general AI to comprehend semantically).

In this respect x86 is the English of the computing world moreso than even C, Java, etc because these are different cultures. And as someone that was in ESL I can’t express how much waste and cruft is in the language that makes me think it’s Perl or Ruby (note that Larry Wall is a linguist and wrote Perl to be more like a human language - we can see now why it was not a great idea).

Also seriously, human languages are entirely defined by its user base (language pedantic folks have very little influence empirically such as the flawed academic rule of not ending English sentences with a preposition which was a bad port of a rule from Latin) and given the trends of each programming language community I’m doubtful giving language control to users is what helps keep a language ecosystem alive and thriving. In fact, human languages are essentially a secondary map of imperialism, genocide, and suffering across all of human history moreso than trade and integration with consent.