[gambit-list] How JS backend GC:s?

Mikael mikael.rcv at gmail.com
Tue May 6 17:40:51 EDT 2014


2014-05-06 23:32 GMT+02:00 Marc Feeley <feeley at iro.umontreal.ca>:

>
> On May 6, 2014, at 4:22 PM, Mikael <mikael.rcv at gmail.com> wrote:
>
> > Dear Marc,
> >
> > Just curious, Gambit's JS backend, it uses the JS VM:s GC right -
> >
> > How do you make the SCM to JS object mapping deliver that?
> >
> > I mean, say, a cons cell, a vector, a closure, a firstclass continuation
> and a stack frame, about how are those mapped to JS objects as for the JS
> VM to be able to GC them just as it does with ordinary values?
> >
> >  - Gambit uses numbers for object references ordinarily, so I guess the
> object mapping has been done deeper than that, so that actual JS object
> references are used as SCM object references by the JS backend.
>
> Scheme objects are mapped to JS objects.  So a pair is an instance of the
> "class" Gambit_Pair, and a vector is an instance of the class
> Gambit_Vector.  Scheme closures are JS closures.  A Scheme continuation is
> a chain of frames (each frame is a JS array).  So everything is garbage
> collectible by the JS GC.
>
> There is a bit of fanciness in how the continuations are created.  The
> Scheme stack is an extensible array and stack frames are allocated in this
> array contiguously.  When a continuation is captured the stack is emptied
> and each frame becomes an independent JS array.
>

Aha. And then, when one stack frame (JS  array) refers to another stack
frame (JS array), then this is done by the means of an actual object
reference?

E.g.

var frame1 = [value, value ...... ];

var frame2 [value, ........ frame1, ...];

?

>
> Marc
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20140506/af3ac4f4/attachment.htm>


More information about the Gambit-list mailing list