Dan Sugalski writes:
> At 05:14 PM 12/5/2003 +0100, Leopold Toetsch wrote:
> > set I2, P1["Foo\x00i"] # I1 == I2
> >
> >gets currently the attribute idx (0) of "$Foo::i".
> >Q: Should the assembler mangle the "Foo::i" to "Foo\0i"
>
> I don't like it either, but the alternative is to impose an external
> hierarchic structure. Which we certainly could do, though it may make
> some things more difficult.
>
> I'm more than willing to entertain arguments for and against the
> hierarchic structure, but we're closing in on the point where we fix
> the scheme and don't change it any more.
I'm not sure mangling is a good idea: think about anonymous classes. If
we assign a name to each lexical class, then there are problems when one
instance of a class inherits from another instance of the same class.
That is:
sub make_class(Class $parent) {
return class is $parent {
has $.stuff;
}
}
my $class1 = make_class(Object);
my $class2 = make_class($class1);
So, if you name that lexical class _class_0001 or something,
"_class_0001\0$.stuff" refers to both attributes.
If you generate a name for each instance of a lexical class, you're
setting yourself up for some major runtime cost -- concatenating the
class name to the attribute on each access (or memory cost if you want
to cache).
I think a heirarchy is a good idea for namespacing in general. I've
always wanted to be able to tie namespaces in Perl 5. It would only
make sense that if I tie Foo::, that Foo::anything:: would also go
through that tie to get the anything:: stash.
There are, of course, disadvantages. It would be slower for cases where
$something::or::other are acessed a lot, as it's three lookups in the
absence of cache. Also, it's not as easy to tell where a symbol table
entry came from. I don't think either of these are major concerns, but
it depends on our ultimate goals.
I definitely want to tie namespaces though.
Luke