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/

Reply via email to