[Openmcl-devel] OpenMCL 1.0-rc1

Bill Clementson billclem at gmail.com
Sun Sep 25 16:35:21 PDT 2005

On 9/25/05, bryan o'connor <bryan-lisp at lunch.org> wrote:
> >        (make-instance #+sbcl #-sb-thread 'bc-sbcl
> >               #+sbcl #+sb-thread 'bc-sbcl
> >               #-sbcl 'bc
> >               :slot1 "test"))
> the way reader conditionals work has changed since 0.14.3
> to properly handle "nested" conditionals like above.
> the "inside" conditional now gets properly evaluated.

It appears that OpenMCL 0.14.3 and Allegro CL both handle "nested"
conditionals one way and OpenMCL 1.0-rc1 and LispWorks handle "nested"
conditionals in another way. I had a look at the CLHS and (and related sections) and can not find a clear explanation
of what the correct behaviour should be.

> if sb-thread is not in *features*, your above form becomes:
>    (make-instance #+sbcl 'bc-sbcl
>                   #+sbcl
>                   #-sbcl 'bc
>                   :slot1 "test")
> then with sbcl not in *features* becomes:
>    (make-instance :slot1 "test")
> here's a version that should work:
>    (make-instance #+sbcl #+sb-thread 'bc-sbcl
>                          #-sb-thread 'bc-sbcl   ; same as above?
>                   #-sbcl 'bc
>                   :slot1 "test")

That will work for OpenMCL 1.0-rc1 and LispWorks but will fail for
OpenMCL 0.14.3 and Allegro CL. The 2nd expression probably needs to be
converted to a feature expression - e.g. - something like #+(and sbcl
(not sb-thread))

> this is either covered in or the sections to which
> it refers.

Again, I was not able to find a clear explanation of how nested
conditionals should be handled. If you could please point me to the
correct place in the hyperspec, I will forward a bug report to Franz.


More information about the Openmcl-devel mailing list