Path: utzoo!mnetor!tmsoft!torsqnt!lethe!yunexus!ists!helios.physics.utoronto.ca!news-server.csri.toronto.edu!bonnie.concordia.ca!uunet!wuarchive!zaphod.mps.ohio-state.edu!pacific.mps.ohio-state.edu!linac!att!news.cs.indiana.edu!hieb@heston.cs.indiana.edu From: hieb@heston.cs.indiana.edu (Robert Hieb) Newsgroups: comp.lang.scheme Subject: Re: Tail-calling and garbage collection Message-ID: <1991Feb19.111756.11512@news.cs.indiana.edu> Date: 19 Feb 91 16:17:49 GMT References: Organization: Computer Science, Indiana University Lines: 29 Two points: 1) The "official" Scheme semantics is an approximation. There are various aspects of Scheme that are under-specified, over-specified, or wrongly-specified by the denotational specification. 2) There is more than one way to model a language. It is not clear that a denotational model is the best way to model a language like Scheme. An operational model might be better in some respects. To expand on the second point, consider the lambda calculus. Although there are denotational models, the primary model must be beta reduction. It is worth noting that beta reduction is clean with respect to both tail recursion and garbage. In fact, beta reduction is even clean with respect to environments, a claim which few Scheme systems can make. That is, the environment of a closure or continuation in most Scheme implementations hangs onto variable bindings that are not free in the text of the closure or continuation (or in the transitive closure thereof). Garbage collection and tail recursion are too fundamental to Scheme to ignore based on a notion of semantics that is not broad enough to include them. Without guarantees of both Scheme would be useless as a programming language. One would be forced to add specific looping and allocation/deallocation constructs. C with first-class closures and continuations would be an interesting language, but not Scheme. Bob Hieb Indiana University