On Fri, Aug 02, 2002 at 06:43:49PM +0200, Jerome Vouillon wrote: > On Fri, Aug 02, 2002 at 08:50:27AM -0700, Sean O'Rourke wrote:
> > I don't see how you can cope with '%MY' unless you have a hash. You could > > have a hash in addition to the array, I suppose. > > Sure, you need a hash. But this can be a statically allocated hash, > mapping variable names to indices. Which probably still works even with %MY - providing we have some way that the pad is pointing to the static version, until something run time fiddles with our scope, at which point we copy it to a dynamic version, and from then on that lexical scope is dynamic. (and only then is it slower) We don't have to even have much of a hit of following the pointer if a static structure looks like this struct pad { struct runtime_pad *in_use_pad; struct runtime pad { ... } default_static_pad; }; where default_static_pad is the compile-time job, and in_use_pad points to it until %MY is written to. > > In any case, Dan has > > promised us some sort of indexed "back-door" access to our hashes, so I > > get the feeling the point is moot -- hashes will be arrays in some sense. > > Allocating a hash will certainly remain a lot more expensive than > allocating an array. And we are going to allocate pads pretty > often... Are we? Or are we just going to copy them a lot at runtime? [but actually allocate the beasts only at compile time, or when someone mucks around with them using string eval or %MY] > > And actually, thanks to %MY and caller.MY, we need a new pad even > > for scopes without lexicals, since they can be inserted later. > > I really hope %MY and caller.MY will not be able to extend the lexical > scope: we would get a really huge speed penalty for a feature which > would hardly ever be used. I think we need to be aware of this, but I don't think it has to be that painful. If all scopes have a pad pointer, but lexical-free scopes start with it null, then there won't be a really huge speed penalty. [it might actually be faster, as this way all pads *are* equal, so there doesn't need to be special case code distinguishing between scopes with lexicals and scopes without.] Nicholas Clark -- Even better than the real thing: http://nms-cgi.sourceforge.net/