Copy Link
Add to Bookmark
Report
AIList Digest Volume 3 Issue 014
AIList Digest Tuesday, 5 Feb 1985 Volume 3 : Issue 14
Today's Topics:
AI Tools - Common Lisp
----------------------------------------------------------------------
Date: 4 Feb 85 13:43:34 EST
From: Charles Hedrick <HEDRICK@RUTGERS.ARPA>
Subject: Common Lisp and Lexical Bindings
I saw a comment on AIList about Common Lisp that should probably be
answered. The claim is that the Gold-Hill CL interpreter is faster than
the VAX interpreter because the VAX interpreter does lexical bindings.
This is almost certainly false. During the early design stages of Elisp
(the extended-addressing TOPS-20 UCI Lisp), I tried several different
binding strategies. I found that in the interpreter there was almost no
difference in speed caused by a full A-list binding strategy. This
should be about the same as implementing lexical bindings in the obvious
way. The main problem with lexical binding in the interpreter is that
it uses CONS cells, since most implementations use some sort of binding
list to keep local bindings. This it causes more GC's. In the DEC-20
CL, I construct these lists on the stack, since bindings are not needed
once you exit from the routine in which they are made. If someone
constructs a lexical closure, I copy all bindings from the stack to the
heap. But this happens fairly seldom. The mechanisms needed to do the
copying from stack to heap are somewhat delicate, but it can be made to
work. There are also implementations using indirect pointers, if that
turns out to be reasonable on your machine. A CL interpreter will
probably be slower than a Maclisp interpreter, because of a number of
things:
- lexical closures
- the & binding options
- multiple values
Each of these things can be implemented without adding serious overhead,
but the affect of all of them together is noticable. However I think a
properly tuned interpreter should be able to get within a factor of 1.5
of Maclisp. The current DEC-20 Common Lisp is entirely interpreted.
Even system functions are supplied in interpreted form. Although more
speed would be desirable (Our compiler will be out Real Soon Now), one
can certainly do real work in our system. I can see that someone might
want to produced a stripped-down pseudo-CL for some sort of real-time
work. In that case, a lot of thought would have to go into what to
leave out. I do not think it makes sense to leave out only lexical
binding. That alone does not cause serious performance problems. The
real problem is the size of the language, and the number of options,
particularly in the sequence functions. This means that good performance
can be obtained only by careful special-case optimizing. Unfortunately
the language is so large that a compiler that does appropriate optimizations
will take a while to develop.
------------------------------
Date: 22 Sep 84 05:11:10 EDT
From: Charles Hedrick <HEDRICK@RUTGERS.ARPA>
Subject: report of meeting about Common Lisp
[Forwarded from the Rutgers bboard, with permission from the author.
I just recently discovered this September message. -- KIL]
This is a report on the Common Lisp Workshop, held at the Naval
Postgraduate School, in Monterrey, CA, 18 and 19 Sept 84. The meeting
was called by ARPA, to examine the present state of CL, and to make
suggestions on where it should go next. The attendees were mostly
associated with organizations that were implementing CL or thinking of
doing so, though there were also some user organizations. There was a
mix of Universities, commercial vendors, etc.
The main thrust of the meeting seemed to be how CL would make the
transition between a nice idea dreamed up by a few language designers to
a language that is being supported by a large number of vendors and
required by ARPA. My discussion will follow the overall organization of
the sessions. (However this order is not chronological. It is
organized so that some of my users won't have to wade through technical
details to see what is likely to be of the most interest to them.)
ARPA policy
Subsets
Organizational issues
Proposed extensions
Workstation/server architecture
Multi-processing facilities
I. ARPA Policy
The folks who were here from ARPA were Ron Ohlander and Steve Squires.
Apparently Ron will be leaving ARPA (when? I didn't get the time - I
think within a year), and Squires will end up carrying the ball for CL.
Ron did most of the talking in this meeting.
One of the factors that is going to change the nature of CL is the fact
the ARPA is planning to push it strongly. No final decisions are made,
but it looks like ARPA is going to require and/or strongly suggest that
CL be used for its research contracts. This will be particularly the
case for the Strategic Computing project, since they intend for all
contractors involved in that project to be able to share code. They
made all the normal qualifications about doing this in a way that will
not stiffle innovation, and allowing exceptions as appropriate. But the
evidence is that they will exert very strong pressure towards CL. (They
mentioned in passing that they also plan to specify that systems they
pay for should use TCP/IP for networking. Incidentally, they also said
that if you want the RFP for the Strategic Computing initiative in new
architectures, you should ask for
N0039-84-R-0605(Q)
from the Naval Electronics Systems Command, Code 2013. The following
phone number is not for Code 2013, but they can refer you:
202-692-6085.)
One of the amusing results of ARPA's policies is that there is now a bit
of a battle over how much of CL you have to implement in order to
qualify. Certain vendors seem to be interested in providing some degree
of CL compatibility within their existing Lisps, and on that basis want
to be qualified to participate in cases where CL is specified. It is
not clear to what extent they have sound technical reasons for not
wanting to do full CL, and to what extent they feel that they don't have
time to do so soon enough.
ARPA seems to be willing to put at some money into helping CL get off
the ground, and also to supplying some clerical support, and possibly
legal and organizational advice.
II. Subsets
One of the questions which was posed is whether the CL community should
specify one or more official subsets. There are a number of reasons
why subsets might be desirable:
- several people have proposed a subset for teaching purposes. The
language is so big that many courses would probably prefer not
to deal with the whole thing. It might be helpful if different
texts would use the same subset. This could promote a
competitive marketplace. It might also be nice if our AI
textbooks and our Lisp programming intro assumed the same
subset! This might not mean a special implementation, since it
would be easy enough to hide the names of the functions that are
not in the subset. Instructional applications also tend to be
on small machines, and so might also fall afoul of the second
requirement:
- it might be nice to implement CL on small machines. Existing CL
implementations seem to take between 1 and 2.5 Mbytes of ram
(more if you count editors, etc.). It would be nice to be able
to have CL for the Macintosh and other smaller machines.
- full CL has features that may make it hard to do efficient
implementations. This could be important for slower micros. But
it also affects people interested in doing "embedded systems",
i.e. things that have to go inside missles, or that have to do
process control, etc. Examples of such features are lexical
binding, multiple values, and sequence functions. There was
considerable disagreement over how significant this issue is.
Some felt that with enough work all of these problems could be
overcome, but it does seem clear that the first implementations
of full CL are going to be noticably slower than simpler Lisps
such as PSL.
- some vendors may not find it practical to implement full CL
immediately. They would like to be able to start with a subset,
and have that be enough to qualify them to participate in
projects for which ARPA wants CL to be used.
There was no concensus on this issue. Discussion of subsets got off to
a slow start, but it kept coming up, and tempers starting getting hotter
as time went on. Here is my reading of the general reactions:
- people seemed to agree that an educational subset might be useful
and was harmless. No one seemed to feel that the CL designers
or this meeting were ready to specify such a subset. So it
seems that textbook writers will be left on their own, at least
until we see how a few of these subsets turn out.
- little was said about the small-machine problem.
- there was a lot of discussion about the last two types of subsets.
(They are hard to separate.) There were strong feelings on both
sides. Some people feel that only a full CL should be called
CL, and that we should not encourage subsets. Even the most
extreme holders of this view did feel sympathetic to purveyors
of existing Lisp implementations, and did agree that they should
be encouraged to provide whatever degree of CL compatibility
they felt they could manage. This issue is obviously going to
come up again at the next meeting, and will be discussed hotly
with ARPA in the meantime. ARPA will have a strong effect on
this. If they plan to require use of CL, then they will have
the final say on what they mean by CL. There will surely be
subsets of this kind. I would be willing to bet that ARPA will
allow it for embedded systems and process control, where there
are clear technical reasons. I have no idea what they will do
in other cases. (Maybe the Ada approach, where subsets are
allowed as long as there is a clear plan to move to a full
implementation.) There is also some indication that ARPA may
find it acceptable to do work in another Lisp as long as there
is a program to translate the results into CL. Clearly a subset
would qualify here.
Note that some of these "subsets" may not be real subsets. It is likely
that they will have to add a few features. E.g. those implementors who
do not want to bear the overhead of generic sequence functions may add a
few type-specific functions, such as STRING-CONCAT. It is quite likely
that people who do this will want these functions added to the full
language, so that their implementations will be true subsets.
III. Organizational issues
It is interesting to see how much difference it makes that this language
is going to be supported by vendors. They want to make sure
- that the language is well-defined. This means that there is some
authoritative way to answer questions, and that a validation
procedure is developed (including a validation suite).
- that it is possible to make changes where implementation experience
shows that it is desirable, or as the CL community comes up with
important new ideas
- that changes to the language do not happen too quickly
- that their interests are represented in whatever group is authorized
to change the language.
It is clear that these requirements imply a person or persons who
control the development of the language. Initially the language was
designed primarily by a group of 5 people (the so-called "gang of 5"),
with participation by many others over the Arpanet. The vendors that I
heard would like for those original designers to continue to have a
strong influence over the language. (Indeed the Gang of 5 is probably
the most enthusiastic to turn things over a formal organization.) Most
people see that we are going to start some organization analogous to a
standards committee. However most people do not want to be involved in
ANSI, ISO, etc. The feeling seems to be that there is too much
bureacracy, and that CL still needs enough clarification and additions
that we could not tolerate the delays involved in conventional standards
organizations. Clearly some vendors would like to see an ANSI standard
eventually, but everyone seems to agree that we are not ready yet. Here
is a partial list of things that the people responsible for the language
have to handle:
- some way to process proposals for changes to the language. Everyone
envisions that some sort of vote of a large CL community will be
required to approve changes. (This has been true all along,
except for last-minute details.) So we are looking for a person
or persons to receive suggestions, distribute them for comment,
and conduct votes if appropriate. I suspect that this group
might also solict suggestions and possible make some themselves.
- some way to give authoritative answers to questions that call for an
interpretation of the language specification
- destribution of any decisions that result from these two processes
to all interested parties
- an archive of all decisions, and possible of all discussion
- a "delta document". This would represent all changes that will show
up in the next edition of the CL manual. I.e. it is with
respect to the most recently published edition of the CL manual.
- new editions of the CL manual. Initially this may happen as often
as once a year
- maintenance of online documentation. This would be used by builtin
help facilities, etc. This will require some negotiation with
Digital Press, as they currently hold a copyright for the
manual.
- licensing special editions of the manual. Vendors may want to
intersperse details of their implementation in the text, so that
the user has a single, integrated manual for Vendor X's CL.
Most people seem to feel that this is OK as long as the manual
contains the unadulterated text of the official CL manual, with
all additions being set off visibly (e.g. printed in a
contrasting color). They may also allow subsets to cut parts of
the CL manual, but this will require that there is a clear
disclaimer that this is not CL. Anyway, somebody is going to
have to set reprint policies and monitor what is going on. This
will also have to be done in conjunction with Digital Press.
- a test/validation suite.
- implementation notes
- a library of public-domain CL code (the "yellow pages" library)
- a group to vote on changes and matters of policy. Generally some
way of providing "legitimacy" to the whole process.
- trademarking of the language. We are not sure whether it is too
late to trademark CL. One proposal is to trademark CL-84,
CL-85, etc. The date would be associated with a test suite (and
probably also an edition of the manual - these would be issued
at the same time). There is no clear concensus that
trademarking is needed, but it should at least be looked into.
- budget for clerical support, mailings, and other expenses associated
with the above.
We have an interim arrangement to handle all of this for the next 6
months. A committee will make a proposal for a permanent organization
to take effect at the end of 6 months. Probably there will be another
CL workshop at that time. The CL mailing list will continue to be used
to take votes on major issues, and generally to represent the CL
community as a whole. This list may be split, as there seem to be some
people who are just random users, and do not want to (or should not)
participate in the design decisions. The gang of 5 will moderate the
mailing list, and will also continue to take somewhat of a leadership
role in technical matters, i.e. answering questions, coordinating
proposed changes, etc. This coordination includes maintaining archives,
the delta document, etc. They will investigate some of the other
issues, such as licensing the manual for online use and special
editions, trademarks, and preparation of an initial budget. (This budget
will probably be covered by ARPA.) They will try to do something about
the Yellow Pages library. (There is actually already one at CMU. Maybe
this will just continue for the interim period.) Committees were
appointed to propose extensions to the language in several important
areas (see below). The results will be discussed on the CL mailing
list. There is also a committee to propose a permanent organization.
It is likely that some funding will be needed for the 6 month interim,
if only to handle clerical support. There way a broad hint that the
Gang of 5 might find ARPA receptive to a proposal that ARPA fund this.
IV. Proposed extensions
No one was crazy enough to propose that we should come up with
extensions to CL on the spot during the meeting. Instead we tried to
agree on what areas are the most important to look into. Committees
volunteered to look into each of these areas. We hope that they will
propose extensions. I think most of us agree that the actual language
design is going to be done by individuals or very small groups in each
case. The committees are thus the people who want to be in on initial
discussions, and also people who are considering writing proposals or
parts of proposals. Here was the initial set of extensions proposed:
object-oriented programming
window support
error handling
multiprocessing support
graphics
iteration (e.g. some sort of macros for writing loops)
facilities to monitor the internal state of Lisp
interface to the surrounding system
networking
interface to database facilities
configuration and version management tools
pattern matching
calling foreign (non-Lisp) functions
destructuring
international character sets
program manipulation facilities
coercion among numerical types
storage management
We took a vote, giving each person 6 votes. Most of the above
received 0 to 4 votes. The only significant votes were for the
following items.
almost 100% - object-oriented programming
almost 100% - error handling
about 50% - display support (windows, etc.)
about 50% - calling foreign (non-Lisp) functions
about 33% - iteration
about 33% - graphics
These are the areas for which committees were set up.
V. Workstation/server architecture
A number of people expect that we will continue to have systems of
differing power. That is, in your office will be something for around
$15K. It will be able to handle CL. You will do a lot of your
development work on it. But when you want to process a lot of
real-world data, you will want a more powerful machine. These machines
would likely be $100K or more. The folks from ARPA seemed to feel that
configurations like this would be important for their Strategic
Computing projects.
The issue put before us was what sort of language facilities are needed
to support this. No one seemed to feel that we knew enough of this sort
of thing that we were ready to add such facilities to the language. Of
course individual researchers would make extensions in the course of
their research. But we would like to see several such projects before
adopting a particular design permanently.
VI. Multi-processing facilities
This discussion was somewhat similar to the previous one. We envision
multiprocessing as becoming more important as time goes on. Again, the
Strategic Computing project is likely to use this. The question is what
language facilities will be needed to support multiprocessing. No one
feels we know enough about this area to say at the moment. Brief
mention was made of several pieces of work in this area:
Gabriel's work at Stanford
Halstead's at MIT
Both of these are shared-memory.
the remote sensing project at CMU. Multiple PERQ's with CL.
Uses the facilities of the PERQ OS.
This is more like conventional networking.
BBN's butterfly project. Many 68000 systems in parallel, with a Lisp
Machine as a front end to supply the user interface. Both
the 68000's and the LM will use CL.
It is clear that there are not only many different approaches, but even
more than one basic model (shared memory and networking are sort of the
opposite ends of the spectrum). In the end we may need language
facilities to support both styles. But nobody is ready to say much at
the moment.
Anyone interested in working on multiprocessing support is invited to
send mail to RPG@SU-AI to be added to a mailing list.
------------------------------
End of AIList Digest
********************