In the design of Starlark (https://github.com/bazelbuild/starlark), I often had to push back against new feature requests to keep the language simple. I explicitly listed simplicity as a design goal.i
Of course, the scope of the language is not the same as general purpose languages, but there's always pressure from the users to add more things. I also think many people underestimate the cost of adding new features: it's not just about adding the code in every compiler/interpreter, specifying every edge-case in a spec, updating all the tooling for the language and writing tutorials; it's also a cost on everyone who will have to read any of the code.
> it's also a cost on everyone who will have to read any of the code.
Everyone who will have to read the code in the compiler or interpreter? Or everyone who reads code in the language?
I'm not so sure the latter should be a consideration. If you don't give people some feature they would use, they will develop their own idioms to accomplish the same with what the language does provide. And the reader then has to become familiar with those idioms, and repeat the process for every new codebase they encounter in the language. Better to have one good way to do it.
Of course, the feature itself brings value, so you have to balance the cost and the value.
If something is used a lot, you can expect the reader to learn the pattern quickly. If something is not super common and not intuitive, it can make the code less readable (and the reader might spend a lot of time searching in the documentation).
Two examples I've seen this week:
- Python has a new keyword `except*`
- C# has a prefix operator ^
It's not obvious to me that these features are beneficial in general.
It's absolutely a tradeoff requireing a cost-benefit analysis.
Prior to Java 5, the language was quite simple, the spec readable and understandable without requiring deep knowledge of compilers.
The introduction of generics and lambdas massively complicated the language specification. But those features also were huge improvements that pretty much anyone would consider worth the cost.
It has some kind of compatibility with Python, but the language is much more minimalist.
New features can be discussed on the GitHub issue tracker, but I expect very few additions in the short-term. I consider the language quite stable now, and it has three mature implementations.
Of course, the scope of the language is not the same as general purpose languages, but there's always pressure from the users to add more things. I also think many people underestimate the cost of adding new features: it's not just about adding the code in every compiler/interpreter, specifying every edge-case in a spec, updating all the tooling for the language and writing tutorials; it's also a cost on everyone who will have to read any of the code.