In perl.perl6.internals, you wrote:

> A "thing" has three parts, a name (which is optional), a container,
> and the contents of the container.

[ ... ]

> Well, first it means we need to conceptually split "variables" into
> three parts, rather than two as we have been.

Do you have a more verbose description of variable/value separation?

> It also means that we need to (or at least really should) split
> vtables up into parts, so we can pull them upwards as
> appropriate. That way we can promote vtable pieces where appropriate,
> when the value and variable are of the same type, to cut out dispatch
> overhead.

something like:

struct {
        can;
        has;
        isa;
        union {
          scalar_vtable;
          aggregate_vtable;
          object_vtable;
        };
VTABLE;

"Plain" variables would call either the scalar or the aggregate variant
of the vtable of there type.

Overloaded variables would have a private copy of this vtable. The
overloaded vtable entry points to a stub function, invoking the actual
code.

Objects have their classes vtable, using find_method to locate the PMC
which can then be invoked to do the action.

> ... And in those cases where we can't do that, we can do the
> normal two-level access. (Though hopefully we can avoid it for most
> anything besides objects and aggregates)

verbose please

leo

Reply via email to