virtual-by-default rant
Ary Manzana
ary at esperanto.org.ar
Sat Mar 24 09:26:21 PDT 2012
On 3/24/12 3:03 AM, Manu wrote:
> On 23 March 2012 17:24, Ary Manzana <ary at esperanto.org.ar
> <mailto:ary at esperanto.org.ar>> wrote:
>
> On 3/18/12 9:23 AM, Manu wrote:
>
> The virtual model broken. I've complained about it lots, and people
> always say "stfu, use 'final:' at the top of your class".
>
> That sounds tolerable in theory, except there's no 'virtual'
> keyword to
> keep the virtual-ness of those 1-2 virtual functions I have...
> so it's
> no good (unless I rearrange my class, breaking the logical
> grouping of
> stuff in it).
> So I try that, and when I do, it complains: "Error: variable
> demu.memmap.MemMap.machine final cannot be applied to variable",
> allegedly a D1 remnant.
> So what do I do? Another workaround? Tag everything as final
> individually?
>
> My minimum recommendation: D needs an explicit 'virtual'
> keyword, and to
> fix that D1 bug, so putting final: at the top of your class
> works, and
> everything from there works as it should.
>
>
> Is virtual-ness your performance bottleneck?
>
>
> Frequently. It's often the most expensive 'trivial' operation many
> processors can be asked to do. Senior programmers (who have much better
> things to waste their time on considering their pay bracket) frequently
> have to spend late nights mitigating this even in C++ where virtual
> isn't default. In D, I'm genuinely concerned by this prospect. Now I
> can't just grep for virtual and fight them off, which is time consuming
> alone, I will need to take every single method, one by one, prove it is
> never overloaded anywhere (hard to do), before I can even begin the
> normal process of de-virtualising it like you do in C++.
> The problem is elevated by the fact that many programmers are taught in
> university that virtual functions are okay. They come to the company,
> write code how they were taught in university, and then we're left to
> fix it up on build night when we can't hold our frame rate. virtual
> functions and scattered/redundant memory access are usually the first
> thing you go hunting for. Fixing virtuals is annoying when the system
> was designed to exploit them, it often requires some extensive
> refactoring, much harder to fix than a bad memory access pattern, which
> might be as simple as rearranging a struct.
Interesting.
I spend most of my work time programming in Ruby, where everything is
virtual+ :-P
It's good to know that virtual-ness can be a bottleneck.
More information about the Digitalmars-d
mailing list