Hi,
In trying out Daniel Herring's new LibCL (http://libcl.com/) on Franz Allegro CL, I noticed something about LISP-VERSION-STRING which is in asdf-binary-locations, which evidently borrowed it from SLIME.
There are actually four Lisp executables that come in an Allegro distribution, that differ in two orthogonal dimensions. One dimension, which LISP-VERSION-STRING accounts for, is the case mode, "ANSI" or "modern". The other is 8-bit strings vs. 16-bit strings; I noticed that LISP-VERSION-STRING doesn't take this into account (but the fasls are indeed incompatible). The 16-bit executables are the default; the other two have "8" appended to their names.
Here is a suggestion for the Allegro code in LISP-VERSION-STRING to reflect this distinction.
#+allegro (format nil "~A~A~A~A" excl::*common-lisp-version-number* ; ANSI vs MoDeRn ;; thanks to Robert Goldman and Charley Cox for ;; an improvement to my hack (if (eq excl:*current-case-mode* :case-sensitive-lower) "M" "A") ;; Note if 8-bit strings (if (code-char 256) "" "8") (if (member :64bit *features*) "-64bit" ""))
This is backward-compatible for users of 16-bit strings. Since there probably aren't many users of 8-bit strings, the impact will be minimal.
-- Scott
On Mon, Sep 7, 2009 at 5:20 AM, Scott L. BursonScott@sympoiesis.com wrote:
There are actually four Lisp executables that come in an Allegro distribution, that differ in two orthogonal dimensions. One dimension, which LISP-VERSION-STRING accounts for, is the case mode, "ANSI" or "modern". The other is 8-bit strings vs. 16-bit strings; I noticed that LISP-VERSION-STRING doesn't take this into account (but the fasls are indeed incompatible). The 16-bit executables are the default; the other two have "8" appended to their names. [...] (if (code-char 256) "" "8")
FWIW, the exported variable excl:real-char-code-limit seems to be defined especially for detecting the 8 vs 16 bit mode. http://www.franz.com/support/documentation/8.1/doc/variables/excl/real-char-...
- Willem
On Mon, Sep 7, 2009 at 2:49 AM, Willem Broekemametawilm@gmail.com wrote:
FWIW, the exported variable excl:real-char-code-limit seems to be defined especially for detecting the 8 vs 16 bit mode. http://www.franz.com/support/documentation/8.1/doc/variables/excl/real-char-...
Ah, good, thanks.
-- Scott
On Mon, Sep 7, 2009 at 20:27, Scott L. Burson Scott@sympoiesis.com wrote:
On Mon, Sep 7, 2009 at 2:49 AM, Willem Broekemametawilm@gmail.com wrote:
FWIW, the exported variable excl:real-char-code-limit seems to be defined especially for detecting the 8 vs 16 bit mode. http://www.franz.com/support/documentation/8.1/doc/variables/excl/real-char-...
Ah, good, thanks.
A cleaner solution would be to use excl:ics-target-case: That lets you conditionalize without hard-coding numerical limits and will be supported even if ACL should ever change their char code limits: http://www.franz.com/support/documentation/8.1/doc/operators/excl/ics-target...
Cheers,
Hi Scott (and all),
I'm thinking of going with:
#+allegro (format nil "~A~A~A~A" excl::*common-lisp-version-number* ; ANSI vs MoDeRn ;; thanks to Robert Goldman and Charley Cox for ;; an improvement to my hack (if (eq excl:*current-case-mode* :case-sensitive-lower) "M" "A") ;; Note if using International ACL ;; see http://www.franz.com/support/documentation/8.1/doc/operators/excl/ics-target... (excl:ics-target-case (:-ics "8") (:+ics "X")) (if (member :64bit *features*) "-64bit" ""))
Is there any dissent?
-- Gary Warren King, metabang.com Cell: (413) 559 8738 Fax: (206) 338-4052 gwkkwg on Skype * garethsan on AIM * gwking on twitter