"Jonathan Sillito" <[EMAIL PROTECTED]> writes:

> It would be nice if parrot provided the lexical scope semantics scheme (and
> other languages) needs rather than have each language implement their own. I
> guess this would be Dan's call, but just as another suggestion, could the
> lexical ops be limited to something like the following, plus keyed access to
> the pad?
> 
>   new Px, .ScratchPad
>   push_pad Px
>   peek_pad Px
>   pop_pad Px
> 
> (The find_lex and store_lex ops would be unnecessary, but could be kept of
> course)

Yes these would definitly be enough. In principle this is exactly what
is my P31-hack does; the only difference is that the lexicals are
saved on their own stack instead of the user stack. But this is
definitly a good thing.

Maybe one more:
   clone_pad Px
The semantics would be:
   peek_pad Py
   clone Px, Py
This is a quite common operation, and the intermediate Py-register
would not be necessary. But I will not push this very strong.

> > And there is a diffrence between define and set!, define creates a new
> > binding in the top lexical scope, ignoring every previous definition,
> > but set! changes the binding of a formerly defined variable. This 2
> > diffrent operations don't map very well on the store_lex_s_p
> > operation. I used the diffrent keyed access methods of Seans
> > Scratchpad.pmc for differentating this use cases:
> > define : P31[-1;S0]
> > set!   : P31[S0]
> >
> 
> Assuming Sean's patch (not my above suggestioned ops), would this implement
> the correct semantics for scheme's (define a ...):
> 
>   new_pad 1
>   new P0, .SchemeUndef
>   store_lex 1, "a", P0
>   # ...
>   pop_pad
> 
> and could (set! a 12) inside of the above define be:
> 
>   new P0, .SchemeInteger
>   store_lex "a", P0  # looks back through nested pads

Somehow it looks if these find_lex/store_lex operations are just a
mapping of the Scratchpad vtable to bytecode with the implicit first
argument current_pad.

find_lex P0, S0      => set P0, P31[S0]
store_lex I0, S0, P0 => set P31[I0;S0]
new_pad              => save P31             || new P31, .Scratchpad
                        new P31, .Scratchpad    push_pad P31

(Again this P31 crap, bad boemmels :-))
Some commonly used operations might be nice, but there needn't be the
complete vtable.

bye
b.
-- 
Juergen Boemmels                        [EMAIL PROTECTED]
Fachbereich Physik                      Tel: ++49-(0)631-205-2817
Universitaet Kaiserslautern             Fax: ++49-(0)631-205-3906
PGP Key fingerprint = 9F 56 54 3D 45 C1 32 6F  23 F6 C7 2F 85 93 DD 47

Reply via email to