A Modest Proposal: Final class instances
Jason House
jason.james.house at gmail.com
Tue May 5 05:31:51 PDT 2009
IMHO, this proposal does not go far enough. THose that worry about performance also care about object size. If a vtable or monitor are needed, then people will still avoid classes for performance.
dsimcha Wrote:
> Several people have griped in the past that D class methods are virtual by
> default. I've pointed out to them that you can get around this by making the
> methods final. However, this is a bit of a blunt instrument, because some use
> cases for a single class may call for polymorphism and other use cases for the
> same class may call for fast performance and no polymorphism. A possible
> solution is, given a class:
>
> class Foo {
> // Actual implementation.
> }
>
> final class FooFinal : Foo{
> // Dummy that just makes Foo final.
> }
>
> And then, when you need performance and not polymorphism, you would invoke
> FooFinal instead of Foo. However, this requires manual forwarding of
> constructors and bloats the name space. A simple syntactic sugar solution to
> this dilemma that would add very little complexity to the language would be to
> allow final to describe a class instance, as well as a class. The following
> would apply to a final instance:
>
> 1. Method calls don't need to be virtual.
> 2. An instance of a subclass cannot be converted to a final instance of the
> base class.
> 3. A final instance can be implicitly converted to a non-final instance, but
> the opposite would not work.
>
> Using final as an instance attribute like this would also allow another useful
> feature: Storing class instances inline in arrays, structs, or other classes.
> Basically, by marking a class instance as final, you'd be telling the
> compiler that you do not need and are not using polymorphism in this case,
> even if the class hierarchy uses it for other use cases, and therefore, all
> relevant optimizations can be made.
More information about the Digitalmars-d
mailing list