- automatic memory management by default
- testing by default
- distributed version control by default
All of these make you more productive in a typical project. (And should be turned off when not, that's why I say, by default.) I suggest that the following are also unalloyed good, and will make their way into more and more languages over time:
- functions as first class values
- immutability by default / copy-on-write semantics by default
- side-effects only possible when declared (eg IO Monad)
- powerful static typing by default
(We already see in eg git and some file systems that even when the implementation is imperative, immutability makes concepts simpler. Immutability by default virtually requires automatic memory management.)
Comments
Some changes are real progress:
All of these make you more productive in a typical project. (And should be turned off when not, that's why I say, by default.) I suggest that the following are also unalloyed good, and will make their way into more and more languages over time: (We already see in eg git and some file systems that even when the implementation is imperative, immutability makes concepts simpler. Immutability by default virtually requires automatic memory management.)