the evolution of lisp - dreamsongs and steele, evolution of lisp 3 the acceptance stage depends on...
Post on 07-Feb-2018
Embed Size (px)
The Evolution of Lisp
Guy L. Steele Jr.Thinking Machines Corporation
245 First StreetCambridge, Massachusetts 02142
Phone: (617) 234-2860FAX: (617) 243-4444
Richard P. GabrielLucid, Inc.
707 Laurel StreetMenlo Park, California 94025
Phone: (415) 329-8400FAX: (415) 329-8480
Lisp is the worlds greatest programming languageor so its proponents think. Thestructure of Lisp makes it easy to extend the language or even to implement entirely newdialects without starting from scratch. Overall, the evolution of Lisp has been guidedmore by institutional rivalry, one-upsmanship, and the glee born of technical clevernessthat is characteristic of the hacker culture than by sober assessments of technicalrequirements. Nevertheless this process has eventually produced both an industrial-strength programming language, messy but powerful, and a technically pure dialect,small but powerful, that is suitable for use by programming-language theoreticians.
We pick up where McCarthys paper in the first HOPL conference left off. We tracethe development chronologically from the era of the PDP-6, through the heyday ofInterlisp and MacLisp, past the ascension and decline of special purpose Lisp machines,to the present era of standardization activities. We then examine the technical evolutionof a few representative language features, including both some notable successes andsome notable failures, that illuminate design issues that distinguish Lisp from otherprogramming languages. We also discuss the use of Lisp as a laboratory for designingother programming languages. We conclude with some reflections on the forces thathave driven the evolution of Lisp.
Introduction 2Implementation Projects Chronology 5
From Lisp 1.5 to PDP-6 Lisp: 19601965 6MacLisp 7Interlisp 15The Early 1970s 21The Demise of the PDP-10 22Lisp Machines 25IBM Lisps: Lisp360 and Lisp370 30Scheme: 19751980 32Prelude to Common Lisp: 19801984 36Early Common Lisp 36Other Stock Hardware Dialects: 19801984 44Standards Development: 19841990 49
Evolution of Some Specific Language Features 60The Treatment of NIL (and T) 60Iteration 63Macros 66
Gabriel and Steele, Evolution of Lisp 2
Numerical Facilities 78Some Notable Failures 81
Lisp as a Language Laboratory 88Why Lisp is Diverse 96
1.1 Organization of This Paper
A great deal has happened to Lisp over the last thirty years. We have found it impossible totreat everything of interest coherently in a single linear pass through the subject, chronologicallyor otherwise. Projects and dialects emerge, split, join, and die in complicated ways; the careersof individual people are woven through these connections in ways that are sometimes parallel butmore often orthogonal. Ideas leap from project to project, from person to person. We have chosento present a series of slices through the subject matter. This organization inevitably leads to someredundancy in the presentation.
Section 2 discusses the history of Lisp in terms of projects and people, from where McCarthyleft off [McCarthy, 1981] up through the efforts to produce official standards for Lisp dialects withinIEEE, ANSI, and ISO. Section 3 examines a number of technical themes and traces separately theirchronological evolution; here the emphasis is on the flow of ideas for each topic. Section 4 traces theuse of Lisp as a language laboratory and implementation tool, especially for the development of AIlanguages; particular attention is paid to ways in which feedback from the AI languages influencedthe development of Lisp itself. Section 5 draws some conclusions about why Lisp evolved as it did.
1.2 The Pattern of Language Evolution
The evolution of Lisp since Lisp 1.5 is characterized by a cycle of diversification, acceptance, andconsolidation. During diversification, new language constructs, new styles of programming, newimplementation strategies, and new programming paradigms are experimented with and introducedto existing Lisp dialects, or new Lisp dialects are designed. In either case, a new Lisp dialect is,in effect, created. During acceptance, these new Lisp dialects are either accepted or rejected. Thedesigners or backers of the new dialect will set conditions for acceptance, and the success of theacceptance phase will be determined by those conditions. During consolidation, a variety of dialectsare merged into a mainstream dialect. Typically one dialect will be chosen as the root and thebranches will be taken from the same tree as the root or from other dialects. Consolidation is aprocess of standardization, either formal or informal. Consolidation, when most successful, resultsin a stable development platform.
The cycle is not inexorable: The process can break down, stop and start, and cycles can beskipped. But it is possible to view the process of evolution at any point as being within one ofthese stages of the cycle, with the goal of moving to the next stage.
Each stage can be characterized by the conditions that allow it to be entered.
1.2.1 Conditions for Acceptance
The most critical stage is acceptance. This stage determines which language features and paradigmswill be part of the next stage of stable development. The conditions for acceptance are being onthe right machines, fitting into local user models, solving a pressing new problem, having the rightcachet. Each will be explored in detail.
Gabriel and Steele, Evolution of Lisp 3
The acceptance stage depends on a particular acceptance group choosing to base their workon the new dialect. An example acceptance group comprises the commercial artificial intelligencecompanies. A particular dialect of Lisp might be targeted to solve the problems of this communitythrough, for example, integration with mainstream languages. Whether this dialect moves on tothe next stage in the cycleconsolidationdepends on whether this acceptance group chooses toenter a period of acceptance with the dialect and in fact the dialect passes the acceptance stage byactually providing solutions.
The dialect should run on the right machines. This includes being on the right manufacturersmachines. A Lisp dialect will be accepted when the people who will determine acceptability canuse the dialect right away with proper performance. This also includes having acceptable size andperformance for the machines. If the key user groups are using computers of a certain size andspeed, the Lisp dialect should run acceptably on that configuration. This is complicated by thefact that the designers or promoters of a dialect will sometimes choose the initial target computerwith an eye only towards the total number of installed computers rather than the more restrictivenumber of computers installed or soon-to-be installed in the target user base. As we will see,InterLisp and NIL fell into disuse when their promoters chose the wrong computers.
Next is fitting into local user models. Each user group will have a style of working or setof methodologies within which the new dialect must fit. Oftentimes a new dialect will be anextension of an existing one, and unless the acceptance group is able to embrace the dialect ina timely fashion, the dialect will not enter the acceptance stage and will unlikely be part of aconsolidation. Sometimes the acceptance group is newly formed and has no existing working stylesor methodologies, and in this case the new dialect should present a working model acceptable tothe acceptance group.
Next is solving timely problems. An acceptance group is one whose success will determine theacceptance of a dialect if that dialect is required by the acceptance group. The acceptance groupmust have a set of needs not addressed at the time the new dialect would enter this stage; otherwisethe acceptance group would have no need to switch to the new dialect, and perhaps such a switchwould be too risky for the group. If the group is commercial or has a set of outside-determinedsuccess criteria, that group will be risk averse, and the new dialect must offer significant perceivedvalue for achieving these criteria. For example, a group that is embarking in a large project withstrict productivity or reuse requirements, a Lisp dialect with a strong object-oriented componentmight be readily embraced. A dialect with marginal or incremental improvements will often not beaccepted.
Finally is cachet. We use the word cachet as it is used in the advertising and fashion industries.A scarf with cachet is worn by people in the most exclusive and desired echelons of high society,and so that scarf is highly desired and sought after. A perfume with cachet is charged, prized, andpeople dont merely want to own itthey want to possess it.
So it is with computers. The best examplethough some might argue with itis the Macintoshas compared with the IBM PC. When you look at them objectively, there is considerably moresoftware on the PC, and it is probably used much more heavily in business than the Macintosh.But there is something about the Macintosh that appeals to the leading edge computerist. If youlook at most hobbyiststhe ones who rave on and on about how great computers are and howeveryone should have onethey either own a Macintosh or wish they did. The difference betweena PC and a Macintosh is cachet.
Cachet does not always mean best of breed or most expensive or most exclusive. A 1967 FordMustang has more cachet than an 1992 Mercedes 300 SE, though the latter is far more expensive.
Acceptance groups comprise people who must individually wish to adopt a new dialect. Thepeople who would use Lisp generally characterize themselves as leading edge. Therefore, there
Gabriel and Steele, Evolution of Lisp 4
must be at least some aspects of leading e