[Ecls-list] non-conforming symbols in package :CL

Faré fahree at gmail.com
Sun Mar 25 05:31:28 UTC 2007


I believe that GCL and ECL are wrong about the symbols exported or not
exported from package :CL. The symptom is that the below cryptic form
works in clisp, cmucl, sbcl and allegro, but not in gcl (gclcvs
2.7.0-64.2 from debian i386) or ecl (0.9i-2 from debian i386).

(map()(lambda(n l)(princ(subseq #.(format nil "(~{~A~#[~:;
~]~})~%"(let(r)(do-external-symbols(x :cl)(push x r))(sort r #'string<
:key #'string))) n (+ n l))))'(875 949 8 6010 4863 371 11)'(4 3 5 5 3
2 2))

The form depends on the fact that the ANSI standard pretty much
mandates which symbols are external in the CL package in section
11.1.2.1. Conforming implementations are free to have more symbols in
other packages, and to have packages that include the symbols in CL in
addition to many others, but the list of symbols in CL is pretty much
a universal constant (at least until the standard is revised).

You can diff the result of the following form between implementations
to see where the results diverge. ECL non-conformingly exports just
the symbol *OPTIMIZE-SLOT-ACCESS*, whereas GCL non-conformingly
exports a whole lot of symbols.

(format t "~{~A~%~}"(let(r)(do-external-symbols(x :cl)(push x r))(sort
r #'string< :key #'string)))

[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ]
(map()(lambda(x)(format t"~31R "x))'(595756 9556552524 643802 496307950))




More information about the ecl-devel mailing list