As for Neanderthals, the fact that so much of the Neanderthal genome still survives in (some of) us suggests that H. sapiens sapiens and H. sapiens neandertalensis were never fully distinct biological species. âReproductive isolationâ is the core of the traditional âbiological species conceptâ. And from everything Iâve read, there seems to be no plausible sense in which H. sap sap were more highly evolved than H. sap. nea. Neanderthals were superbly fitted to an extremely challenging environment and thrived in it for a long time.
Away with misleading biological analogies!
I suspect that we may have causality backwards. I do not believe that âevolutionâ in a programming language causes popularity; I suspect that popularity causes change. The more people using a programming language, the more people there are who want it to be different. The more tasks people are using a programming language for, the more they have a genuine need for it to be different. Erlang does not need to change to become successful. Itâs because it has become successful that there is pressure for it to change.
Take Algol. Algol evolved. Elliot Algol, Burroughs Algol, Algol W, all amazingly useful for their day, all DIFFERENT. You could write a portable Fortran program. You could write a portable COBOL program. But you couldnât write a portable Algol program. The first standardised object-oriented programming language (not an ANSI or ISO standard, but a standard) was an Algol (Simula 67). Algol 68 offered concurrency, but the first Algol 68 program I wrote was the last, as you guessed it, evolution fragmented the implementation world to the point where there werenât any portable programs. Pascal went the same route. Lots of evolution. By the time the revised standard came along almost nobody was interested in conforming to it (I think DEC Pascal came close). Or take Eiffel. There were several Eiffel implementations, which were actually close enough that a growing library of useful stuff (the GOBO library) had been developed and you could write interesting and useful portable programs. And then the ECMA Eiffel standard came along with a lot of evolution, and SmartEiffel went another way, and the community fractured, and by the time it was clear that it was âaut Eiffelstudio aut nihilâ I was out of the Eiffel community. Or take Prolog. The Prolog standardisers explicitly rejected preserving the value of existing code as a guideline. A textbook was written targeting the current draft of the standard. And the standard changed again, and the textbook was left describing a dialect that was never implemented. Or take C++. Please. C++ changed a LOT. The only two C++ compilers I trust to agree are G++ and Clang++ and I donât trust them to agree.
What happens when a programming language changes?
Tools break.
Textbooks are obsoleted.
Libraries stop working.
Implementations die because the cost of adaptation is too high. (C++ killed more than one company.)
Take as an example Haskell. I used to have, and use, four implementations of Haskell 98. Now I just have GHC which implements whatever it is that GHC implements. (Iâm not sure all possible combinations of language features that GHC lets you select have ever been tested.) It costs more than you might think to update an implementation to a new standard. If there is money in it, that will happen. Intel have a serious financial incentive to keep Fortran, C, and C++ going well on their hardware. So do AMD, but oh dear, AOCC 5 Fortran doesnât support coarrays, guess Iâll have to stick with GNU for a while yet. See?
The Python 2/Python 3 case is instructive. Python 2 was supposed to be replaced by Python 3 fairly quickly, but it is still arouund.
It took longer than expected for a lot of stuff to be ported from P2 to P3, not least because P3 kept changing.
Iâd like to make a suggestion which is meant to be constructive.
Letâs look for transformative changes to Erlang, not âcosmeticâ changes.
Find a task which looks like something Erlang should be good at,
but currently isnât.
Bit match syntax qualifies.
Maps qualify (more so than frames would have, but then I still prefer frames, wrings out handkerchief).
Unicode support qualifies.
Great support for embedded DSLs might qualify; sigils stink on ice and donât.