22 Jun 2006 wnewman   » (Master)

gobry: Yes, I agree with various criticisms of Common Lisp, including your point about lack of features in standard libraries that are taken for granted in more modern languages. (Other Lispers, and ex-Lispers, too. Note, e.g., that Guy Steele was a towering figure in CL standardization before he did that Java thing.) And, if someone had written an article which I basically liked and which bounced that high on Reddit praising CL without mentioning the things that worry me, I might well have written a careful-about-skipping-over-those-gotchas message in response.

I can't think of any convenient links of me cautioning someone else that way about CL advocacy in particular, but if you really really search, I'm fairly sure that more than once in a web-searchable place I have said in effect "whoa, there are good things about C++ [and STL]" when people got too enthusiastic about CL.

I have also been guilty of spontaneously criticizing CL myself from time to time. For example, in the micro-user's-manual of the library I just released, on the hack that one uses in SBCL to set print properties which apply only at debug time, because ANSI provides no way to set them so that they apply only to an appropriate stream like *DEBUG-IO*,

#+sbcl (dolist (bind '((*print-circle* . t)   ; Thank you, ANSI, for 
                       (*print-length* . 64)  ;  specifying *PRINT-foo* 
                       (*print-level* . 64))) ;   as global variables!
         (push bind
	       sb-debug:*debug-print-variable-alist*))

Or for any CL users sufficiently hard-core to be messing around with the "genesis" phase of SBCL, try this, venting about^W^Wdocumenting the wretched hack that I wrote to work around the fact that we can't portably allocate a single vector of approximately the same size as the machine's address space:

;;; KLUDGE: This implementation seems portable enough for our
;;; purposes, since realistically every modern implementation is
;;; likely to support vectors of at least 2^16 elements. But if you're
;;; masochistic enough to read this far into the contortions imposed
;;; on us by ANSI and the Lisp community, for daring to use the
;;; abstraction of a large linearly addressable memory space, which is
;;; after all only directly supported by the underlying hardware of at
;;; least 99% of the general-purpose computers in use today, then you
;;; may be titillated to hear that in fact this code isn't really
;;; portable, because as of sbcl-0.7.4 we need somewhat more than
;;; 16Mbytes to represent a core, and ANSI only guarantees that
;;; ARRAY-DIMENSION-LIMIT is not less than 1024. -- WHN 2002-06-13

I have even been guilty of criticizing the CL code that I write or maintain myself from time to time. Check out a copy of SBCL and grep for "KLUDGE" and "FIXME"; even today, a fair proportion of those are me.

(So while you may suspect I was indulging in CL bigotry or even sneaky anti-Python-the-scripting-language advocacy, I think I was basically being in character as a cranky critic of language and implementation gotchas in general.)

Latest blog entries     Older blog entries

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!