On Jan 14, 2007, at 7:37 PM, Andy Dent wrote:


On 15/01/2007, at 2:03 AM, Mars Saxman wrote:


The second thing you're talking about is a specific performance optimization known as "call devirtualization". This is where the compiler observes that a specific call target could not have been overridden and uses that knowledge to generate a simpler call sequence.

For the non-C++ people amongst us I'll expand on this.

1) C++ allows you to have "stack objects" within a function, which are declared locally and have a lifespan only within that scope. The compiler knows the exact type of the stack object, there's no chance of it being a subclass, and therefore can devirtualize all calls to methods of that object.


2) Ironically, C++ has a principle of "separate compilation" which means most compilers do not consider classes from different files together and so RB is in a better place to do whole-program optimisation. There are some C++ environments I believe now starting to do whole-program optimisation but it is far from mainstream.

You can achieve the equivalent of C++ choosing if methods are virtual or not by using 'extends' methods currently in RB but I don't think that is guaranteed forever - I don't think RS have ruled out making 'extends' methods virtual in future.

No, since an "Extends" method cannot access object properties/ methods, IIRC (it's just a form of RB syntactic sugar that allows you to 'tack on' a method to a class's namespace, similar to a class method) In this sense, VB.Net has an advantage here as you can specify a method as "Overridable" in a base class, and "Overrides" in subclasses that wish virtual behavior, or "Shadows" if they don't. I suspect that VC#.Net has a similar feature.

Inlining of small methods, which would require devirtualisation or an explicit programmer declaration they were non-virtual, is the kind of optimisation that makes a huge difference depending on your programming style. I will admit that in RB I tend to write fewer accessor methods. Having just moved to RB2007 from RB5, I will experiment with the performance of Property methods to see how much overhead they add. If the Get and Set methods are non-virtual, they would be a good candidate for inlining.

The range of programming styles, application needs and algorithms applied is so broad across a community like RB, it's probably impossible for Mars to point to any one optimisation that will make a big difference to people in general.

_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>

Search the archives of this list here:
<http://support.realsoftware.com/listarchives/lists.html>

_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>

Search the archives of this list here:
<http://support.realsoftware.com/listarchives/lists.html>

Reply via email to