Skip to content

Releases: sbcl/sbcl

SBCL 2.4.8

29 Aug 18:33
Compare
Choose a tag to compare
  • bug fix: the elftool utility finds a writeable directory in more
    situations. (thanks to Shinmera)
  • bug fix: SLOT-MAKUNBOUND does not attempt to dereference a PROGN variable
    in the interpreter.
  • bug fix: READ-SEQUENCE into displaced arrays with a non-zero offset now
    writes to the right memory location.
  • bug fix: fix some erroneous file position calculations in the editcore
    utility (exposed by a change in the libzstd compression implementation).
  • bug fix: do not break the build on STYLE-WARNINGs for earlier SBCL build
    hosts. (lp#2064671, reported by Patrick Poitras)
  • bug fix: various bug fixes for ppc64le (lp#2074275, reported by Claude R. C.)
  • bug fix: address a rounding error in the TAN type deriver which led to a
    miscompile in cl-pdf. (lp#2077100, reported by Gian Pierro Carrubba)
  • bug fix: overoptimization of FIND with a :TEST of CHAR-EQUAL. (lp#2077539)
  • optimization: detection of duplicate names in loaded code now scales
    subquadratically.
  • optimization: switch from Floyd's to Brent's cycle detection for lists.
  • optimization: EQUAL on lists should be faster.
  • optimization: fewer filesystem operations are performed when working out
    what to LOAD.
  • optimization: various microoptimizations on hash tables and
    associated operations.
  • optimization: strings are now hashed using FNV-1A, replacing Bob Jenkins'
    one-at-a-time hash.
  • optimization: fewer redundant validations of the sequence bounding indices
    in POSITION on strings.
  • optimization: many improvements to type derivation on the arguments to and
    results of standard functions
  • optimization: adding many (hundreds) methods to a generic function can be
    done faster.

SBCL 2.4.7

27 Jul 14:56
Compare
Choose a tag to compare
  • minor incompatible change: the compiler will emit optimization notes
    related to complex type checks only at high SPEED optimization settings.
  • minor incompatible change: the GET-FOREGROUND symbol is now exported from
    the SB-THREAD package. (thanks to Philipp Marek)
  • minor incompatible change: code objects are now printed with their ending
    address as well as their start address.
  • platform support:
    ** fix occasional saved core corruption on Win32. (reported by Luís
    Borges de Oliveira)
    ** address some crashing cases in arena support. (reported by Andreas
    Franke)
    ** fix a hard-coded path to cp. (thanks to Hraban Luyat)
    ** address relocation issues on PIC-flavoured arm64. (lp#2067153, thanks
    to leafze)
    ** fix a crash in the arm64-dissassembler if a code component is missing.
    ** fix a crash on 32-bit musl libc systems. (reported by Will Sinatra)
    ** fix building with link-time optimization. (lp#2072800, reported by Eli
    Schwartz)
    ** fix building with newer llvm. (lp#2071545, reported by Yan)
    ** mitigate the lack of gc-safety in SB-VM::REMOVE-STATIC-LINKS.
    (lp#2045433)
  • bug fix: COMPILE installs its second argument as the value of its non-null
    NAME argument, even if the second argument was already compiled.
    (lp#2071324, reported by Tim Bradshaw)
  • bug fix: allow the hashing routines in sb-md5 to work on arrays with more
    than 2^29 elements.
  • bug fix: allow READ-SEQUENCE and WRITE-SEQUENCE to read and write files
    bigger than 4GB.
  • bug fix: READ-SEQUENCE returns the index of the first unmodified element
    of its sequence. (reported by Janis Dzerins)
  • optimization: various improvements to floating point rounding routines.
  • optimization: PHASE called on the result of COMPLEX now elides the
    intermediate COMPLEX object.
  • optimization: the compiler is more aware of the types of COMPLEX, ATAN,
    APPEND and NCONC.

SBCL 2.4.6

29 Jun 20:43
Compare
Choose a tag to compare
  • enhancement: name conflicts resulting from colliding symbols in IMPORT and
    USE-PACKAGE are resolved once for each name, rather than between pairwise
    colliding symbols.
  • enhancement: calls to structure constructors with type mismatches in
    default initforms cause compile-time warnings.
  • platform support:
    ** fix constant-folding of %log1p and %log2 on 32-bit x86.
    ** fix the encoding of popcntd on ppc64
  • bug fix: EXPORT could be tricked into exporting two distinct symbols of
    the same name from the same package.
  • bug fix: two-argument calls to LOG with arguments of different precision
    do not lose accuracy through insufficiently-precise intermediate values.
  • bug fix: :NEWLINE options in DEFAULT-EXTERNAL-FORMAT are respected when
    opening files. (reported by Marco Antoniotti)
  • bug fix: extend type declarations for the iteration variable of DOLIST
    with NULL during the evaluation of the result clause. (lp#942237)
  • bug fix: #\uE0 (LATIN CAPITAL LETTER A WITH GRAVE) was incorrectly not
    downcased with STRING-DOWNCASE. (lp#2067841, reported by Matt Kaufmann)
  • bug fix: backquoted lists as arguments to MAKE-ARRAY were miscompiled.
    (lp#2069345, reported by Dan Bothell)
  • bug fix: resolve the circularity between the type system and the CLOS
    metaobject protocol more robustly. (lp#2069502, reported by Jan Moringen)
  • bug fix: misplaced tilde in a logical pathname error message.
    (lp#2069995, thanks to Marco Heisig)
  • optimization: various speedups to UTF-8 based external format streams and
    other stream routines.

SBCL 2.4.5

30 May 10:31
Compare
Choose a tag to compare
  • incompatible change: attempting to pass or return alien structs by value
    now signals errors. Previously, such attempts would silently tend to
    corrupt registers or memory; there is work in progress to allow such calls
    conforming to the platform ABI. (thanks to Rongcui Dong)
  • minor incompatible change: function debug info is compressed only if the
    system is compiled with libzstd, rather than falling back to a pure-lisp
    compression implementation.
  • minor incompatible change: the compiler will warn in more cases when it
    can detect incorrectly-typed arguments to FORMAT directives ~C and ~R
  • minor incompatible change: strings are converted to a more compact
    representation if possible before being used as docstrings.
  • platform support:
    ** explicitly include stdlib.h where needed on OpenBSD. (thanks to
    Sebastien Marie)
    ** make the editcore utility work on Windows. (thanks to Luís Borges de
    Oliveira)
    ** fix memory initialization in RUN-PROGRAM on Windows.
    ** resolve a deadlock in %INTERRUPT-THREAD on Darwin. (lp#2062940,
    reported by Yan)
    ** hang on startup under some terminal emulators on OS X 14.5.
    (lp#2067313, reported by Richard M Kreuter)
  • enhancement: when (> debug 1), try to find source locations for code
    expanded from macros that copy their input forms.
  • bug fix: the method-combination generic function caches were missing some
    of the generic functions constructed during the PCL build itself.
    (reported by Didier Verna)
  • bug fix: SXHASH on equal PATHNAME objects could return different values in
    different cores. (reported by Luís Borges de Oliveira)
  • bug fix: spurious compiler warnings on SORT in some circumstances.
    (lp#2065609, reported by William G Lederer)
  • optimization: faster bignum addition and negation on arm64, x86-64.
  • optimization: faster type tests for (unsigned-byte X) for X being
    multiples of the platform word size, on arm64, x86-64.

SBCL 2.4.4

29 Apr 22:16
Compare
Choose a tag to compare
  • minor incompatible change: after-GC hooks are now called in the finalizer
    thread on threaded builds.
  • platform support:
    ** on win32 on 64-bit systems, clear x87 state as well as SSE state after
    an exception. (lp#2000435, reported by David Scherfgen)
  • enhancement: type assertions resulting from declarations involving variable
    numbers of multiple values are now checked.
  • enhancement: support for memory allocation arenas is now available on the
    arm64 platform.
  • enhancement: the cross-referencing facility is now able to handle
    anonymous functions.
  • enhacnement: the SB-INTROSPECT contrib finds callees in methods of generic
    functions.
  • bug fix: inconsistency in VOP definitions implementing DPB. (lp#2059842)
  • bug fix: MASK-FIELD miscompilation. (lp#2059849)
  • bug fix: caching a state-dependent type function leads to wrong type
    inference further down the line. (lp#2059888)
  • bug fix: internal consistency violation after failing to apply a
    MAKE-ARRAY transform. (lp#2060083)
  • bug fix: check the array index before constant-folding an array reference.
    (lp#2060347)
  • bug fix: don't try to apply type constraints from SATISFIES
    types. (lp#2060756)
  • bug fix: the JOIN-THREAD-PROBLEM function is now exported from the
    SB-THREAD package. (lp#2063385, thanks to Benjamin Lee)
  • bug fix: compare-and-swap works as expected on SLOT-VALUE of
    FUNCALLABLE-STANDARD-OBJECT instances. (reported by qhong)
  • bug fix: on arm64, and x86-64 with some non-default build options, integer
    rounding functions treat minus zero more consistently.
  • bug fix: disassembly of stack allocation of vectors caused a crash.
    (reported by bohonghuang)
  • bug fix: don't leak memory when decompressing a compressed core.
  • optimization: the amount of space needed for debug-info is about 50% less,
    leading to a total default image size reduction of more than 10%.
  • optimization: on arm64 and x86-64, encoding constants in machine code is
    sometimes smaller.
  • optimization: on arm64 and x86-64, list accumulation is done with less
    space overhead.
  • optimization: APPLY can apply a function to the REST of a &REST list
    without additional consing.

SBCL 2.4.3

29 Mar 18:36
Compare
Choose a tag to compare
  • enhancement: when dumping debug information to fasl files, the system
    respects the SOURCE_DATE_EPOCH environment variable (if set) as the latest
    timestamp to be used.
  • contributed module: the sb-perf contributed module, an interface
    originally by Luke Gorrie to Linux's perf, is now included by default on
    Linux. (Thanks to Philipp Marek)
  • platform support:
    ** on Linux and BSD variants, timezone querying is now faster.
    ** Arm64/Darwin: allow configuring the system with a relocatable static
    space.
    ** PPC64: allow configuring the system with fasteval.
  • bug fix: erroneous transform of EQUALP on characters (lp#2055425)
  • bug fix: float rounders (FTRUNCATE and related functions) handle minus
    zero more consistently, returning minus zero as the primary value when
    rounding to zero from a negative value.
  • bug fix: type checks for (VECTOR T) were giving the wrong answer for
    vectors displayed to simple multi-dimensional arrays. (reported by
    _death)
  • bug fix: do not transform away division by BIT when the BIT might still
    include 0. (lp#2056184, reported by xizang)
  • bug fix: various errors related to imperfections in the perfect hash
    generator. (lp#2055794, lp#2056341)
  • bug fix: respect declarations for symbol macros inside defmethod.
    (lp#2056514, reported by Jonathan Braud)
  • bug fix: failure to set structure slots to floats on Arm64. (lp#2058148,
    reported by Bibek Panthi)
  • optimization: improvements to the implementation of CASE.
  • optimization: faster PARSE-INTEGER :radix 10/16 on word-sized integers.
  • optimization: improvements to LOGBITP.

SBCL 2.4.2

29 Feb 09:49
Compare
Choose a tag to compare
  • bug fix: restore the ability to inherit from both SEQUENCE and
    SB-MOP:FUNCALLABLE-STANDARD-OBJECT. (lp#2050088, reported by Christophe
    Junke)
  • bug fix: COERCE will not convert lambda forms to functions if given a type
    naming a (strict) subclass of FUNCTION.
  • bug fix: LOG with a double-float and a ratio argument (in either order) do
    not lose precision through a single-float intermediate argument.
  • bug fix: LOG to the base 2 of integer powers of 2 are more likely to get
    the mathematically precise answer.
  • bug fix: LOG on ratios very near 1 with numerator or denominator being
    near a power of 2 will use log1p and so will lose less precision.
  • bug fix: the utf-8 external format with Unix line-endings updates its
    character size information when taking the fast path for a buffer of ascii
    characters. (lp#2054169, reported by John Carroll)
  • bug fix: don't print the contents of a possibly no-longer-valid
    dynamic-extent cons in PRINT-OBJECT method for THREAD objects.
    (lp#2026195, reported by Jake Connor)
  • bug fix: place external entry points for functions consistently before any
    local functions. (lp#2051169, reported by Fedorov Alexander)
  • bug fix: remove unactionable optimization notes for backquoted forms and
    ordinary calls to APPEND at high speed. (lp#2051401, reported by Robert
    Brown)
  • bug fix: infinite loop in COPY-SEQ on zero-length arrays of element-type
    NIL. (lp#2051759, reported by Devon Sean McCullough)
  • bug fix: fix compilation of non-top-level struct constructors.
    (lp#2052329, reported by Robert Poitras)
  • bug fixes in SB-SIMD:
    ** improve bounds checking in SB-SIMD. (lp#2012010, reported by Patrick
    Poitras)
    ** fix SB-SIMD AVX f64.4-reverse (lp#2012986, thanks to Ari Projansky)
    ** fix SB-SIMD shuffles on AVX and SSE2 (lp#2012990, reported by Ari
    Projansky)
    ** fix lifetimes in sse+xmm0 VOPs (lp#2015329, reported by Ari Projansky)
  • optimization: a number of internal tables, particularly those related to
    Unicode support have been converted to use perfect hash mechanisms,
    improving both speed and space.
  • optimization: FIND, POSITION, ASSOC and RASSOC with constant sequence
    arguments containing symbols as keys are compiled to perfect hash lookups.
  • optimization: the compiler runs a jump-to-jump elimination pass on x86-64.
  • system integrity: compiling the system itself on x86-64/linux now produces
    bitwise-identical cross-compiled fasls whether the build host is cmucl,
    ccl, clisp or sbcl itself.

SBCL 2.4.1

28 Jan 13:57
Compare
Choose a tag to compare
  • enhancement: compact instance headers are partially supported with the
    mark-region parallel garbage collector.
  • enhancement: functions with declared return types have their return values
    type-checked in optimization regimes with high SAFETY and (DEBUG 3).
  • platform support:
    ** disable ASLR on FreeBSD. (lp#2047655, thanks to Konstantin Belousov)
    ** link to libpthread on FreeBSD. (thanks to Konstantin Belousov)
    ** restore build on 64-bit riscv. (lp#2034713, lp#2048869, reported by
    Guillaume LE VAILLANT)
    ** restore build on 64-bit ppc.
    ** fix case in referring to a header file. (lp#2047726, thanks to Andrew Kravchuk)
    ** the fastrem-32 feature (for optimized computations of FLOOR) is now
    available on all platforms.
  • bug fix: resweep moved lines after compaction in the mark-region parallel
    garbage collector.
  • bug fix: infinite loops in the compiler on some constructs with SATISFIES
    types. (lp#2047289, lp#2047706, lp#2049631)
  • optimization: various hash tables implementing part of the system
    (packages, Unicode data tables) have been converted to use perfect hash
    functions.
  • optimization: TYPECASE on structure class hierarchies is implemented using
    a perfect hash.
  • optimization: eliminate bound checks with relative offsets. (lp#1830314)
  • optimization: the compiler has more knowledge of how to optimize
    DIGIT-CHAR.
  • optimization: the compiler can elide intermediates for some calls to
    APPLY, CONCATENATE and MAKE-ARRAY with arguments that are freshly-consed
    modifications of existing sequences.
  • optimization: (LOOP FOR X IN (REVERSE LIST) ...) is now faster and conses
    less.
  • optimization: (LOOP ... APPEND ...) is more compact, and does less work if
    appending NIL.
  • optimization: type tests of various array types are faster and shorter.

SBCL 2.4.0

28 Dec 14:05
Compare
Choose a tag to compare
  • minor incompatible change: *COMPILE-VERBOSE* and *LOAD-VERBOSE* are bound
    to NIL when the system is started with the --script command-line argument.
    (reported by Hraban Luyat, thanks to Nicolas Martyanoff)
  • minor incompatible change: when looking for its core file, the system
    checks the validity of whatever is pointed to by /proc/self/exe, and
    assesses argv[0] if /proc/self/exe is invalid. (thanks to Philipp Marek)
  • minor incompatible change: the system no longer provides type names on the
    standard (CL) symbols ARRAY-RANK, ARRAY-TOTAL-SIZE, PATHNAME-HOST,
    PATHNAME-TYPE, PATHNAME-DIRECTORY, FLOAT-RADIX or FLOAT-DIGITS.
    (lp#2045559)
  • platform support
    ** the mark-region parallel garbage collector can be enabled on arm64.
    (Thanks to Hayley Patton)
    ** fix build on modern FreeBSDs. (lp#2046966, thanks to David J. Flander)
  • bug fix: restore compiler type inference correctness on calls to REDUCE
    with :INITIAL-VALUE but no :FROM-END. (lp#2044856, reported by Patrick
    Poitras)
  • bug fix: compiler error when declaring SB-EXT:MUFFLE-CONDITIONS on an
    unknown type. (lp#2045442)
  • bug fix: the disassembler provided non-pretty output for registers in some
    cases. (lp#2046004, reported by Fedorov Alexander)
  • bug fix: the system is slightly less likely to exhaust the stack again
    when reporting a control stack exhaustion error.
  • optimization: GC write barriers are eliminated in more cases.
  • optimization: improved type derivation of iteration variables with mixed
    types.
  • optimization: remove unused initial values from LET bindings, improving
    register type selection.
  • optimization: lower EQUALP/EQUAL/EQL to EQL/EQ in FIND/MEMBER based on the
    input types.
  • optimization: better type derivation for DPB, LOGIOR.

SBCL 2.3.11

27 Nov 17:05
Compare
Choose a tag to compare
  • minor incompatible change: streams with an external-format specified with
    :REPLACEMENT will use their replacement data once per stream unit that
    causes a decoding error (rather than, in some cases, once for a sequence
    of bytes none of which is a valid character start position for that
    external-format).
  • minor incompatible change: external-format designators with unsupported or
    unrecognized options now signal an error when used.
  • enhancement: During generic function dispatch, for a generic function
    using standard- or short-method-combination, if there are no applicable
    primary methods the system will call the generic function
    SB-PCL:NO-PRIMARY-METHOD, whose default behaviour is to signal an error.
    Users may define methods on this generic function.
  • enhancement: external formats for unibyte encodings and utf-8 now support
    newline variants.
  • enhancement: character decoding and encoding errors signalled by stream or
    octet functions now provide a USE-VALUE restart for handlers to provide
    replacement input or output.
  • enhancement: READ-SEQUENCE and WRITE-SEQUENCE support user-defined
    sequences; the default implementation proceeds element-by-element, reading
    or writing single bytes or characters to or from the stream as
    appropriate.
  • bug fix: OCTETS-TO-STRING using unibyte external formats with unallocated
    codepoints (e.g. iso-8859-3) correctly signal or use replacements rather
    than taking bits from the address of NIL and converting those bits to
    a character.
  • bug fix: FILE-STRING-LENGTH now returns NIL if the input datum is not
    encodable in the stream's external format.
  • bug fix: table-based multibyte external formats (EUC-JP, Shift-JIS, GBK)
    now honour a replacement character (in the external format or through
    restarts) when encoding to octets.
  • bug fix: converting from octets using the UCS-2, UCS-4 and UTF-32 external
    formats no longer reads past the end of an octet array with a non-integral
    number of two- or four-byte units.
  • bug fix: converting from octets using the UCS-2, UCS-4, UTF-16 or UTF-32
    external formats now returns a simple string, as required by the type
    declaration of OCTETS-TO-STRING.
  • bug fix: providing an invalid external format argument to OPEN or
    WITH-OPEN-FILE (or the internal MAKE-FD-STREAM) no longer leaks a file
    descriptor.
  • bug fix: SB-ROTATE-BYTE recognizes out-of-relevant-range BYTE
    specifications for integers before attempting to cons up enormous bignums
    for masking and shifting. (lp#2042937)
  • bug fix: fix type derivation on compiling SB-ROTATE-BYTE forms with
    non-zero POSITION in the byte specifier. (lp#2042775)
  • bug fix: fix multiple assembler errors when compiling MAKE-ARRAY,
    MAKE-STRING and similar with a large constant size. (lp#2037347, lp#2038744)
  • bug fix: fix internal error when compiling (SETF SBIT) with a large
    constant index. (lp#2037415)
  • bug fix: fix internal compiler error on invalid lambda list parameters in
    LABELS. (lp#2040334)
  • bug fix: fix internal compiler error when compiling some
    infinitely-recursive LABELS forms. (lp#2042704)
  • bug fix: fix internal compiler error when attempting to inline a jump to a
    label that has been deleted. (lp#2043262)
  • bug fix: FILL-POINTER should never be made to go negative. (lp#2042452)
  • optimization: external formats with :REPLACEMENT no longer bind handlers
    for coding errors around conversion functions, and so should cons less and
    be faster.
  • optimization: when the :EXTERNAL-FORMAT argument to STRING-TO-OCTETS or
    OCTETS-TO-STRING is a compile-time constant, the external format is
    resolved at load time rather than on each call.
  • optimization: the compiler is able to constrain the types of inputs to
    some functions given a derived or asserted type of the function's return
    value.
  • optimization: the compiler performs fewer redundant type checks in ASSOC,
    GETF and similar functions.