FAQ

[Perl6-internals] Opcodes (was Re: The external interface for the parser piece)

Chaim Frenkel
Nov 30, 2000 at 9:05 pm

"DS" == Dan Sugalski writes:
The "add" op would, in C code, do something like:

void add() {
P6Scaler *addend;
P6Scaler *adder;

addend = pop(); adder = pop();
push addend->vtable->add(addend, adder);
}

it would be up to the addend->vtable->add() to figure out how to do the
actual addition, and what type to return.
DS> Yup. I think it'll be a little more complex than that in the call,
DS> something like:

addend-> vtable->(add[typeof adder])(adder);

DS> The extra level of indirection may hurt in the general case, but I think
DS> it's a win to call the "add an int scalar to me" function rather than have
DS> a generic "add this scalar to me" function that figures out the type of the
DS> scalar passed and then Does The Right Thing. I hope. (Yeah, I'm betting
DS> that the extra indirect will be cheaper than the extra code. But I'm not
DS> writing that in stone until we can do some benchmarking)

Is all that really necessary? Why not a non-vtbl function that knows how
to add numeric types?

I would have wanted to limit the vtbl to self manipulation functions.
Set, get, convert, etc. Cross object operations would/should be
outside the realm of the object. (It seems like trying to lift yourself
by the bootstraps.)

<chaim>
--
Chaim Frenkel Nonlinear Knowledge, Inc.
chaimf@pobox.com +1-718-236-0183
reply

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions