
Faré wrote:
But there should really be another layered project to provide all the basic algorithms to CL: fifos, various trees, iterators, comparators, tries, hashes, sorting, pure and impure containers, etc. Although we possibly want to layer that on top of a good macroexpansion and higher-order module system a la MzScheme.
Sure, but definitely out of scope for Alexandria.
Notes, reading the darcs source: * I think if-let* would be better if it did short-circuit logic and stopped computing and binding at the first NIL
Possible, but probably a sign that the operator itself can be interpreted in too many ways and should be left out. Dunno.
* in sequences.lisp, shouldn't suffle be shuffle?
Ooops!
* shouldn't emptyp be a gf?
Probably yes.
* in symbols, what does ensure-symbol do that intern alone doesn't do???
When writing macros needing to do (intern (string something-from-user) package) happens often enough to annoy me. I have no idea why it does first FIND-SYMBOL and the INTERN. Looks like a brainfart.
* there should be a shortcut format-keyword for format-symbol :keyword
Good call.
* tests should probably be in a separate directory, one per file, mimicking the main source files.
The same.
Things I would really like from arnesi * compose is done better in arnesi. a multiple-value version would be even better (as a replacement or a distinct function).
You're referring to implementation, not semantics? (Taking a quick look Arnesi seems to agree on semantics.) Both COMPOSE and MV-COMPOSE are useful in different situations, so I don't really see why they should be folded into one.
* I *really* would like to see the flow-control parts of arnesi there. Except that I prefer (block NIL ...) to (block while ...), and with* should have a different name.
Aside from anaphoric stuff contents of flow-control.lisp seem mostly fine to me. (Modulo docs.) I agree on the BLOCK NIL, fits with various CL constructs. ...except I am very dubious about WITH*.
* ensure-list, ensure-cons, remove-keywords
ensure-list is in Alexandria, remove-keywords is calles SANS. ensure-cons sounds good.
* eval-always (called eval-now in fare-utils)
I can be convinced about this, but I've always felt that eval-always is a sign that the thing has not been thought about, and doesn't really inform the reader. I believe an Emacs command to insert the mantra does the same thing better.
Things that might or not be good, some of which I have in fare-utils or that are in use at ITA: * the "optimizing" strcat (that normalizes to base-string if possible)
Possible, but seesm pretty specialized.
* nconcf, append1 append1f (i.e add one element at the end).
You mean nconc1, append1, and the corresponding modify-macros? Sounds good.
* many variants along the line of clisp's with-collect, arnesi's with-collector, etc.
I think collector stuff may out of scope, at least for initial release. The design space is too large for a "right" solution, and there is no clear traditional favorite.
* my DBG macro, for print-based debugging.
I think putting debugging tools into a separate package might be a good idea.
* with-input, with-output, for wrapping a stream-using function like format does with its internals (i.e NIL means returning the resulting string).
Possible.
* defconstant-equal, defconstant-equalp, defconstant-unequal, defconstant-eqx -- to specify the constantness that matters.
How about (define-constant var value :test equal) ?
* alist->hash-table and hash-table->alist
hash-table-alist and alist-hash-table exist in Alexandria.
* with-accessors (with optional prefix) as a replacement for with-slots.
This would shadow cl:with-accessors, no?
* accessors-equal to help compare objects slot-by-slot
Possible.
* plist->alist
Call it plist-to-alist and add the inverse. ;)
* association
Need to look at this. (Or you can explain it.)
* defun-inline
I feel this is redundant, or possibly out of scope for Alexandria. A separate package/project for defun-typed, defun-inline might be in order.
* define-values-modify-macro define-values-post-modify-macro post-incf post-decf
If the semantics are right, sure.
* multiple-value-quote (only useful if we also provide standard abbreviated names -- which would make sense *a different package*)
Need to look at this. (Or you can explain it.)
* symbol-macro-expansion
Nice! I wonder if doing the SETF too would be too hacky.
That's all for today.
Good stuff. I see that there are two things that are part of the Big Alexandria Idea that are not on the homepage: 1. Remain backwards compatible. Don't add stuff you may regret. 2. All project members have a veto on any operator. (This veto doesn't have to be excercised immediately -- we will have a veto-round before release.) And to lesser extent: keep the package namespace down to something reasoable so that it will not conflict too badly when it gets USE-PACKAGEd. These are basically the ways conservativism is hopefully created. Cheers, -- Nikodemus