On Wednesday, 12 March 2014 at 23:51:41 UTC, bearophile wrote:
Walter Bright:
The argument for final by default, as eloquently expressed by
Manu, is a good one. Even Andrei agrees with it (!).
The trouble, however, was illuminated most recently by the
std.json regression that broke existing code. The breakage
wasn't even intentional; it was a mistake.
Making final by default is a intentional and planned change,
first you introduce "virtual" (it's already present in dmd
2.066alpha), then you give a warning, and then you deprecate
things, and then later you generate errors. This gives time to
people to fix the code. Even languages far older and far more
widespread than D change, like the nullptr of C++ that replaces
the 0 as null pointer. People that use D for production code
should expect to give a look at the changelog every time a D
version comes out and fix the code accordingly. I am keeping a
large amount of D2 code updated and introducing the usage of
"virtual" in my code will take an amount of time that is little
compared to actually writing new code, refactoring code for
other purposes, fixing bugs, etc. I don't think you can write D
code today and expect it to work perfectly years from now. You
have to keep your code updated or keep using the same compiler
version.
We can introduce ways to better manage the change, like the
"deprecate" keyword, introducing a refactoring tool like the
one in Go language, and keep some backwards incompatible
changes that the community and you regard as sufficiently
important (like deprecating some usages of the comma operator,
etc).
I don't even care much about "final by default".
Also in D there are several features that are "going to be
deprecated". Like old style operator overloading, the built-in
sort, and more and more. Keeping such things in the language
for years without even a deprecation messages is bad. In the
D.learn newsgroup I keep saying to people "don't use that, it's
going to be deprecated". People use those things and if someday
they will get actually deprecated they will cause a damage,
perhaps comparable to introducing final by default. So please
add deprecation messages now for all things that should be
deprecated.
Bye,
bearophile
+1