Path: utzoo!utgpu!news-server.csri.toronto.edu!mailrus!cs.utexas.edu!rice!titan.rice.edu!matthias From: matthias@titan.rice.edu (Matthias Felleisen) Newsgroups: comp.lang.scheme Subject: Re: what makes programming? Message-ID: <1990Aug21.041045.8425@rice.edu> Date: 21 Aug 90 04:10:45 GMT References: <9008201428.AA01042@samsung.com> <9008202136.AA02170@mozart.think.com> Sender: news@rice.edu (News) Organization: Rice University, Houston Lines: 70 To: gls@THINK.COM Subject: Re: what makes programming? Newsgroups: comp.lang.scheme In-Reply-To: <9008202136.AA02170@mozart.think.com> References: <9008201428.AA01042@samsung.com> Organization: Rice University, Houston Cc: Bcc: In article <9008202136.AA02170@mozart.think.com> Guy Steele writes that some definition of Scheme in terms of CALL/CC "reminds [him] of the definition of a human being as a 'featherless biped': succinct but not necessarily to the point." That's true, so let's try something better: I. Syntax: Scheme's syntax is simple (minus a few glitches, which the committee will eventually eliminate) and resembles a mathematical language of algebraic expressions. II. Type structure: Scheme is dynamically typed. III. Core: 1. Scheme has first-class procedural values, described by a Lambda-calculus-like syntax. 2. Scheme has assignments that can affect all (lexical) variables in an unrestricted manner. 3. Scheme provides access to a first-class procedural abstraction of the control state of the underlying evaluation machinery. [4. Scheme implementations provide a modest form of a control delimiter in the form of a read-eval-print loop. (Private Opinion)] IV. Primitive Constants and Functions: 1. Scheme provides a fixed number of built-in sets of constants (domains), symbols (an arbitrary set of elements that are in 1-1 correspondence with identifiers), boolean values, several forms of numbers, strings, vectors, and perhaps a few others. 2. Scheme provides a domain predicate for each domain of constants. It also provides a domain predicate for procedural values (which is the negation of all other domain predicates because Scheme has a FIXED number of domains). 3. Scheme provides several ways for constructing values in each domain, selecting components and destructively altering components (if there are any). V. Pragmatics: Scheme comes with a programming philosophy: Use the least expressive fragment (starting with the functional core progressing to continuations and side-effects), in which a problem can be formulated naturally. --- This is all there is. The rest is noise. -- Also, Standard ML satisfies all of the above modulo I, II and IV(2) [crucial!], III(4) [replaceable by reference cells as in Chez Scheme]. The above classification borrows some elements from Landin's [1] informal attempt at classifying languages and my own first attempt [2] at formalizing the ideas that were behind Landin's stuff and the original Scheme design [3]. [1] {Landin, P.J}. The next 700 programming languages. {\it Commun. ACM \bf9}(3), 1966, 157--166. [2] {Felleisen, M}. On the expressive power of programming languages. In {\it Proc. 1990 European Symposium on Programming}. Neil Jones, Ed. Lecture Notes in Computer Science, 432. 1990, 134--151. [3] {Steele, G.L., Jr. and G.J. Sussman}. Lambda: The ultimate imperative. Memo 353, MIT AI Lab, 1976. -- Matthias