Ok, maybe that was too strong. Honestly, I don't see anything positive coming out of a change like this. As Rex pointed out, it just creates import/build-config boilerplate for, well, everyone. Even for the few who don't use these features (knowingly or unknowingly), these switches have no beneficial effect. You are hiding a language feature that these people haven't seen. By definition, this will be a completely invisible change for a few people and a significantly detrimental change for a majority.
It's also worth noting that many people who use these features do so without knowing it. Existentials and structural types are a particularly strong example of this, but type constructors are also quite common. People who know what these features entail will have already turned them on, while those who don't know will receive a mysterious warning/error on seemingly-innocuous code. Consider the sheer volume of Scala snippets and explanations which will be instantly invalidated.
On a more philosophical level, "hiding" language features like this only serves to fragment the community. It makes life very difficult in venues like mailing lists and Stackoverflow, where users will not only need to specify their language (Scala) but their language "level" (Nerfed Edition). By definition, newcomers to the language will not understand this kind of fragmentation, given that no other language has anything quite like this, and will thus be extremely confused when correct answers to seemingly-simple questions (like extending collections) lead to warnings, or worse, errors.
Pragmatically, I have to ask the question: who are we trying to benefit with this change, and is it such a large benefit as to merit inconveniencing the largest (and most vested) segment of your user-base?
On Saturday, March 17, 2012 1:48:40 PM UTC-6, Martin wrote:
Here's a new SIP which proposes to put some new and existing advanced language features under an import flag. I expect we'll have an interesting discussion about this one. So, please, fire away!