123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607 |
- PSL Manual 7 February 1983 SYSLISP
- section 20.0 page 20.1
- CHAPTER 20
CHAPTER 20
CHAPTER 20
- SYSLISP
SYSLISP
SYSLISP
- 20.1. Introduction to the SYSLISP level of PSL. . . . . . 20.1
- 20.2. The Relationship of SYSLISP to RLISP . . . . . . . 20.2
- 20.2.1. SYSLISP Declarations . . . . . . . . . . 20.2
- 20.2.2. SYSLISP Mode Analysis. . . . . . . . . . 20.3
- 20.2.3. Defining Special Functions for Mode Analysis . . 20.4
- 20.2.4. Modified FOR Loop . . . . . . . . . . . 20.4
- 20.2.5. Char and IDLOC Macros. . . . . . . . . . 20.5
- 20.2.6. The Case Statement. . . . . . . . . . . 20.6
- 20.2.7. Memory Access and Address Operations. . . . . 20.7
- 20.2.8. Bit-Field Operation . . . . . . . . . . 20.8
- 20.3. Using SYSLISP. . . . . . . . . . . . . . . 20.9
- 20.3.1. To Compile SYSLISP Code . . . . . . . . . 20.9
- 20.4. SYSLISP Functions . . . . . . . . . . . . . 20.10
- 20.4.1. W-Arrays . . . . . . . . . . . . . . 20.11
- 20.5. Remaining SYSLISP Issues . . . . . . . . . . . 20.12
- 20.5.1. Stand Alone SYSLISP Programs . . . . . . . 20.12
- 20.5.2. Need for Two Stacks . . . . . . . . . . 20.12
- 20.5.3. New Mode System. . . . . . . . . . . . 20.13
- 20.5.4. Extend CREF for SYSLISP . . . . . . . . . 20.13
- This chapter is very out of date and will be replaced as soon as
- possible.
- 20.1. Introduction to the SYSLISP level of PSL
20.1. Introduction to the SYSLISP level of PSL
20.1. Introduction to the SYSLISP level of PSL
- SYSLISP [Benson 81] is a BCPL-like language, couched in LISP form,
- providing operations on machine words, machine bytes and LISP ITEMs (tagged
- objects, packed into one or more words). We actually think of SYSLISP as a
- lower level of PSL, dealing with words, bytes, bit-fields, machine
- operations, and compile-time storage allocation, enabling us to write
- essentially all of the kernel in PSL.
- The control structures and definition language are those of LISP, but the
- Plus2 Times2 WPlus2 WTimes2
Plus2 Times2 WPlus2 WTimes2
familiar Plus2, Times2, etc. are mapped to word operations WPlus2, WTimes2,
- etc. SYSLISP handles static allocation of SYSLISP variables and arrays and
- initial LISP symbols, permitting the easy definition of higher level
- Standard LISP functions and storage areas. SYSLISP provides convenient
- ______
compile-time constants for handling strings, LISP symbols, etc. The
- SYSLISP compiler is based on the PORTABLE STANDARD LISP Compiler, with
- extensions to handle word level objects and efficient, open-coded,
- word-level operations. The SYSLISP mode of the compiler does efficient
- compile-time folding of constants and more comprehensive register
- allocation than in the distributed version of the PLC. Currently, SYSLISP
- handles bytes through the explicit packing and unpacking operations
SYSLISP 7 February 1983 PSL Manual
- page 20.2 section 20.1
- GetByte
GetByte
GetByte(word-address,byte-number) /
- PutByte
PutByte
PutByte(word-address,byte-number,byte-value) without the notion of byte-
- pointer; it is planned to extend SYSLISP to a C-like language by adding the
- appropriate declarations and analysis of word/byte/structure operations.
- SYSLISP is a collection of functions and their corresponding data types
- which are used to implement low level primitives in PSL, such as storage
- allocation, garbage collection and input and output. The basic data object
- ____
in SYSLISP is the "word", a unit of storage large enough to contain a LISP
- ____ ____ ____
item. On the PDP-10, a SYSLISP word is just a 36-bit PDP-10 word. On the
- ____
VAX and most other byte addressed machines, a word is 4 bytes, or 32 bits.
- Conceptually, SYSLISP functions manipulate the actual bit patterns found in
- words, unlike normal LISP functions which manipulate higher-level objects,
- ____ ______ _____ ______
such as pairs, vectors, and floats or arbitrary-precision numbers.
- Arithmetic in SYSLISP is comparable to the corresponding operations in
- FORTRAN or PASCAL. In fact, SYSLISP is most closely modeled after BCPL, in
- that operations are essentially "typeless".
- 20.2. The Relationship of SYSLISP to RLISP
20.2. The Relationship of SYSLISP to RLISP
20.2. The Relationship of SYSLISP to RLISP
- ______
______
______
smacro
smacro
RLISP was extended with a CASE statement, SYSLISP declarations, smacros
- _____
_____
_____
macro
macro
and macros to provide convenient infix syntax (+, *, / etc.) for calling
- the SYSLISP primitives. Even though SYSLISP is semantically somewhat
- different from LISP (RLISP), we have tried to keep the syntax as similar as
- possible so that SYSLISP code is "familiar" to RLISP users, and easy to
- use. RLISP functions can be easily converted and interfaced to functions
- at the SYSLISP level, gaining considerable efficiency by declaring and
- directly using words and bytes instead of tagged LISP objects.
- 20.2.1. SYSLISP Declarations
20.2.1. SYSLISP Declarations
20.2.1. SYSLISP Declarations
- SYSLISP variables are either GLOBAL, memory locations (allocated by the
- compiler), or local stack locations. Locals are declared by SCALAR, as
- usual. Globals come in the following flavors:
- WCONST id = wconstexp {,id = wconstexp} ;
- Wconstexp is an expression involving constants and wconsts.
- WVAR wvardecl {, wvardecl} ;
- wvardecl ::= id | id = wconstexp
- WARRAY warraydecl {, warraydecl} ;
- warraydecl ::= id[wconstexp] | id[] = [ wconstexp {,wconstexp} ]
- | id[] = string
PSL Manual 7 February 1983 SYSLISP
- section 20.2 page 20.3
- WSTRING warraydecl {, warraydecl} ;
- Each of these declarations can also be prefixed with the keywords:
- INTERNAL or EXTERNAL.
- If nothing appears, then a DEFAULT is used.
- (Notice there are no metasyntactic square brackets here,
- only curly brackets.)
- For example, the following GLOBAL-DATA is used in PSL:
- on SysLisp;
- exported WConst MaxSymbols = 8000,
- MaxConstants = 500,
- HeapSize = 100000;
- external WArray SymNam, SymVal, SymFnc, SymPrp, ConstantVector;
- external WVar NextSymbol, NextConstant;
- exported WConst MaxRealRegs = 5,
- MaxArgs = 15;
- external WArray ArgumentBlock;
- off SysLisp;
- END;
- 20.2.2. SYSLISP Mode Analysis
20.2.2. SYSLISP Mode Analysis
20.2.2. SYSLISP Mode Analysis
- ____
In SYSLISP mode, the basic operators +, *, -, /, etc., are bound to word
- WPlus2 WTimes2 WMinus
WPlus2 WTimes2 WMinus
operators (WPlus2, WTimes2, WMinus, etc.), which compile OPEN as
- ____
conventional machine operations on machine words. Thus most SYSLISP
- expressions, loops, etc. look exactly like their RLISP equivalents.
- 20.2.3. Defining Special Functions for Mode Analysis
20.2.3. Defining Special Functions for Mode Analysis
20.2.3. Defining Special Functions for Mode Analysis
- To have the Mode analyzer (currently a REFORM function) replace LISP
- function names by SYSLISP ones, do:
- PUT('LispName,'SYSNAME,'SysLispName);
SYSLISP 7 February 1983 PSL Manual
- page 20.4 section 20.2
- The Following have been done:
- DefList('((Plus WPlus2)
- (Plus2 WPlus2)
- (Minus WMinus)
- (Difference WDifference)
- (Times WTimes2)
- (Times2 WTimes2)
- (Quotient WQuotient)
- (Remainder WRemainder)
- (Mod WRemainder)
- (Land WAnd)
- (Lor WOr)
- (Lxor WXor)
- (Lnot WNot)
- (LShift WShift)
- (LSH WShift)), 'SysName);
- DefList('((Neq WNeq)
- (Equal WEq)
- (Eqn WEq)
- (Eq WEq)
- (Greaterp WGreaterp)
- (Lessp WLessp)
- (Geq WGeq)
- (Leq WLeq)
- (Getv WGetv)
- (Indx WGetv)
- (Putv WPutv)
- (SetIndx WPutv)), 'SysName);
- 20.2.4. Modified FOR Loop
20.2.4. Modified FOR Loop
20.2.4. Modified FOR Loop
- Wxxxx
Wxxxx
The FOR loop is modified in SYSLISP mode to use the Wxxxx functions to do
- loop incrementation and testing.
- [??? Should pick up via SysReform ???]
[??? Should pick up via SysReform ???]
[??? Should pick up via SysReform ???]
- 20.2.5. Char and IDLOC Macros
20.2.5. Char and IDLOC Macros
20.2.5. Char and IDLOC Macros
- ____
In SYSLISP mode, '<id> refers to the tagged item, just as in LISP mode,
- IdLoc LispVar
IdLoc __ LispVar
IdLoc <id> refers to the id space offset of the <id>, and LispVar <id>
- ____
refers to the GLOBAL value cell of a GLOBAL or FLUID variable. Note:
- LispVar
LispVar
LispVar can be used on the left hand side of an argument sentence. For
- __
example, to store a NIL in the value cell of id FOO, we do any one of the
- following.
PSL Manual 7 February 1983 SYSLISP
- section 20.2 page 20.5
- SYMVAL IDLOC FOO := 'NIL;
- LISPVAR FOO := MKITEM(ID,IDLOC NIL);
- Char
Char _ __ _______ _____
(Char U:id): integer macro
- Char
Char
The Char macro returns the ASCII code corresponding to its single
- character-id argument. CHAR also can handle alias's for certain special
- characters, remove QUOTE marks that may be needed to pass special
- characters through the parser, and can accept a prefixes to compute LOWER
- case, <Ctrl> characters, and <Meta> characters. For example:
- Little_a:= Char LOWER A; % In case we think RAISE will occur
- Little_a:= Char '!a; % !a should not be raised
- Meta_X := Char META X;
- Weird := Char META Lower X;
- Dinger := Char <Ctrl-G>;
- Dinger := Char BELL;
- PUT
PUT
The following Aliases are defined by PUTing the association under the
- indicator 'CharConst:
- DefList('((NULL 8#0)
- (BELL 8#7)
- (BACKSPACE 8#10)
- (TAB 8#11)
- (LF 8#12)
- (EOL 8#12)
- (FF 8#14)
- (CR 8#15)
- (EOF 26)
- (ESC 27)
- (ESCAPE 27)
- (BLANK 32)
- (RUB 8#177)
- (RUBOUT 8#177)
- (DEL 8#177)
- (DELETE 8#177)), 'CharConst);
- 20.2.6. The Case Statement
20.2.6. The Case Statement
20.2.6. The Case Statement
- RLISP in SYSLISP mode provides a Numeric case statement, that is
- implemented quite efficiently; some effort is made to examine special cases
- (compact vs. non compact sets of cases, short vs. long sets of cases,
- etc.).
- [??? Note, CASE can also be used from LISP mode, provided tags are
[??? Note, CASE can also be used from LISP mode, provided tags are
[??? Note, CASE can also be used from LISP mode, provided tags are
- numeric. There is also an FEXPR, CASE ???]
numeric. There is also an FEXPR, CASE ???]
numeric. There is also an FEXPR, CASE ???]
- The syntax is:
SYSLISP 7 February 1983 PSL Manual
- page 20.6 section 20.2
- Case-Statement ::= CASE expr OF case-list END
- Case-list ::= Case-expr [; Case-list ]
- Case-expr ::= Tag-expr : expr
- tag-expr ::= DEFAULT | OTHERWISE |
- tag | tag, tag ... tag |
- tag TO tag
- Tag ::= Integer | Wconst-Integer
- % This is a piece of code from the Token Scanner,
- % in file "PI:token-Scanner.red"
- .....
- case ChTokenType of
- 0 to 9: % digit
- << TokSign := 1;
- goto InsideNumber >>;
- 10: % Start of ID
- << if null LispVar !*Raise then
- goto InsideID
- else
- << RaiseLastChar();
- goto InsideRaisedID >> >>;
- 11: % Delimiter, but not beginning of diphthong
- << LispVar TokType!* := '3;
- return MkID TokCh >>;
- 12: % Start of comment
- goto InsideComment;
- 13: % Diphthong start-Lisp function uses P-list of starting char
- return ScanPossibleDipthong(TokChannel, MkID TokCh);
- 14: % ID escape character
- << if null LispVar !*Raise then
- goto GotEscape
- else goto GotEscapeInRaisedID >>;
- 15: % string quote
- << BackupBuf();
- goto InsideString >>;
- 16: % Package indicator -
- % at start of token means use global package
- << ResetBuf();
- ChangedPackages := 1;
- Package 'Global;
- if null LispVar !*Raise then
- goto GotPackageMustGetID
- else goto GotPackageMustGetIDRaised >>;
- 17: % Ignore - can't ever happen
- ScannerError("Internal error - consult a wizard");
- 18: % Minus sign
- << TokSign := -1;
PSL Manual 7 February 1983 SYSLISP
- section 20.2 page 20.7
- goto GotSign >>;
- 19: % Plus sign
- << TokSign := 1;
- goto GotSign >>;
- 20: % decimal point
- << ResetBuf();
- ReadInBuf();
- if ChTokenType >= 10 then
- << UnReadLastChar();
- return ScanPossibleDipthong(TokChannel, '!.) >>
- else
- << TokSign := 1;
- TokFloatFractionLength := 1;
- goto InsideFloatFraction >> >>;
- default:
- return ScannerError("Unknown token type")
- end;
- .....
- 20.2.7. Memory Access and Address Operations
20.2.7. Memory Access and Address Operations
20.2.7. Memory Access and Address Operations
- The operators @ and & (corresponding to GetMem and Loc) may be used to do
- direct memory operations, similar to * and & in C.
- @ may also be used on the LHS of an assignment. Example:
- WARRAY FOO[10];
- WVAR FEE=&FOO[0];
- ...
- @(fee+2) := @(fee+4) + & foo(5);
- ...
- 20.2.8. Bit-Field Operation
20.2.8. Bit-Field Operation
20.2.8. Bit-Field Operation
- The Field and PutField operations are used for accessing fields smaller
- than whole words:
- PUTFIELD(LOC, BITOFFSET, BITLENGTH, VALUE);
- and
- GETFIELD(LOC,BITOFFSET, BITLENGTH);
- Special cases such as bytes, halfwords, single bits are optimized if
- possible.
- For example, the following definitions on the DEC-20 are used to define
SYSLISP 7 February 1983 PSL Manual
- page 20.8 section 20.2
- the fields of an item (in file p20c:data-machine.red):
- % Divide up the 36 bit DEC-20 word:
- WConst TagStartingBit = 0,
- TagBitLength = 18,
- StrictTagStartingBit = 9,
- StrictTagBitLength = 9,
- InfStartingBit = 18,
- InfBitLength = 18,
- GCStartingBit = 0,
- GCBitLength = 9;
- % Access to tag (type indicator) of Lisp item in ordinary code
- syslsp macro procedure Tag U;
- list('Field, cadr U, '(wconst TagStartingBit), '(wconst TagBitLe
- syslsp macro procedure PutTag U;
- list('PutField, cadr U, '(wconst TagStartingBit),
- '(wconst TagBitLength), caddr U);
- % Access to tag of Lisp item in garbage collector,
- % if GC bits may be in use
- syslsp macro procedure StrictTag U;
- list('Field, cadr U, '(wconst StrictTagStartingBit),
- '(wconst StrictTagBitLength));
- syslsp macro procedure PutStrictTag U;
- list('PutField,
- cadr U, '(wconst StrictTagStartingBit),
- '(wconst StrictTagBitLength), caddr U);
- % Access to info field of item (pointer or immediate operand)
- syslsp macro procedure Inf U;
- list('Field, cadr U, '(wconst InfStartingBit), '(wconst InfBitLe
- syslsp macro procedure PutInf U;
- list('PutField, cadr U, '(wconst InfStartingBit),
- '(wconst InfBitLength), caddr U);
PSL Manual 7 February 1983 SYSLISP
- section 20.3 page 20.9
- 20.3. Using SYSLISP
20.3. Using SYSLISP
20.3. Using SYSLISP
- ___________
Restriction: SYSLISP code is currently ONLY compiled, since it is
- converted into machine level operations, most of which are dangerous or
- tricky to use in an interpreted environment.
- Note: In SYSLISP mode, we currently execute some commands in the above
- PARSE/EVAL/PRINT mode, either to load files or select options, but most
- SYSLISP code is compiled to a file, rather than being immediately
- interpreted or compiled in-core.
- 20.3.1. To Compile SYSLISP Code
20.3.1. To Compile SYSLISP Code
20.3.1. To Compile SYSLISP Code
- Use PSL:RLISP, which usually has the Compiler, with SYSLISP extensions,
- loaded. Alternatively, one may use <psl>syscmp.exe. This is a version of
- RLISP built upon <PSL>psl.exe with the SYSLISP compiler and data-machine
- macros loaded.
- % Turn on SYSLISP mode:
- ON SYSLISP; % This is causes the "mode-analysis" to be done
- % Converting some LISP names to SYSLISP names.
- % Use SYSLSP as the procedure type.
- Example:
- % Small file to access BPS origin and end.
- % Starts in LISP mode
- Fluid '(NextBP0 LastBP0);
- NextBP0:=NIL;
- LastBP0:=NIL;
- On SYSLISP,COMP; % Switch to SYSLISP mode
- syslsp procedure BPSize();
- Begin scalar N1,L1;
- If Null LispVar NextBP0 then LispVar NextBP0:=GtBPS 0;
- If Null LispVar LastBP0 then LispVar LastBP0:=GtWarray 0;
- N1 :=GtBPS(0);
- L1:= GtWarray(0);
- PrintF('" NextBPS=8#%o, used %d, LastBPS=8#%o, used %d%n",
- N1, N1-LispVar(NextBP0), L1,LispVar(LastBP0)-L1)
- LispVar NextBP0:=N1;
- LispVar LastBP0:=L1;
- End;
- BPSize(); % Call the function
SYSLISP 7 February 1983 PSL Manual
- page 20.10 section 20.4
- 20.4. SYSLISP Functions
20.4. SYSLISP Functions
20.4. SYSLISP Functions
- [??? What about overflow in Syslisp arithmetic? ???]
[??? What about overflow in Syslisp arithmetic? ???]
[??? What about overflow in Syslisp arithmetic? ???]
- WPlus2
WPlus2 _ ____ _ ____ ____ ____ ________ ____
(WPlus2 U:word, V:word): word open-compiled, expr
- WDifference
WDifference _ ____ _ ____ ____ ____ ________ ____
(WDifference U:word, V:word): word open-compiled, expr
- WTimes2
WTimes2 _ ____ _ ____ ____ ____ ________ ____
(WTimes2 U:word, V:word): word open-compiled, expr
- WQuotient
WQuotient _ ____ _ ____ ____ ____ ________ ____
(WQuotient U:word, V:word): word open-compiled, expr
- WRemainder
WRemainder _ ____ _ ____ ____ ____ ________ ____
(WRemainder U:word, V:word): word open-compiled, expr
- WShift
WShift _ ____ _ ____ ____ ____ ________ ____
(WShift U:word, V:word): word open-compiled, expr
- WAnd
WAnd _ ____ _ ____ ____ ____ ________ ____
(WAnd U:word, V:word): word open-compiled, expr
- WOr
WOr _ ____ _ ____ ____ ____ ________ ____
(WOr U:word, V:word): word open-compiled, expr
- WXor
WXor _ ____ _ ____ ____ ____ ________ ____
(WXor U:word, V:word): word open-compiled, expr
- WNot
WNot _ ____ ____ ____ ________ ____
(WNot U:word): word open-compiled, expr
- WEQ
WEQ _ ____ _ ____ _______ ____ ________ ____
(WEQ U:word, V:word): boolean open-compiled, expr
- WNEQ
WNEQ _ ____ _ ____ _______ ____ ________ ____
(WNEQ U:word, V:word): boolean open-compiled, expr
- WGreaterP
WGreaterP _ ____ _ ____ _______ ____ ________ ____
(WGreaterP U:word, V:word): boolean open-compiled, expr
- WLessP
WLessP _ ____ _ ____ _______ ____ ________ ____
(WLessP U:word, V:word): boolean open-compiled, expr
- WGEQ
WGEQ _ ____ _ ____ _______ ____ ________ ____
(WGEQ U:word, V:word): boolean open-compiled, expr
PSL Manual 7 February 1983 SYSLISP
- section 20.4 page 20.11
- WLEQ
WLEQ _ ____ _ ____ _______ ____ ________ ____
(WLEQ U:word, V:word): boolean open-compiled, expr
- WGetV
WGetV _ ____ _ ____ ____ ____ ________ _____
(WGetV U:word, V:word): word open-compiled, macro
- WPutV
WPutV _ ____ _ ____ _ ____ ____ ____ ________ _____
(WPutV U:word, V:word, W:word): word open-compiled, macro
- Byte
Byte _ ____ _ ____ ____ ____ ________ ____
(Byte U:word, V:word): word open-compiled, expr
- PutByte
PutByte _ ____ _ ____ _ ____ ____ ____ ________ ____
(PutByte U:word, V:word, W:word): word open-compiled, expr
- 20.4.1. W-Arrays
20.4.1. W-Arrays
20.4.1. W-Arrays
- CopyWArray
CopyWArray ___ _ ______ ___ _ ______ _____ ___ ___ _ ______ ____
(CopyWArray NEW:w-vector, OLD:w-vector, UPLIM:any): NEW:w-vector expr
- _____
Copy UPLIM + 1 words.
- CopyWRDSToFrom
CopyWRDSToFrom ___ _ ______ ___ ___ ___ ____
(CopyWRDSToFrom NEW:w-vector, OLD:any): any expr
- CopyWArray
CopyWArray
Like CopyWArray in heap.
- CopyWRDS
CopyWRDS _ ___ ___ ____
(CopyWRDS S:any): any expr
- Allocate new WRDS array in heap.
- 20.5. Remaining SYSLISP Issues
20.5. Remaining SYSLISP Issues
20.5. Remaining SYSLISP Issues
- The system should be made less dependent on the assemblers, compilers and
- loaders of the particular machine it is implemented on. One way to do this
- is to bring up a very small kernel including a fast loader to load in the
- rest.
- 20.5.1. Stand Alone SYSLISP Programs
20.5.1. Stand Alone SYSLISP Programs
20.5.1. Stand Alone SYSLISP Programs
- In principle it works, but we need to clearly define a small set of
- support functions. Also, need to implement EXTERNAL properly, so that a
- normal LINKING loader can be used. In PSL, we currently produce a single
- kernel module, with resident LAP (or later FAP), and it serves as dynamic
- linking loader for SYSLISP (ala MAIN SAIL).
SYSLISP 7 February 1983 PSL Manual
- page 20.12 section 20.5
- 20.5.2. Need for Two Stacks
20.5.2. Need for Two Stacks
20.5.2. Need for Two Stacks
- We must distinguish between true LISP items and untagged SYSLISP items on
- the stack for the garbage collector to work properly. Two of the options
- for this are
- 1. Put a mark on the stack indicating a region containing untagged items.
- 2. Use a separate stack for untagged items.
- Either of these involves a change in the compiler, since it currently
- only allocates one frame for temporaries on the stack and does not
- distinguish where they get put.
- The garbage collector should probably be recoded more modularly and at a
- higher level, short of redesigning the entire storage management scheme.
- This in itself would probably require the existence of a separate stack
- which is not traced through for return addresses and SYSLISP temporaries.
- 20.5.3. New Mode System
20.5.3. New Mode System
20.5.3. New Mode System
- A better scheme for intermixing SYSLISP and LISP within a package is
- needed. Mode Reduce will probably take care of this.
- 20.5.4. Extend CREF for SYSLISP
20.5.4. Extend CREF for SYSLISP
20.5.4. Extend CREF for SYSLISP
- The usual range of LISP tools should be available, such as profiling, a
- break package, tracing, etc.
|