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

Marc Feeley feeley at iro.umontreal.ca
Tue May 6 17:32:01 EDT 2014


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.

Marc




More information about the Gambit-list mailing list