lispcommon-lispgnu-common-lispansi-common-lispcondition-system

How can conditions be handled in GCL?


handler-case is key to handling conditions in Common Lisp, but GCL 2.6.12 on Ubuntu 18.04 considers it to be an undefined function:

>(handler-case (error "test") (error (condition) condition))                   
                                                                               
Error: UNDEFINED-FUNCTION :NAME HANDLER-CASE                                   
Fast links are on: do (si::use-fast-links nil) for debugging                   
Signalled by EVAL.                                                             
UNDEFINED-FUNCTION :NAME HANDLER-CASE                                          

Broken at EVAL.  Type :H for Help.                                             
    1  Return to top level.                                                    
>>

The same is true for handler-bind.

The only function related to handling conditions or errors that is obvious in the GCL manual is the GCL-specific universal-error-handler.

How can conditions be handled in GCL, preferably in a way that is supported by other Lisps?


Solution

  • The situation is explained in the project's README.Debian:

    [...] The common lisp standard in effect when GCL was first released is known as "Common Lisp, the Language" (CLtL1) after a book by Steele of the same name providing this specification. Subsequently, a much expanded standard was adopted by the American National Standards Institute (ANSI), which is still considered the definitive common lisp language specification to this day.

    [...]

    To toggle the use of the ANSI image, set the environment variable GCL_ANSI to any non-empty string.

    (This Debian bug has a little more info.)

    handler-case requires ANSI support, so on Debian-based systems, GCL needs to be started with the GCL_ANSI environment variable set; for example:

    $ GCL_ANSI=1 gcl
    

    To reflect the change, the first line of the startup message changes from:

    GCL (GNU Common Lisp)  2.6.12 CLtL1    Fri Apr 22 15:51:11 UTC 2016
    

    To:

    GCL (GNU Common Lisp)  2.6.12 ANSI    Fri Apr 22 15:51:11 UTC 2016