Final by default?
deadalnix
deadalnix at gmail.com
Wed Mar 12 21:56:09 PDT 2014
On Wednesday, 12 March 2014 at 22:50:00 UTC, Walter Bright wrote:
> 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. The user fix was
> also simple, just a tweak here and there to user code, and the
> compiler pointed out where each change needed to be made.
>
> But we nearly lost a major client over it.
>
> We're past the point where we can break everyone's code. It's
> going to cost us far, far more than we'll gain. (And you all
> know that if we could do massive do-overs, I'd get rid of put's
> auto-decode.)
>
> Instead, one can write:
>
> class C { final: ... }
>
> as a pattern, and everything in the class will be final. That
> leaves the "but what if I want a single virtual function?"
> There needs to be a way to locally turn off 'final'. Adding
> 'virtual' is one way to do that, but:
>
> 1. there are other attributes we might wish to turn off, like
> 'pure' and 'nothrow'.
>
> 2. it seems excessive to dedicate a keyword just for that.
>
> So, there's the solution that has been proposed before:
>
> !final
> !pure
> !nothrow
> etc.
Yes please.
More information about the Digitalmars-d
mailing list