On Wed, 14 Jun 2006 11:02:13 -0700, "Charles A. Cox" cox@franz.com wrote:
Thanks for your report.
This is the first time I've heard of "flexi-streams". From the description in your message, my first thought is that Allegro CL users are better off using Allegro CL streams since Allegro CL streams provide what "flexi-streams" purports to offer (bivalency, dynamically switchable external-formats, etc.).
Still, if I understand correctly, there is a specific question of how the :external-format slot is being initialized in subclasses of excl:fundamental-character-stream. That class has a default-initargs which specifies :external-format. Here is a simplified example to demonstrate what's happening:
(defclass my-stream () ((external-format :initarg :external-format)))
(defclass my-fundamental-character-stream (my-stream) () (:default-initargs :external-format :default))
[your test case:] (defclass foo (my-fundamental-character-stream) ((bar :initarg :external-format :initform (error "No external format."))))
(slot-value (make-instance 'foo) 'bar) ==> :default
Even though we may not be documenting the external-format slot in Allegro CL streams, we do document stream-external-format, which is an accessor to that slot.
My recommendation is that if flexi-streams implements an external-format separate from that of the base Lisp, that it then use a name other than "external-format".
Well, you've heard what they say - AllegroCL's streams are better anyway... :)
My take still is that if AllegroCL provides classes that can be subclassed and instantiated by user code, then they should either use internal symbols for their initargs or, if they use keyword symbols, they should document them.
Anyway, Franz' reaction doesn't really make me feel as if I should hurry to make FLEXI-STREAMS work with AllegroCL.
Cheers, Edi.