home *** CD-ROM | disk | FTP | other *** search
- This is a long message so I'll put the most important thing first, in case
- you choose not to read the rest of the message:
- *** object files generated by liszt 8.19 will not run in any lisp
- *** older than 38.48. Object files which were generated by
- *** liszt's before 8.19 will continue to work in the new lisp.
-
-
- There were two major changes to lisp and liszt:
- 1) compiled functions will test at runtime to make sure that they
- are passed the correct number of arguments.
-
- 2) the lambda list keywords &optional, &rest and &aux are open compiled
- in an efficient manner.
-
- I'll refresh your memory on what the possible forms are for the & keywords:
-
- the formal parameter list of a def has this form
- ( required-args
- [ &optional optional-arguments ]
- [ &rest rest-argument ]
- [ &aux aux-arguments ])
-
- as in this example which shows all possible forms:
-
- (def foo
- (lambda (a b &optional c (d 23 d-p) (dd (bar)) &rest e &aux (f 12) g)
- (compute)))
-
-
- the meaning and forms of the various parts of the formal parameter list are:
-
- required-args: a sequence of n (zero or more) symbols which will be bound
- to the first n actual arguments.
-
- optional-args: a sequence of m (zero or more) symbols which will be
- bound to the next m actual arguments if they are present, or
- to default values.
- the forms of an optional argument are:
-
- foo - bind foo to the argument if it present, otherwise bind it
- to nil
- (foo (expr)) - bind foo to the argument if it is present, otherwise
- evaluate (expr) and bind foo to the result.
-
- (foo (expr) foo-p) - bind foo to the argument if it is present,
- otherwise evaluate (expr) and bind foo to the result.
- Also, bind foo-p to t if the argument is present, otherwise
- bind foo-p to nil. foo-p will be treated like an &aux
- variable (see below) but it should NOT be declared in the
- &aux list!
-
- rest-arg : a single symbol which will be bound to a list of the rest of the
- arguments. This list is cons'ed up each time the function is called.
-
- aux-args : these args are just like arguments to let or prog within the
- function body so this & keyword isn't really necessary (but there
- are few things in lisp that really are necessary).
-
- the forms of the aux arg are:
-
- foo - bind foo to nil
- (foo (expr)) - evaluate (expr) and bind foo to the result.
-
-
-
- The compiler understands the &keywords but the interpreter does not. 'def'
- will convert a form with &keywords to a lexpr which is almost equivalent.
- The differences are:
- The interpreted form, being a lexpr, is allowed to use the 'arg'
- function. The compiled form, even with optional args,
- is not a lexpr and thus 'arg' is illegal.
-
- The order that &aux variables are lambda bound is slightly different
- between interpreted and compiled code. As long as default
- expressions reference no formal parameters after them in the
- formal parameter list, there should be no problems.
-
- The interpreted version will not check for the correct number of
- arguments.
-
- Local functions cannot have &keywords.
-
- If you have any questions on this, send me mail. This change should
- only break functions which expect a variable number of argument and
- which don't declare the fact using &optional programs. There may be,
- of course, implementation errors. If you notice anything unusual
- please let me know right away. The old compiler will be
- in /usr/ucb/oliszt for a while.
-
-
-
-
-
-
-
-
-
-