Simply don't release a new stable version with new features, semantics, but first release an experimental version. Encourage people to compile their code with it, try out the new features/semantics, ... but always let them keep in mind, that things can break with further improvements. The idea is that features in an experimental release can be changed at any time without having to worry about breaking users code, because they expect it. It seems to me that until now things are just discussed very thoroughly, implemented and released. If this is really the case, then I guess the only reason this works so surprisingly well is because the people (Andrei, Walter, ...) are amazingly smart and have learned from the mistakes of other languages. But introducing a (limited) way of learning from own mistakes without breaking things, might be useful especially for new concepts not found in other languages.
I don't see how this complicates the compiler? People could choose between using the experimental version for the awesome feature xy and taking the risk of fixing code with incompatible changes or stick with the stable version. Robert > > Sounds useful to me. > How would you implement it? I fear it complicates the compiler a lot > and hence introduces bugs. > > Jens
