Here are a few items on my post-ANSI wishlist. Please forgive me if I'm not following proper CLtL3 wishlist protocol.
* Get REQUIRE right. IIRC, CLtL2 had *MODULE-PROVIDER-HOOKS*. This is good. There should be a standard way for defsystems to coexist.
* If versioning semantics are added to REQUIRE, I suggest something like - (require system &optional version), NIL matches any version - require signals an error if the requested version doesn't match a currently loaded version - versions have three numbers (a la libtool) - "major" number represents external API changes (e.g. new functions) - "minor" number represents internal changes (e.g. bugfixes) - "range" counts minor numbers that are binary compatible - Example: 5.7.2 - API 5, release 7, backwared compatible with 5.6.x and 5.5.x - projects compiled against 1.x.y-4.x.y will need to be recompiled and may also need code changes - projects compiled against 5.0.x-5.4.x will require a recompile but no code changes
* Standardize read macros that dispatch on a symbol. The current read-macro namespace is too crowded. Here are a couple syntax variants. The first lets the dispach function read everything; it takes the current standard read-macro arguments. The second uses a normal read to get the default arguments; it takes the read-macro arguments as special variables. - #?(read-if (= 1 2) :true :false) dispatch to #'read-if which reads "(= 1 2)", skips :true, and reads :false - #!(read-if nil)(:true :false) dispatch to (read-if nil), which skips :true and reads :false
* Allow packages to specify whether they want case folding. The ANSI CL reader folds case first, then looks for a match. I'm aware of a few skunkworks projects which try to reverse that order. Thus CL::REQUIRE will always fold case, but symbols in package PR could have their case preserved.
* Provide a standard code walker.
* Define a standard mapping between pathnames and files on the major OSs.
* Split CL into smaller packages like CL.ALIST, CL.PLIST, etc. Use symbol macros for symbols in CL.
* Provide a standard way for macros to query type-inferencing info, declarations, etc.
* Introduce a range api, and use it as a standard way to hook any datastructure into MAP*, NTH, etc. Something like Clojure or D. http://www.digitalmars.com/d/2.0/phobos/std_algorithm.html
* Define CL's memory model in a multithreaded environment, a la JSR133. http://jcp.org/en/jsr/detail?id=133
Later, Daniel