[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