Slow performance compared to C++, ideas?

Jonathan M Davis jmdavisProg at gmx.com
Mon Jun 3 23:23:02 PDT 2013


On Tuesday, June 04, 2013 02:10:40 Andrei Alexandrescu wrote:
> On 6/4/13 2:04 AM, deadalnix wrote:
> > On Tuesday, 4 June 2013 at 05:58:32 UTC, Andrei Alexandrescu wrote:
> >> Unless fresh arguments, facts, or perspectives come about, I am
> >> personally not convinced, based on this thread so far, that we should
> >> operate a language change.
> > 
> > export => finalization as LTO ?
> 
> I see some discussion about that at http://goo.gl/KIl8L, but am unclear
> on the exact idea. Is it some sort of class hierarchy analysis during
> link time?

The idea is that any function which isn't overridden shouldn't be virtual. 
However, in the normal case, there's no way of knowing whether a class will be 
derived from or whether any particular function will be overidden. Code can be 
compiled separately such that the compiler has no clue what derived classes 
exist.

However, in the case where you have a shared library and all symbols which 
will be used outside of the library must be exported, the linker could 
theoretically examine every function which is not exported and make it non-
virtual if it's not being overridden, because no code outside of the shared 
library could possible override it. This will only help functions which aren't 
exported, and will only work on Windows, as no other platform currently 
requires that symbols be explicitly exported. It also requires that the linker 
do this, and as long as we're using the C linker, I don't know how it could. 
It would need to understand virtual functions (and possibly D virtual 
functions specifically) in order to make the optimization.

- Jonathan M Davis


More information about the Digitalmars-d mailing list