Properties set/get huge speed difference?

Sean Kelly sean at f4.ca
Mon Oct 9 12:20:36 PDT 2006


Lars Ivar Igesund wrote:
> %u wrote:
> 
>>> although the program compiled with dmd is slower (0.20s) than gdc, this
>>> doesn't concern me now. "final" works in dmd, both gets/sets have the
>>> same speed.
>>
>> I thought D was supposed to automatically make all methods final that
>> aren't changed by a subclass?
> 
> How could the compiler know that? The class might be put into a library, and
> subclassed in an application (a very common use case) or other library.

I think it's more likely that a compiler may optimize function calls 
when it knows exactly what type of object is being called.  For example:

     class C {
         void doSomething() {}
     }

     void main() {
         C c = new C();
         c.doSomething(); // A
     }

In the code above, even though a vtbl entry may be generated for 
doSomething, the compiler may optimize the call at point A by calling 
C.doSomething directly instead of using a double lookup through C's 
vtbl.  This can be accomplished because the compiler knows that c must 
be an instance of C at the call point (thus making the optimization 
extensible to more complex cases where doSomething really is a virtual 
function).  I'm not sure if DMD currently performs this optimization 
however, but my guess would be that it does not.  It's still more 
important to make DMD as bug-free as possible than it is to optimize 
corner-cases.


Sean



More information about the Digitalmars-d-learn mailing list