Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!uunet!mcsun!ukc!edcastle!aiai!jeff From: jeff@aiai.ed.ac.uk (Jeff Dalton) Newsgroups: comp.lang.lisp Subject: Re: Is this the end of the lisp wave? Message-ID: <3954@skye.ed.ac.uk> Date: 16 Jan 91 19:01:04 GMT References: <127724@linus.mitre.org> <5569@turquoise.UUCP> Reply-To: jeff@aiai.UUCP (Jeff Dalton) Organization: AIAI, University of Edinburgh, Scotland Lines: 54 In article <5569@turquoise.UUCP> ahlenius@motcid.UUCP (Mark Ahlenius) writes: >djb@babypuss.mitre.org (David J. Braunegg) writes: >>OK. What are the problems preventing a smaller, more efficient Lisp >>so that we aren't forced to use the almost-a-programming-language C? > >There is a smaller, faster dialect of CL out there and as far as I >know it is being taught in some of the major universities - its Scheme. I'm not sure the Scheme folk think of their language as a "dialect of CL". A dialect of Lisp, yes, but not a Common one. Nor am I convinced that Scheme will be faster. Standard Scheme, at least, lacks many of the efficiency tricks (e.g., declarations) available in CL. However, Scheme is smaller and, consequently, easier to implement and (for the most part) easier to understand fully. It is still difficult to implement an efficient Scheme, despite its size, but at least the effort will be concentrated on fewer constructs. Much of the reason Common Lisp appears to be so big is, in my opinion, a matter of organization and presentation. If we start with C and then add in various libraries, it starts to look fairly large too. On the other hand, it's easier with C to distinguish the essential core from the rest. There isn't any reason, other than historical, why Common Lisp couldn't be presented, and even implemented, in a more C-like way, as a language plus libraries of procedures and data types. The core language would still be larger than C, but it would also have greater capabilities. A different Lisp design that tries to get some of the advantages of both Common Lisp and Scheme is EuLisp, a Lisp being developed mostly in Europe (hence the name). The conceptual and implementational complexity of EuLisp is controlled by the use of two mechanisms: levels and modules. There are 3 levels in EuLisp, each an extension of the one below. Level 0 is a "kernel" Lisp, not too far from Scheme. Level 1 is about the size and scope of Le Lisp or Franz Lisp. Level 2 is close to Common Lisp. The advantage of levels over three separate languages is, of course, that they fit together in a coherent way. In addition, constructs with related functionality (a data type and procedures for operating on its instances, for example) are often packaged together in a module. If your program makes use of such facilities, you must request the appropriate module, just as you must include the appropriate ".h" file in C. Modules are a finer division than levels. An implementation aims at a particular level, and each level has certain modules as standard. An example of a difference between levels is that level 0 has only the most basic mechanisms for defining new classes, while higher levels have capabilities similar to those of CLOS. -- Jeff