Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uunet!snorkelwacker!bloom-beacon!parc.xerox.COM!rees From: rees@parc.xerox.COM Newsgroups: comp.lang.scheme Subject: what is lisp, instead? Message-ID: <9008141823.AA08641@satchmo> Date: 14 Aug 90 18:03:10 GMT References: <9008132139.AA11205@mailhost.samsung.com> Sender: daemon@athena.mit.edu (Mr Background) Organization: The Internet Lines: 19 Date: Mon, 13 Aug 90 12:30:00 EDT From: gjc@mitech.com What is one requirement for living well with C? That if you have a lisp-level call to a procedure like (equal (f x) (g y)) that you must be able to call it at C-level as equal(f(x),g(y)); This is a tall order; the only solution of which I'm aware is a conservative GC, and I didn't think siod had one of those (I deduce this from the presence in slib.c of a function called "gc_protect"). 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?