[cltl3-devel] wishlist items
Daniel Herring
dherring at tentpost.com
Mon Sep 7 04:44:42 UTC 2009
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
More information about the Cltl3-devel
mailing list