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.

Reply via email to