On Wed, 13 Jun 2001 12:00:21 +0100 (BST), Dave Mitchell wrote:

>I was thinking back to the earlier discusions on opcode dispatch,
>and the fact that some people thought that a big switch was as good as,
>or possibly faster than a dispatch table. Which led me to think...

I would think that a switch could be optimized by the compiler by
turning it into a jump table. That way, it's not surprising that it "can
be as fast". Un der the surface, it is the same thing!

>should we abandon vtables (ie arrays of fn pointers indexed by op),
>and just have a single hander function per type which has the op as an arg?

You mean, like Windows' "window function? Shudder.

I wouldn't do that. For one thing, a vtable can grow dynamically,
functions can be added at runtime. It doesn't matter, the machine code
to execute remains the same for built-in, or for freshly added
functions.

In a statically compiled switch, it is impossible to add a new function,
i.e. a new switch branch.

Furthermore, unoptimized switches are definitely slower than vtables.
Internally, a switch is turned into something like:

        if($fn == FN1) {
                ...
        } elsif($fn == FN2) {
                ...
        } elsif($fn == FN3) {
                ...
        } elsif($fn == FN4) {
                ...
        } elsif ...
        }

The further down the chain, the slower the dispatching. Do you really
want that?

-- 
        Bart.

Reply via email to