Christopher Wright:

> > Certainly agreed on virtual calls: on my machine, I timed a simple 
> > example as executing 65 interface calls per microsecond, 85 virtual 
> > calls per microsecond, and 210 non-member function calls per 
> > microsecond. So you should almost never worry about the cost of 
> > interface calls since they're so cheap, but they are 3.5 times slower 
> > than non-member functions.

The main problem of virtual calls in D are the missed inlining opportunities.

------------

Andrei Alexandrescu:

> I seem to recall that 
> interface dispach in D does a linear search in the interfaces list, so 
> you may want to repeat your tests with a variable number of interfaces, 
> and a variable position of the interface being used.

The following is a D port of the well known "Richards" benchmark. This specific 
version is object oriented, its classes are final (otherwise the code gets 
quite slower with LDC) and it has getters/setters. It contains an interface:
http://codepad.org/kO3MJK60

You can run it at the command line giving it 10000000.

On a Celeron 2 GHz if you replace the interface with an abstract class the 
running time goes from 2.16 to 1.58 seconds, compiled with:
ldc -O5 -release -inline

Compiled with DMD the running time seems about unchanged. I have no idea why. 
Maybe some of you can tell me.

In a day or two I'll release many more timings and tests about this Richards 
benchmark.

Bye,
bearophile

Reply via email to