News
New SBCL versions are usually released at the end of each
month: check the Sourceforge File List to see the current version. The new features of the two most recent SBCL releases are listed below.
Please see the complete news page for details on all historical SBCL releases.
New in version 2.5.6, 2025-06-29
Back to top- 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. (#2111876, reported by Matt Kaufmann)
- bug fix: the compiler's constraint derivation would sometimes not terminate.
(#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. (#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).
(#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.
New in version 2.5.5, 2025-05-31
Back to top- minor incompatible change: the output from TRACE is now prefixed by a
FRESH-LINE on *TRACE-OUTPUT*.
- platform support:
- On Linux, the system is better at negotiating with the kernel to find
locations for Lisp memory spaces, succeeding more often than
previously.
- bug fix: resolve signed/unsigned char mismatch in RUN-PROGRAM on Windows.
(#2110525, reported by awlygj)
- bug fix: compiler confusion given sufficiently complex derived type
constraints. (#2109902)
- bug fix: compiler inconsistency in low-level representation leading to
inconsistent transformations. (#2109837)
- bug fix: return NIL from calls to DOCUMENTATION on illegal function names.
- bug fix: calls to APPLY or VALUES-LIST on some combinations of constant
arguments could lose the constant nature after transformation. (thanks to
Hayley Patton)
- optimization: some micro-improvements to bignum operations, particularly
on x86-64 and arm64
- optimization: allow the result of MAKE-STRING to be allocated on the stack
when :element-type is unknown.
- optimization: the compiler will recognize the use of ZEROP on the results
of LENGTH and REM (on suitable operands) to avoid full computation of the
intermediate result.
Older SBCL releases