On 07.12.2013 08:38, Maxim Fomin wrote:
On Friday, 6 December 2013 at 23:30:45 UTC, Walter Bright wrote:
On 12/6/2013 3:06 PM, Maxim Fomin wrote:
and what about holes in immutable, pure and rest type system?
If there are bugs in the type system, then that optimization breaks.
Bad news: there are many bugs in type system.
C doesn't have virtual functions.
Right, but you can (and people do) fake virtual functions with tables
of function pointers. No, C doesn't devirtualize those.
Neither does D.
By the way, does D devirtualize them?
It does for classes/methods marked 'final'
this is essentially telling nothing, because these functions are not
virtual. In your speaking, C 'devirtualizes' all direct calling.
They're both virtual and not (sorta). Consider this case:
class A {
int foo() { return 3; }
}
class B : A {
final int foo() { return 4; }
}
int bar(A a) {
return a.foo();
}
void baz(B b) {
int n = bar(b);
}
If the compiler does not inline the call to bar in baz, a virtual call
is performed. If it does inline it, then it knows that the function
called will always be B.foo, even if the received value may be a
subclass of B.
--
Simen