sbcl-2.5.7 released

Christophe Rhodes via Sbcl-announce <[email protected]> Sat, 26 Jul 2025 16:01:05 +0100
Newsgroups gmane.lisp.steel-bank.announce
Message-ID <[email protected]>
Dear all,

SBCL 2.5.7 is now tagged in version control, with some artifacts
released and uploaded to Sourceforge.  Notable changes in this release
are summarized below.

I have also just noticed that I inadvertently sent the announcement mail
for SBCL 2.5.6 to the developer list (archive at
https://sourceforge.net/p/sbcl/mailman/message/59200803/) rather than
this announcement list.  Sorry about that!  I've also appended the
changes in that version below.

Christophe

changes in sbcl-2.5.7 relative to sbcl-2.5.6:
  * enhancement: the encapsulate mechanism can be used to wrap functions that
    are currently not FBOUNDP.
  * bug fix: internal compiler error in a failure of stack analysis during
    propagation of dynamic-extent.  (lp#2113935)
  * bug fix: address regression in type inference for TRUNCATE and other
    division-related operators.  (lp#2115305, reported by Vasiliy Postnicov)
  * bug fix: cleanup of the main thread is performed more carefully when SBCL
    is used as a shared library.  (lp#2115669, reported by Fedorov Alexander)
  * bug fix: the compiler does not lose track of the types of specialized
    external entry points for user-defined functions.  (lp#2115955, reported
    by Matt Kaufmann)
  * bug fix: adjust compiler template argument acceptability for increased
    usage scope.  (lp#2116150)
  * bug fix: provide a stub for ROTATE-RIGHT-WORD for constant-folding during
    compilation.  (lp#2117080)
  * bug fix: provide a stub for %MAKE-DOUBLE-FLOAT for constant-folding during
    compilation.  (reported by Eric Marsden)
  * bug fix: don't loop infinitely in the presence of type-mismatching
    circular #S read syntax.  (reported by Bohong Huang)
  * optimization: calls to SLOT-VALUE (and related functions) within methods,
    on values that are not a specialized argument to those methods, are
    optimized similarly to calls to SLOT-VALUE in non-method code.
  * optimization: calls to REPLACE with VECTOR first argument and LIST second
    argument are improved.
  * optimization: TYPECASE over a set of structure types known not to be
    extensible is converted to an array lookup.

changes in sbcl-2.5.6 relative to sbcl-2.5.5:
  * enhancement: the compiler now recognizes when local functions (both named
    and anonymous) are used only as downward funargs in many situations and
    can stack allocate such closures even without explicit dynamic extent
    declarations. See the updated manual entry on stack allocation for more
    information and how user-code can declare funargs as downward.
  * minor incompatible change: optimization notes for a variable declared to
    be of type LIST will not be emitted for various transforms which are
    defined to operate on (OR NULL VECTOR).
  * minor incompatible change: some forms, including a THE form with an
    invalid type specifier, or a CASE form with bad entries, no longer produce
    a runtime error.  (They continue to provide a full warning at
    compile-time).
  * platform support
    ** on arm64, breakpoint-based stepping is now thread-safe.
    ** on arm64, backtraces after interrupts should be more correct.
    ** on x86-64 with the immobile-space feature, calling from assembly
       routines to lisp routines is more efficient.
    ** if arenas are enabled, users can define a lisp function to act as a
       handler to customize behaviour on arena exhaustion.
  * bug fix: address several bugs related to dynamic-extent declarations,
    inference, and stack allocation.
  * bug fix: the stack return page protection is temporarily disabled during
    GC, so that GC can complete even if it needs to write in the return page.
  * bug fix: the compiler generates code to the right entry point for specialized
    functions.  (lp#2111876, reported by Matt Kaufmann)
  * bug fix: the compiler's constraint derivation would sometimes not terminate.
    (lp#2113747)
  * bug fix: when the runtime structure representing a thread is re-used, the
    stack guard pages are restored.
  * bug fix: type checks for &OPTIONAL arguments are done only once.
  * bug fix: CEILING's docstring was wrong.  (reported by Dave Tenny)
  * bug fix: APPLY could be called with too many arguments when parsing MEMBER
    type specifications.  (reported by Zach Beane)
  * bug fix: the compiler could allow constant values of bad types to trigger
    optimizations.  (lp#2113977)
  * bug fix: internal compiler error when attempting to write out a type check
    for a value already proved to never exist (i.e. be of type NIL).
    (lp#2112475)
  * optimization: better division for signed-word dividends and unsigned-word
    divisors on arm64 and x86-64.
  * optimization: improvements to subtraction involving bignums and words on
    x86-64.
  * optimization: perfect-hash-based transformations are applied to sequence
    functions with keys including fixnums and characters as well as symbols.