On 2015-08-19 20:41, Walter Bright wrote:
It's true that if generating an exe, the compiler can mark leaf classes
as final and get devirtualization.
Since D has the "override" keyword it should be possible to devirtualize
a call to a non leaf classes as well, as long as the method is not
overridden.
(Of course, you can manually add'final' to classes.)
The same way as you can manually do many of the other optimizations as well.
One case where "final" does not help is if there's a piece of code the
is shared between two projects. In one project there is a subclass with
a method overridden but in the other project there's not.
// shared code
module base;
class Base
{
void foo () {}
}
// project A
import base;
class A : Base { }
// project B
import base;
class B : Base
{
override void foo () {}
}
--
/Jacob Carlborg