dcollections 1.0 and 2.0a beta released
Michel Fortin
michel.fortin at michelf.com
Thu May 20 14:42:39 PDT 2010
On 2010-05-20 15:47:22 -0400, bearophile <bearophileHUGS at lycos.com> said:
> Michel Fortin:
>
>> Devirtualization is only possible in certain cases: when the function
>> knows exactly which type it'll get.<
>
> You are wrong, in most cases there are ways to de-virtualize, even when
> the runtime type isn't exactly known, but sometimes to do it you have
> to work too much. This is probably why C# dotnet doesn't perform this
> optimization.
>
> It's a complex topic, I suggest you to read about it, I can't explain
> here, see polymorpic call points, megamorphic ones, dispatch trees, and
> so on.
I know I simplified a bit, and I'll admit you may know more than me
about dynamic dispatch optimizations. But if I'm not mistaken other
devirtualizing solutions are creating multiple instances of the code
path based on either static info or a runtime switch. All this isn't
very different from calling a templated function, but it's more complex
and less reliable (because those optimizations might not be in the
compiler, or might not be applicable to all scenarios).
My point all along was that it's better to stick with templates, where
you're "guarantied" to get the "optimal" code path. The downside is
that you lose the dynamic dispatch capabilities. But I believe those
are rarely needed in most programs. And if you really need it it's
quite easy and efficient to layer dynamic dispatch over static calls
(much more than the reverse).
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d-announce
mailing list