Summarized changes
- New features:
- there is now a defined interface for defining foreign callable functions, which can be used for passing callbacks to foreign functions or for calling Lisp code from the foreign world as a shared library (preliminary support). See the revised manual section "Calling into Lisp From C" for more details.
- Incompatibles changes:
- the list form of the FUNCTION type specifier does not allow * as any argument type, but does allow * as a placeholder for wholly unspecified arguments when specifying the value(s) type.
- the default (Lisp) toplevel option parser throws an error if it encounters an option which was intended to be used and removed by the C runtime.
- the experimental DEFCAS macro has been removed.
- finalizing classes with slots with duplicate symbol-names will only emit a warning if either slot name is an exported symbol.
- simd-pack without a specific element-type is no longer treated as containing integers. A type must be supplied for VOPs to work on such values.
- dynamic-extent arrays specialized on character and numeric types and created without either :INITIAL-ELEMENT or :INITIAL-CONTENTS will reflect previous contents of the stack instead of #\null (or 0) in all elements.
- SB-SPROF:START-PROFILING no longer silently does nothing if the clock is already running. It instead stop and restarts with the newly provided options, and warns.
- the experimental DEFINE-CAS-EXPANDER macro has been removed.
- the hooks in *INIT-HOOKS* are called before starting the finalizer or other non-user threads.
- the system attempts to refer to the supplied pathname in compiler diagnostics, if relevant, rather than the truename.
- COMPILE-FILE does not merge the input file's pathname-directory into the output path if :OUTPUT-FILE was specified and has a directory that is not :UNSPECIFIC.
- the backend instruction encoders for movzx and for string opcodes have changed their semantics.
- support for the :SB-SAFEPOINT-STRICTLY, :SB-THRUPTION, and :SB-WTIMER build features has been removed
- Bugfixes:
- accept three operands for vshufpd.
- a compiler error when attempting to compile a call to AREF with too many dimensions.
- allow use of macros with improper argument list.
- COERCE no longer attempts to guess what the user meant if they provide a type specifier of a union of types other than STRING.
- compiler error resulting from attempting to zero a memory location with xor.
- compiler notes are no longer emitted when compiling FORMATTER forms, including when implicitly triggered on a constant string argument to FORMAT.
- derivation of the result type from subtraction sometimes erroneously excluded zero.
- EQUALP hash tables whose keys contain arrays containing floats should behave correctly.
- fix a compiler crash in type derivation of LOGTEST.
- fix a compiler failure when a declared function type contains a literal structure with a valid MAKE-LOAD-FORM method.
- fix OPEN-STREAM-P on streams closed by saving a core.
- FTRUNCATE and similar functions are now more careful about deriving facts about the sign of zero they might return.
- harmonize the behaviour of SLOT-BOUNDP on non-standard-objects between the various ways in which it can be called.
- INTEGER-DECODE-FLOAT was computing the wrong answer for denormal double floats.
- fix instruction encoding for TEST on RIP-relative addresses.
- loading all-1s into an AVX2 register no longer causes an error.
- print a single trailing zero after the decimal point for FORMAT ~E if there are no digits remaining to be printed and the width allows it.
- RANDOM on a floating point argument now does not cons.
- RANDOM on floats returns values strictly less than the float argument.
- reduce the number of places where the system permissively accepts the symbol * as a type specifier where it should not be accepted.
- remove a spurious warning from COERCE.
- remove a warning from inlining SET-EXCLUSIVE-OR.
- structures and conditions are now TYPEP all classes in the class precedence list of their class.
- the code-walker used by the system's implementation of CLOS can handle defuns declared inline.
- fix a bug in zeroing YMM registers.
- fix instruction definitions for SSE blend and shuffle vector instructions.
- handle heap corruption exceptions in our exception handler on win64.
- improve exception handling on 64-bit Windows.
- improvements to use of popcount
- improve the test for whether pages need to be committed on Windows.
- improve WAIT-UNTIL-FD-USABLE on Windows, reducing busy-looping.
- release space back to the Operating System on Windows.
- the debugger is better able to display SIMD packs.
- work around address-space randomization causing instability on new versions of MinGW.
- x86-64 machine code emitter crash when attempting to assemble some vector instructions.
- Optimization:
- EQUALP on specialized vectors and arrays is faster.
- support routines for EQUALP hash tables generate less garbage.
- extended loops updating iteration variables with THEN can perform specialized arithmetic for those updates.
- in some cases, the jump table resulting from a compilation of TYPECASE is simpler.
- IF BOUNDP followed by SYMBOL-VALUE can elide some memory loads and tests.
- FBOUNDP on a constant symbol is now faster.
- file compilation now produces smaller fasls for files which reference package literals.
- derive the type of calls to FLOAT-SIGN.
- arg-count mismatches in self-calls in defmethod are reported.
- the SB-CLTL2 contrib now returns type information for generated structure accessors.
- the block-compiler is more robust to files with intermingled compile-time and load-time effects. The semantics of the block-compiler remain not-entirely ANSI compatible.
- (CAS SAP-REF-<x>) and CAS on alien integers is implemented on ppc64 and x86-64, working towards fixing #1894057
- add support for vshuf* AVX2 instructions.
- (SETF SBIT) is faster on x86-64.
- code generation is improved for modular arithmetic involving signed operations.
- the type of (LOOP ... COLLECT ...), and the type of COLLECT INTO variables, is derived as LIST.
- new contrib module sb-graph producing graphical visualizations of Intermediate Representations of SBCL compilation data structures.
- microoptimizations in multiple type-checking routines