[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Common Lisp Subset
It was appeared as WGSYM 34-4 IPSJ Nov. 1985.
WGSYM is Working Group on Symbol Manipulation
IPSJ is Information Processing Society of Japan.
and was the base for subsetting discussions in Japan.
The paper is attached here.
We have a continuous talk with this paper for polishing it up.
We have a working group for it under CommonLisp committee at Jeida.
The group meeting was held twice-a-month schedule from Dec.1985 till now.
The polished version will be apperead at July 8th meeting.
The primary members are
Masayuki Ida,
K. Yuura (Hitachi),
H. Kato(Fujitsu),
S. Kawai (DEC japan),
Y. Hashimoto(NEC),
K. Umemura(NTT),
S. Harada (Sharp)
Y. Yamamura (Nippon Univac),
K. Kawagome(Sord)
and some other members extended from this April.
Mr. Yuura is the chair of the working group.
I hope this subset efforts will assist you, if you are considering
a two-level language spec like Fortran.
I feel the current disccusions on Common-lisp@su-ai have a tendency to
make Common Lisp fat, not slim.
Of cause it is needed to include rich functionality into Common-lisp,
but there are small sized machines which can not use the "full-set" CommonLisp.
I am not so enthusiastic to make a subset, but I think it will be needed,
and I have a continuous interest to make a subset or a core Common Lisp.
Here is my paper on Nov. 1985
(M.Ida: A Common Lisp Subset Proposal", WGSYM 34-4, IPSJ Nov. 1985)
-----------------------------------------------------------------------
A Common Lisp Subset Proposal
Masayuki Ida
Assoc.Prof, Aoyama Gakuin University
Chair. Jeida Common Lisp Committee
Make Common Lisp slim. Don't cut arms and legs
One and only one official subset for Common Lisp.It prevents
us from divergence of language specification among
CommonLisp-LIKE lisps
********** extracted from WGSYM 34-4 ***********
1) Is this proposal for personal computer based implementa-
tion? ---> Yes and No
YES: As prof. Fahlman said in [Fah85], personal comput-
er will grow to have much more memory space and secondary
storages. Large size personal computer will be possible to
run full set Common Lisp. But, there is a price range fac-
tor. There will be still low-end computers with popularity.
Price of the machine which may run this subset can range
among a few thousand dollars.
No: The decision upon defining subset should not in-
clude the restrictions drived from the current technology.
2) How small or slim?
A subset which is very small, cannot play the actual
roles. For example, Minimal Basic seems to be dead now for
almost every scene. Then this subset of CommonLisp should
not go to extremes. The author have an image in mind the
size is about half of full set. And may be more than 50%,
but not greatly less than 50%.
3) What is the basic policy?
Don't cut arms and legs of Common Lisp
4.2 Some technical issues
1) Do we assume compiler? ----> Yes
Interpreter plays a role of command
interpreter/debugger. As a matured language, a compiler
should be equipped.
2) DO we keep the type hierarchy? ---> Yes
Omit some types, but, preserve hierarchy (for example,
character type is independent from number)
3) Do we omit sequence type? ---> No
(for user friendlyness)
4) Do we need complex numbers? ---> No
5) Do we need the visibility of system constants and vari-
ables?
---> No (some variables and constants are left)
6) Do we need complete function sets of numbers? ---> No
preserve types except Complex numbers. delete almost
all the irrational functions
7) Do we need hash-table? ---> No
8) Do we need dynamic properties of array? ---> No
Only simple and static array. no fill-pointers, no ad-
justable array, no bit array. three dimension, not seven,
is enough.
9) How about the format feature? ---> there are two ways
1. limit the field specifier set,consulting fortran case.
subset F77 has I, F, E, L, A, '...', H, X, /, P, N, Z, BZ
,BN.
subset F77 does not have colon, S, SP ,SS, T, TL, TR, G,
and list directed editing.
2. exclude all the spec of format from subset
---> include format with restricted syntax
10) How about lambda list keyword? ---> make it slim
only &optional and &rest
11) Will include the object oriented facility? ---> No.
CommonLOOPS[Bob85] will be the standard after some dis-
cussions. But not include in this subset.
12) Do we include go/prog/tagbody? --->No
"go" structure should be rewritten with other con-
structs. In Common Lisp, go is not always equivalent to a
simple jump instruction. prog is obsolete. If there is no
"go", tagbody is meaningless.
13) Keyword arguments ? -> restrict to the special cases.
So parser will be easier ( general parsing mechanism for
keyword is not needed)
5.Summary of the subset spec
Total: 330 functions, 2 constants, 7 variables (Table 1).
Notation of the following summary:
1) listed elements are included in subset spec.
2) single braketted elements ([ ... ]) are OMITTED.
3) double braketted elements ([[ ... ]])
have RESTRICTED syntax/semantics
4) triple braket ([[[ ... ]]]) contains comments
Chapter 2 Data Type
number, integer, fixnum, bignum, ratio, float, short-
float,single-float, double-float, long-float, [omit: com-
plex]
character, standard-char, string-char, [[[comment:
bits-attribute and font-attribute may be zero]]]
symbol,list,cons,null
array, [[restricted: max rank=3, array means simple-
array]], [omit: bit vector]
[hash table]
[[ readtable;restricted to only one readtable]]
[package, pathname, stream, random-state]
structure, function
2.15 type overlap,inclusion,disjointeness
[[[ preserve data type hierarchy of full set. hierar-
chy figure is defined as in [ida84] ]]]
Chapter 3. Scope and Extent
[[[same scoping as full set]]]
Chatpter 4. type specifier
standard type specifiers of Fig.4.1 are all active,
coerce, typeof, readtable, simple-array, simple-bit-vector,
simple-string, simple-vector
[bit, bit-vector,complex,hash-table, stream, ]
[And omit functions such as deftype, type specifier
combination, predicating specifier(satisfies)]
Chapter 5. Porgram structure (2 functions)
defun,defvar
[omitted functions from Fig 5.1; tagbody, macrolet,
flet, compiler-let, eval-when,go]
[&key,&allow-other-keys,&aux from lambda-list keyword,
lambda-list-keyword, lambda-parameters-limit, defparameter,
defconstant]
Chapter 6. predicates (27 functions, 2 constants)
nil, t, typep, subtypep, null, symbolp, atom, consp,
listp, numberp, integerp, rationalp, floatp, characterp,
stringp, vectorp, simple-vector-p, simple-string-p, arrayp,
packagep, functionp, compiled-function-p, commonp, eq, eql,
equal, not, and, or
[complexp, bit-vector-p, simple-bit-vector-p, equalp]
Chapter 7. Control Structure (51 functions)
quote, function, symbol-value, symbol-function, boundp,
fboundp, special-form-p, setq, psetq, set, makunbound,
fmakunbound, setf, apply, funcall, progn, prog1, prog2, let,
let*, progv, labels, if, when, unless, cond, case, block,
return-from, return, loop, do, do*, dolist, dotimes, ma-
plist, mapcar, mapc, mapl, mapcan, mapcon, values, values-
list, multiple-value-list, multiple-value-prog1, multiple-
value-bind, multiple-value-setq, multiple-value-call, catch,
unwind-protect, throw
[psetf, shiftf, rotatef, defsetf, define-setf-
method, define-modify-macro, get-setf-method, get-setf-
method-multiple-value, call-argument-limit, compiler-let,
flet, macrolet, prog, go, typecase, tagbody]
setf accessible forms;
aref, car, cdr, c...r, fill-pointer, first, get, getf,
nth, nthcdr, rest, second, symbol-function, symbol-plist,
symbol-value, third, access function of defstruct,
[omitted access form; elt,fourth--
tenth,svref,gethash,documentation, c....r, macro-function,
(char, schar, bit, sbit, subseq) function calls, the-
declaration, apply ]
Chapter 8. Macro (5 functions)
macro-function, defmacro, macro, macroexpand,
macroexpand-1
[[ defmacro keywords only to &optional and &rest]]
[omit *macro-expand-hook*, &key, &allow-other-keys,
&aux, &body, &whole, &environment]
Chapter 9. Declarations (2 functions)
Only (declare (special ...)) acceptable
[omit all the spec of declarations but above]
[[["the" acceptable but not effective]]]
Chapter 10. Symbols (10 functions)
get, remprop, symbol-plist, getf, remf, symbol-name,
make-symbol, copy-symbol, gensym, keywordp
[get-properties, gentmp, symbol-package]
Chapter 11. Package (1 function)
[All the spec of Package features are omitted,but
below]
11.1 consistency rules, intern
Chapter 12. Number (51 functions)
zerop, plusp, minusp, oddp, evenp, =, /=, <, >, <=, >=,
max, min, +, -, *, /, 1+, 1-, incf, decf, gcd, lcm, exp,
expt, log, sqrt, abs, signum, sin, cos, tan, rational, ra-
tionalize, numerator, denominator, float, floor, ceiling,
truncate, round, mod, rem, logior, logxor, logand, logeqv,
lognot, logtest. logbitp, ash
[[ complex related features of above fuctions are omit-
ted]]
[ complex and byte-manipulation functions, random-
numbers, implementation parameters described in 12.10.
conjugate, isqrt, phase, cis, asin, acos, atan, pi,
sinh, cosh, tanh, sinh, acosh, atanh, ffloor, fceiling,
ftruncate, fround, decode-float -- integer-decode-float,
complex, realpart, imagpart, lognand, logandc1, logandc2,
logorc1, logorc2, boole, bool- constants byte, byte-size,
byte-position, ldb, ldb-test, mask-field, dpb, deposit-
field, random, *random-state*, make-random-state ]
Chapter 13. Characters (21 functions)
standard-char-p, alpha-char-p, upper-case-p, both-
case-p, digit-char-p, char=, char/=, char<, char<=, char-
code, code-char, make-char, char-upcase, digit-char, char-
int, int-char, char-downcase, char-name, name-char, char-
bit, set-char-bit
[ char-code-limit, char-font-limit, char-bits-limit,
graphic-char-p, string-char-p, alphanumericp, char-equal,
char-not-equal, char-lessp, char-greaterp, char-not-
greaterp, char-not-lessp, char>, char>=, 13.5 char control
bit functions ]
Chapter 14. Sequences (17 functions)
subseq, reverse, nreverse, some, every, notany,
notevery, sort
[[as to fill pointer:: elt,length]]
[[as to :start - :end :: remove, remove-if, remove-
if-not, remove-duplicates, find, position, count]]
:count, :from-end, :strat, :end, make-sequence, con-
catenate, map, reduce, fill, replace, delete, delete-if,
delete-if-not, delete-duplicates, substitute, substitute-if,
substitute-if-not, nsubstitute, nsubstitute-if,
nsubstitute-if-not, find-if, find-if-not, position-if,
position-if-not, count-if, count-if-not, mismatch, search,
stable-sort, merge ]
Chapter 15. list (62 functions)
car, cdr, c..r, c...r, cons, tree-equal, endp, list-
length, nth, first, second, third, rest, nthcdr, last, list,
list*, append, copy-list, copy-alist, copy-tree, nconc,
push, pushnew, pop, butlast, nbutlast, ldiff, rplaca,
rplacd, pairlis
[[keyword not allowed; subst, nsubst, sublis, member,
member-if, member-if-not, adjoin, union, nunion, intersec-
tion, nintersection, set-defference, nset-difference, set-
exclusive-or, nset-exclusive-or, assoc,assoc-if, assoc-if-
not, rassoc, rassoc-if, rassoc-if-not]]
[c....r, fourth -- tenth, make-list, revappend,
nreconc, subst-if, subst-if-not, nsubst-if, nsubst-if-not,
subsetp, acons, tailp]
Chapter 16. Hash-table (0 functions)
[ ALL ]
Chapter 17. Array (6 functions)
vector, aref, array-rank, array-in-bounds-p, array-
total-size
[[ make-array( limit to three dimensions (not seven),
all the keyword arguments but :initial-contents are delet-
ed)]]
[ array-rank-limit, array-dimension-limit, array-total-
size-limit, svref, array-elemet-type, array-dimension,
array-dimensions, array-row-major-index, adjustable-array-p,
bit, sbit, bit-and, bit-or, ..., bitorc2, bit-not, array-
has-fill-pointer-p, fill-pointer, vector-push, vector-push-
extend, vector-pop, adjust-array, 17.4 all (bit-array),17.5
all (fill pointer),17.6 all (augumentation of dimension) ]
Chapter 18. string (9 functions)
char, string-trim, string-left-trim, string-right-trim,
string-capitalize
[[ subseq(:start and :end) related restriction ::
string=, string/=, string<, string<=]]
[schar, string>, string>=, string-equal, string-lessp,
...,make-string, string-upcase, string-downcase, nstring-
upcase, nstring-down-case, nstring-capitalize]
Chapter 19. structure (1 functions)
[[ defstruct ]]
[ :type,:read-only (in defstruct slot option),
:conc-name, :constructor, :copier, :predicate, :include,
:print-function, :type, :named, :initial-offset (in defs-
truct option), by-position constructor ]
Chapter 20. Evaluator (1 function)
eval
[ evalhook, applyhook, *evalhook*, *applyhook*, con-
stantp, +, ++, +++, -, *, **, ***, /, //, /// ]
Chapter 21. stream (1 function, 7 variables)
*standard-input*, *standard-output*, *error-output*,
*query-io*, *debug-io*, *terminal-io*, *trace-output*
[[ close (No :abort arg) ]]
[make-synonym-stream, make-...-stream, get-output-
stream-string, with-input-from-string, with-output-to-
string,streamp, input-stream-p, output-stream-p, stream-
element-type ]
Chapter 22. input/output (22 functions)
22.1.4 dispatching macro character
#',#(,#+,#-,#B,#D,#S,#X,#nA,#|
[#\,#*,#:,#.,#,,#O,#nR,#n=,#n#,#<,#)]
22.1.5 [*readtable*, copy, readtable, readtablep, set-
syntax-from-char, set/get-macro-character, make-dispatch-
macro-character, set/get-dispatch-macro-character ]
22.1.6 [*print-...* all omitted]
22.2 input
read, read-line, read-char, unread-char, listen, read-
char-no-hang, clean-input, read-byte
[*read-default-float-format*, read-preserving-
whitespace, read-delimited-list, peek-char, parse-integer]
[[ read-from-string (no keyword arg) ]]
22.3 output
write-byte, prin1, print, pprint, princ, prin1-to-
string, princ-to-string, write-char, terpri, fresh-line,
format, y-or-n-p, yes-or-no-p
22.3.3 format specifier:
~A, ~S, ~D, ~X, ~C, ~F, ~E, ~%, ~&, ~|, ~~, ~<newline>,
[~B, ~O, ~nR, ~P, ~G, ~$, ~T, ~*, ~?, ~(str~),
Chapter 23.file system interface (11 functions)
23.1 file name pathname
file name should be string
[all the pathname related definitions are omitted]
23.2 file open/close
open
[[file name should be string (:direction is Only input
or output, :element-type is only string-char or unsigned-
byte, :if-exists omitted, :if-does-not-exist omitted)]],
with-open-file
23.3 rename-file, delete-file, probe-file, file-write-date,
file-author, file-position, file-length
23.4 [[load(no keyword)]], [*load-verbose*]
23.5 directory
Chapter 24. error (4 functions)
error, cerror, warn, break
[ *break-on-warning*, check-type, assert, etypecase,
ctypecase, ecase, ccase]
Chapter 25. miscellaneous (26 functions)
compile, compile-file, documentation, trace, untrace,
step,time, describe, inspect, room, ed, dribble, appropos,
appropos-list, get-decoded-time, get-internal-run-time,
get-internal-real-time, sleep, lisp-implementation-type,
*features*, lisp-implementation-version, machine-type,
machine-version, machine-instance, software-type, software-
version
[disassemble, get-universal-time, decode/encode-
universal-time, internal-time-units-per-second, short-site-
name, long-site-name, identity]
------------------------end of the document ----------
----------