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 1.0.29
Back to top- IMPORTANT: bug database has moved from the BUGS file to Launchpad
https://bugs.launchpad.net/sbcl
Bugs can be reported directly there, or by sending email to
sbcl-bugs@lists.sourceforge.net
(no subscription required.)
- minor incompatible change: under weak type checking policy integer
types are weakened less aggressively.
- minor incompatible change: SAVE-LISP-AND-DIE :TOPLEVEL function is now
allowed to return, which causes SBCL to quit with exit status 0. Previously
if the function returned with a small integer return value, that value
was accidentally reused as the exit status.
- new feature: SB-EXT:DEFINE-HASH-TABLE-TEST allows defining new arguments
to MAKE-HASH-TABLE :TEST, and MAKE-HASH-TABLE has been extended with
:HASH-FUNCTION argument. Refer to user manual for details.
- new feature: SB-EXT:DEFGLOBAL macro allows defining global non-special
variables.
- new feature: SB-EXT:GET-TIME-OF-DAY provides access to seconds and
microseconds since the Unix epoch on all platforms.
- new feature: SB-EXT:ALWAYS-BOUND proclamation inhibits MAKUNBOUND, and
allows the compiler to safely elide boundedness checks for special
variables.
- new feature: SB-EXT:GLOBAL proclamation inhibits SPECIAL proclamations for
the symbol, prohibits both lexical and dynamic binding. This is mainly an
efficiency measure for threaded platforms, but also valueable in
expressing intent.
- new feature: UNC pathnames are now understood by the system on Windows.
- optimization: the compiler uses a specialized version of FILL when the
element type is know in more cases, making eg. (UNSIGNED-BYTE 8) case
almost 90% faster.
- optimization: accesses to potentially non-simple arrays where element type
is known are 50% faster.
- optimization: compiler now generates faster array typechecking code.
- optimization: ARRAY-DIMENSION is now faster for multidimensional and
non-simple arrays.
- optimization: multidimensional array accesses in the absence of type
information regarding array rank are approximately 10% faster due to
open coding of ARRAY-RANK.
- optimization: result of (FILL (MAKE-ARRAY ...) ...) and (REPLACE
(MAKE-ARRAY ...) ...) can be stack allocated if the result of MAKE-ARRAY
form can be.
- optimization: result of call to VECTOR can now be stack allocated.
- optimization: MAKE-ARRAY with :INITIAL-CONTENTS is now vastly faster
as long as the resulting array is one-dimensional and has a known
element type. In particular, :INITIAL-CONTENTS (LIST ...) where the
length of the list matches the known length of the vector does not
allocate the list as an intermediate step. Ditto for VECTOR and simple
backquoted forms.
- optimization: MAKE-ARRAY can now stack allocate in the presence of
:INITIAL-CONTENTS and :INITIAL-ELEMENT as long as the result has a
known element type, and is known to be simple and one dimensional.
- improvement: SBCL now emits a compiler note where stack allocation was
requested but could not be provided (not in all cases, unfortunately)
- improvement: better MACHINE-VERSION responses. (thanks to Josh Elsasser)
- improvement: pretty-printing loop has been implemented properly. (thanks
to Tobias Rittweiler)
- documentation: CLOS slot typechecing policy has been documented.
- bug fix: FILE-AUTHOR no longer signals an error on Windows.
- bug fix: SB-SPROF could be foiled by foreign code not have a frame
pointer, leading to memory faults. (thanks to Bart Botta)
- bug fix: better floating point exception handling on x86/OpenBSD.
(thanks to Josh Elsasser)
- bug fix: exit status from QUIT when called under --script was lost
(reported by Hubert Kauker)
- bug fix: MAKE-ARRAY for non-zero :INITIAL-ELEMENT always used the
same implementation of FILL to initialize the array, even if a more
efficient one was available (reported by Stas Boukarev, thanks to
Paul Khuong)
- bug fix: potential miscompilation of array stack allocation on x86 and
x86-64. (reported by Time Tossavainen)
- bug fix: some forms of AND, OR, and COND resulted in expansions that could
result in their subforms being treated as top level forms. (reported by
James Knight)
- bug fix: On x86/x86-64 alien functions declared to return integers shorter
than a machine register could leave garbage in the high bits of the
result register (bug 316325).
- bug fix: disable address space randomization Linux/x86-64 as well,
not just x86-64. (reported by Ken Olum)
- bug fix: Attempting to DEREF an (ALIEN (* T)) would produce a WARNING and
generate incorrect code.
- bug fix: #201; type inference for CONS and ARRAY types could derive
wrong results in the presence of eg. RPLACA or ADJUST-ARRAY.
- bug fix: special variables with a proclaimed specific subtype of FUNCTION
could not be assigned to or bound with PROGV. (reported by Lorenz
Mösenlechner)
- bug fix: the value of CL:- in the inspector was the previous expression
evaluated rather than the expression being evaluated.
- bug fix: constants can no longer be locally declared special.
- bug fix: signals delivered to threads started from foreign land (read:
directly by pthread_create, not by MAKE-THREAD) are redirected to a Lisp
thread by blocking all signals and resignalling.
- bug fix: SHARED-INITIALIZE initialized unbound :ALLOCATION :CLASS slots
from :INITFORM, if any.
New in version 1.0.28
Back to top- a number of bugs in cross-compilation have been fixed, with the ultimate
result that building under (at least) clisp should be much more reliable.
- minor incompatible changes: echo-streams now propagate unread-char to the
underlying input stream, and no longer permit unreading more than one
character.
- improvement: on x86/x86-64 Lisp call frames now have the same layout as C
frames, allowing for instance more reliable backtraces.
- improvement: the debugger REPL can now reference lexical variables
by name directly for code compiled with (DEBUG 3).
- improvement: errors from malformed declarations now have better source
paths associated with them. (thanks to Tobias Rittweiler)
- optimization: faster local calls on x86/x86-64
- bug fix: some error messages for out-of-bound array indexes confused the
index and the bound. (thanks to Stas Boukarev)
- bug fix: pretty printing malformed DEFPACKAGE forms (thanks to Sidney
Markowitz)
- bug fix: running regressions tests in shells without OSTYPE set now works.
(reported by Harald Hanche-Olsen)
- bug fix: more robust static space exhaustion signalling from
MAKE-STATIC-VECTOR (thanks to Daniel Lowe)
- bug fix: (SETF DOCUMENTATION) for anonymous function now throws the
docstring away instead of storing it under names such as (LAMBDA (X)).
(reported by Leslie Polzer)
- bug fix: timers could go off in the wrong order, be delayed indefinitely
(thanks to Ole Arndt for the patch)
- bug fix: RESTART-FRAME and RETURN-FROM-FRAME stack corruption
- bug fix: the discriminating function for PRINT-OBJECT no longer preserves
potentially-invalid effective methods in its cache.
- bug fix: SB-INTROSPECT:FIND-DEFINITION-SOURCE now works with funcallable
instances as well (thanks to Paul Khuong)
- bug fix: using RUN-PROGRAM does not interfere with SB-POSIX:WAIT,
SB-POSIX:WAITPID and their C equivalents.
- bug fix: RUN-PROGRAM does not crash on Darwin when stressed.
Older SBCL releases