retard wrote:
Is this again one of those features that is supposed to hide the fact
that dmd & optlink toolchain sucks? At least gcc can optimize the calls
in most cases where the operator is defined to be virtual, but is used in
non-polymorphic manner.
The gnu linker (ld) does not do any optimizations of virtual call =>
direct call. Optlink has nothing to do with it.
struct C {
virtual int foo() { return 3; }
};
void bar(C* c) {
c->foo(); <== no virtual call optimization here (1)
}
int main() {
C* c = new C();
c->foo(); <== virtual call optimization here (2)
bar(c);
return 0;
}
What D doesn't do is (2). What D does do, and C++ does not, is allow one
to specify a class is final or a method is final, and then both (1) and
(2) will be optimized to direct calls.
Doing (2) is entirely a function of the front end, not the linker.