Dan should really be answering this, but I'll try...

Tom Locke:
# The FAQ briefly mentions:
# 
#     we're already running with a faster opcode dispatch
#     than [Perl, Python, and Ruby] are, and having registers just
#     decreases the amount of stack thrash we get.
# 
# Can I for one ask for some more detail?

Pushing and popping values off a stack--especially the fairly
complicated stacks Parrot uses (and needs)--is an expensive operation;
by having registers, we avoid the expense.  The speed hit from the stack
operations would negate much of our advantage over those other
languages.  That's pretty much all we're saying there.

As I remember, the decision to use registers was based on a few things:

        1. Speed.
                a. The above: Register accesses are faster than stack
accesses,
                   in several significant ways.
                
                b. Fewer opcodes: Using registers means less
pushing/popping, 
                   which means that opcode dispatch is less critical and
ops 
                   that actually *do* stuff will stay in the cache
longer.

        2. Less bytecode: Any way you slice it, "print X" is smaller on
disk       than "push X, print".
        
        3. Optimization: Optimizing register-based code is a problem
that's 
           been heavily studied for decades.  We can leverage all that 
           knowledge to make Parrot bytecode run faster.
        
        4. Ease of hand hacking: It's easier to hand-write and
hand-debug 
           register-based assembler than stack-based assembler.  This
isn't 
           that big an issue, but it is a factor.

Basically it comes down to this: Register architectures have some Hard
Problems, but once they're overcome the code will run faster.  Stack
architectures have fewer Hard Problems, but run slower.

All things considered, we'd rather tackle a few Hard Problems than run
slower.

--Brent Dax <[EMAIL PROTECTED]>
Perl and Parrot hacker
 
"Yeah, and my underwear is flame-retardant--that doesn't mean I'm gonna
set myself on fire to prove it."

Reply via email to