- There's an element of action at a distance, if I'm sat in my IDE how do I know that feature X is enabled for this project without just typing the code and then seeing the red line through it?
- Defaults are always difficult to choose, will all features be enabled by default to then allow people to discriminate as they please?
- Included libraries that expose something with a disabled feature will end up being nerfed or require a lot more work to provide sufficient functionality through multiple entry points. This troubles me as it seems like it would have the inverse effect on complexity for both consumers and producers of libraries.
- Depending on the choice of enabled features in two different projects, even with the same version of Scala, could end up with quite different "versions" of the language. Code that could easily be used in one would result in a compile error in another.
- From a different angle, there's the question over if this is even necessary, C# has implicit conversions and a whole variety of keywords in the mix but I've not seen suggestions that it's too complex. Java generics are a massive pain for just about anyone that has used them for more than just collections as you'll see here. If the majority of people complaining it's too complex aren't people that have used it, then it would seem to use the advice of those people to shape the future of the language is potentially foolhardy.
- Functional concepts aren't familiar to most programmers and can be a blocker for understanding. Better and more joined up documentation is one of the things that can help with this, the Twitter Scala School is a good example. In a certain sense it's not so much that Scala is complex as that its features don't exist in isolation unlike a lot of other languages, they tend to join up quite nicely. Which results in the potential need to understand several things to get the most out of say the collections framework.
I propose that rather than limiting and oddly fracturing the language, instead provide better tooling that allows programmers to increase their understanding naturally and assists them to do so.