sbcl-2.1.11 released

Christophe Rhodes <[email protected]> Tue, 30 Nov 2021 18:17:05 +0000
Newsgroups gmane.lisp.steel-bank.announce
Message-ID <87lf15pkym.fsf@shin>
Dear all,

I've released sbcl-2.1.11 and uploaded sources to SourceForge; binaries
for various platforms will hopefully trickle in over the next few days;
a list of significant changes in this release is appended below.

A couple of things from this month's development to draw your attention
to: firstly, the stronger assignment-conversion compiler transformations
will fire for example in common patterns in the implementation of state
machines using LABELS or complex iteration using tail-recursion.  As a
specific example, consider

  (defun foo (v)
    (flet ((f (x) ...))
      (bar (if (read) (f v) (f (+ v v))))))

Because the two calls to F share a return point (loosely, a
continuation), F can be fully inlined without increasing the code size.
For more details on this general class of optimization, read about
"contification" in the compiler literature.  This implementation has
raised the stack use in the compiler a little, which caused at least one
application to fail to compile unexpectedly; if that happens, the
--control-stack-size runtime argument can be used to increase the stack
size from its default.  We'll be looking at reducing the stack usage of
the compiler in the next development cycle.

Secondly, the system on x86-64 and ppc64 uses software card marking
rather than page protection and memory management to track writes of
younger data to older memory (needed to implement the generational
garbage collector).  One effect of this should be to remove the large
number of mappings needed to track the different protection states by
the kernel, and in particular there should no longer be any need on
these platforms to raise the value of /proc/sys/vm/max_map_count.

Best wishes,

Christophe

changes in sbcl-2.1.11 relative to sbcl-2.1.10:
  * minor incompatible change: *COMPILE-PRINT* now defaults to NIL.  T gives
    the old behavior of echoing top level forms. Users who want to see a
    report of the phases of compilation can use *COMPILE-PROGRESS* and the
    corresponding COMPILE-FILE :PROGRESS argument.
  * optimization: The compiler assignment-converts functions much more
    aggressively; local or non-entry block-compiled functions
    which always return to the same place are automatically converted into the
    equivalent loop or goto control structures.
  * enhancement: on x86-64 and ppc64 platforms, the system uses inline
    instructions rather than page protection to implement a store barrier for
    the garbage collector.
  * enhancement: improved reporting of code deletion notes.
  * platform support:
    ** unbound-variable restarts for amd64 are now supported.
    ** bug fix: single-floats to foreign functions on 32-bit ARMel.
       (lp#1950080, reported by Sebastien Villemot)
    ** bug fix: opening files with names containing non-ASCII characters on
       Windows works better.  (reported by Nikolay)
    ** bug fix: use fp_xsave to access the floating point flags and control
       word in Haiku signal contexts.  (Thanks to Al Hoang)
    ** bug fix: complex single-float support on riscv64.
    ** optimization: support for accessing elements of &rest args directly on
       ppc64, mips, riscv.
    ** optimization: parse a /proc file rather than executing uname for
       SOFTWARE-VERSION on Linux
  * bug fix: fix crash from SB-COVER:RESET-COVERAGE.  (lp#1950059, reported by
    Gregory Czerniak)