Re: Lexical variables, scratchpads, closures, ...
by Melvin Smith other posts by this author
Aug 1 2002 3:22AM messages near this date
Lexical variables, scratchpads, closures, ...
|
Re: Lexical variables, scratchpads, closures, ...
At 06:25 PM 7/31/2002 +0200, Jerome Vouillon wrote:
> Scratchpads
>
> We need to allocate an area in the heap for each lexical variable.
> Instead of allocating this area one variable at a time, we can
> allocate a single "scratchpad" value for all variables of a block:
> this is more efficient.
>
> The compiler can keep track of the index of the variables in the
> scratchpad. So, the scratchpad can be implemented as an array of
> PMCs. (We will probably need some faster opcodes to access the
> array: there is no need to perform a method call, nor to do any
> bound checking.)
That is exactly what we are doing. However, the scratchpads themselves
are kept in a data structure, currently a stack, so discarding one
scratchpad activates the previous.
> MY
>
> To implement MY, we need to be able to access to a variable by its
> name. For this, the compiler can generate statically a hash mapping
> the variable name to its index in the scratchpad. Then,
> MY{"foo"} will look up the index of the variable "foo" in the
> hash and use the index to get the variable PMC in the scratchpad.
I think this is the plan.
> To access the scratchpad of an outer block, we need a way to move
> from a scratchpad to its parent scratchpad. This is trivial if we
Currently it is as a linked-list.
> Closures
>
> A subroutine must have access to the scratchpads of all the
> englobing blocks. As the scratchpads are linked, it is sufficient
> to add a pointer to the immediately englobing scratchpads to the
> closure (Sub class).
And they need to be COW, as closures have access to their
own copies of lexicals. I asked Jonathan to reuse the stack code
I had already written because it was using the same semantics
with COW as control and user stacks.
> Conclusion
>
> It seems to me that to implement lexical variables, we only need to
> implement the set_pmc method and to extend the Sub class so that it
> contains both a code pointer and a scratchpad.
I agree with you. It can be done without special ops that we just added.
I see no reason why we can't add an op that allows you to get the
scratchpad into a Px reg and use it just as a Hash or Array. I expect
we might want to.
> In particular, we don't need any special support for scratchpads, at
> least for the moment.
>
> What do you think?
I think you have the same idea that we do. We chose to implement
the access as ops, and you prefer using a PMC Array directly. I can
at least see one advantage to the explicit ops: they don't require
a register to use them in the general case.
-Melvin
Thread:
Jerome Vouillon
Melvin Smith
Jerome Vouillon
Sean O'Rourke
Jerome Vouillon
Dan Sugalski
Dan Sugalski
Simon Cozens
Nicholas Clark
Sean O'Rourke
Jerome Vouillon
Nicholas Clark
Jerome Vouillon
Jonathan Sillito
Dave Mitchell
Melvin Smith
Sean O'Rourke
Dan Sugalski
Dan Sugalski
Jonathan Sillito
Jerome Vouillon
Melvin Smith
Jerome Vouillon
Melvin Smith
Jerome Vouillon
Jonathan Sillito
Sean O'Rourke
|