At 04:44 PM 10/29/2001 -0500, Ken Fox wrote:
>Well, I've tuned things up a bit. It's now
>hitting 56 mops with the mops.pasm example. Parrot
>turns in 24 mops on the same machine with the same
>compiler options.
Damn. I hate it when things outside my comfort zone end up being faster. :)
>This is not a fair comparison
>because the Parrot dispatcher isn't optimal, but it
>shows I'm not hand waving about the architecture
>any more... ;)
I didn't think you were, unfortunately. (for me, at least) A SS
architecture skips a level of indirection, and that'll end up being faster
generally.
What sort of dispatch was your version using, and what sort was parrot
using in your test?
>One thing I learned is that it's not necessary (or
>desirable) to do enter/exit scope ops.
Don't forget that you'll need those for higher-level constructs. For
example, this code:
{
my Dog $spot is color('brindle'):breed('welsh corgi');
}
will need to call Dog's constructor and attribute setting code every time
you enter that scope.
You also potentially need to allocate a new scope object every time you
enter a scope so you can remember it properly if any closures are created.
>I implemented
>"sync_scope" which takes a scope id as an operand
>and switches the VM into that scope, adjusting
>the current lexical environment as necessary.
How does this handle nested copies of a single scope? That's the spot a SS
architecture needs to switch to indirect access from direct, otherwise you
can only have a single instance of a particular scope active at any one
time, and that won't work.
I'm curious as to whether the current bytecode could be translated on load
to something a SS interpreter could handle.
Dan
--------------------------------------"it's like this"-------------------
Dan Sugalski even samurai
[EMAIL PROTECTED] have teddy bears and even
teddy bears get drunk