[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