On Sunday, 18 March 2012 at 14:46:55 UTC, David Nadlinger wrote:
On Sunday, 18 March 2012 at 14:27:04 UTC, David Nadlinger wrote:
Which is wrong as long as you don't do link-time optimization,
and DMD probably won't in the foreseeable future. I tried to
explain that above, think extending Thread, which has already
been compiled into druntime, from your application (which is a
bad example, because thread member method calls are most
probably not performance sensitive, but you get the point).
Also note that this applies to the general case where you get
passed in an arbitrary instance only – if the place where an
object is created is in the same translation unit where its
methods are invoked, the compiler _might_ be able to prove the
runtime type of the instance even without LTO.
And thinking even more about it, devirtualization could also be
performed by present-day DMD when directly generating an
executable with all the modules being passed in via at the
command line. This might actually be good enough for smaller
projects which don't use separate libraries or incremental
compilation.
David