Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sdd.hp.com!zaphod.mps.ohio-state.edu!usc!snorkelwacker!bloom-beacon!eru!luth!sunic!mcsun!i2unix!inria!mirsa!avahi.inria.fr!colas From: colas@avahi.inria.fr (Colas Nahaboo) Newsgroups: comp.lang.scheme Subject: Re: what is lisp, instead? Message-ID: <1990Aug16.103617@avahi.inria.fr> Date: 17 Aug 90 08:00:17 GMT References: <9008132139.AA11205@mailhost.samsung.com> <9008141823.AA08641@satchmo> Sender: news@mirsa.inria.fr Reply-To: colas@avahi.inria.fr (Colas Nahaboo) Organization: Koala Project, Bull Research France Lines: 28 In article <9008141823.AA08641@satchmo>, rees@parc.xerox.COM writes: > Or do you have some other way of dealing with the situation where > (assuming left-to-right argument evaluation in C) > - the result of f is consed > - the only pointer to this result while in g is on the C stack > - invoking g triggers a GC > - after the gc g does more allocation, thereby overwriting the > result of the call to f? In wool (the lisp interpreter I designed for gwm), I use an original time-based GC: a gc only garbage-collects objects whose GC count came to 0 more recently than the current stack frame was entered. Then in the case "equal(f(x),g(y))" a GC in g won't try to gc objects created by f, which are "older" than the invocation of g. This scheme avoids to bother the C programmer with any GC_protect type of calls. PS: gwm is an emacs-like WIndow Manager for X: it has a built-in lisp interpreter for customization, fast and small, and totally C-compatible, written in C. (and ~ 3 times faster than xlisp and emacs lisp). PPS: wool was designed to be a library for C programmers, and to be as easy and natural as possible to use from C. -- Colas Nahaboo, Bull Research France -- Koala Project -- GWM X11 Window Manager colas@avahi.inria.fr Phone: (33) 93.65.77.70, Fax: (33) 93 65 77 66 INRIA - Sophia Antipolis, 2004, rte des Lucioles, 06565 Valbonne Cedex, FRANCE