[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Summary of Interlisp system changes
- To: Kaplan, Masinter, Lisp
- Subject: Summary of Interlisp system changes
- From: MASINTER
- Date: Sun, 04 Jul 1982 15:43:27 -7000
- Date: 4 JUL 1982 1543-PDT
Compatibility with other Interlisp implementations:
(SYSTEMTYPE) [Function]
Returns one of TOPS20, TENEX, D, JERICHO, VAX. Most implementations
have a compile-time optimization for (SELECTQ (SYSTEMTYPE) --)
(COMPILEMODE) [Function]
Returns one of PDP-10, D, JERICHO, VAX. For EVAL@COMPILE
conditionalization. Not the same as SYSTEMTYPE to allow
cross-compilation.
COMPILE.EXT [Variable]
Be sure to reference compiled files via a PACKFILENAME with
COMPILE.EXT rather than binding the ".COM" extension into your
program.
(the FILES file package command is another way of referencing
files without explicitly naming compile-extension).
e.g.,
(LOAD (PACKFILENAME 'NAME FOO 'EXTENSION COMPILE.EXT]
rather than (LOAD 'FOO.COM]
- - - - - - - - - - -
BQUOTE: A "BACKQUOTE" facility
This is similar to the facility of the same name in other common lisp dialects as
follows:
(BQUOTE FORM) is like to (QUOTE FORM) except that, in the body
of FORM, an element preceded by a "," is evaluated, an element preceded by ",@"
is evaluated and spliced in using APPEND and an element preceded by ",." is
spliced in, using NCONC.
For example, (BQUOTE (A , B ,@ C D)) is equivalent to
(CONS (QUOTE A)
(CONS B (APPEND C (QUOTE (D].
As a shorthand, (BQUOTE form) can also be typed in as |'FORM. In this case,
the comma forms are automatically parsed without following them with spaces,
e.g., |'(A B ,C) reads in as (BQUOTE (A B , C)). This format is also recognized
on files. Vertical bar was chosen since it normally is treated as a separator in
files.
Vertical-bar, both in typein and in files, has also been "overloaded" to introdoce
HPRINT-format expressions. This facility makes it possible, although not
particularly convenient, to type in circular lists and arbitrary other data
structures.
- - - - - - - -
ARRAY types expanded
The ARRAY function now accepts any
"type" which is legal in datatypes, and coerces it into the next "enclosing"
ARRAY type. Since the low-level system only allows arrays of type FIXP, or POINTER,
types are coerced. However, this allows programmers to specify more exactly
what they intend.
- - - - - - - - - - - - - - - - - - - - - -
Masterscope expands MACRO definitions
When it encounters a macro which has no template and is not otherwise defined
or is a NLAMBDA.
Masterscope only looks at MACRO properties (and not 10MACRO, DMACRO, etc.)
in the theory that the machine-dependent properties are more likely "optimizers".
Also, this avoids the problem of Masterscope having to worry about those
properties which are really part of the compiler, and which contain calls to
internal compiler functions.
------------------------------------------------------------
WITH construct in record package:
(WITH <record-name> <record-instance> . <forms>) [special form]
The WITH construct can be used to talk about the fields of a record as if they
were variables within a lexical scope. <record-name> is the name of a record,
and <record-instance> is an expression which evaluates to an instance of that
record. The expressions in <forms> are evaluated in a way where references to
variables which are field-names of <record-name> are implemented via
field-fetches and SETQs of those variables are implemented via
field-replacement.
For example, given
(RECORD RECN (FLD1 FLD2))
(SETQ INST (CREATE RECN FLD1 _ 10 FLD2 _ 20))
Then the construct
(with RECN INST
(SETQ FLD2 (PLUS FLD1 FLD2]
is equivalent to
(replace FLD2 of INST with (PLUS (fetch FLD1 of INST) (fetch FLD2 of INST]
Note that the substitution is lexical: this operates by actually doing a substitution
inside <forms>.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
New FILEPKG command: INITVARS
INITVARS is used for initializing variables--setting their values only when they
are currently NOBIND. A variable value defined in an INITVARS command will
not clobber the current value. This means that re-loading files to work on some
aspect will not change the variable values.
The format of an INITVARS command is just like VARS, except that the atomic
form does not make sense; all elements are lists (var defaultvalue).
INITVARS puts out a RPAQ? command on the file instead of RPAQ. This is
a new function that has been added to the system in this release. Hence,
INITVARS will not load into older releases.
- - - - - -
Change to FILE, FILECHANGES properties and FILECREATED expression on
files:
The file package now keeps better track of what changes are made to a file to
disambiguate from changes to items of different file package types. For example,
if you change the FOO record, the change will get posted in a (RECORDS --
FOO --) section. Changes to a FOO function will appear in a separate (FNS --
FOO --) section.