Skip to content

Extempore v0.11.0

Latest

Choose a tag to compare

@benswift benswift released this 10 Sep 00:49

A robustness release driven by a full-codebase review. Nothing changes about the
language, but a lot changes underneath it. The full notes are in
CHANGELOG.md.

Highlights

  • A security fix worth upgrading for — a running Extempore turned each
    incoming OSC message into Scheme source text with its address interpolated
    unescaped, so any host that could reach the OSC server could evaluate
    arbitrary code in the session. Addresses are now validated and strings escaped
    by construction.
  • Errors stop disappearingsys:load used to swallow every error in a
    file it loaded, so a broken library could AOT-compile "successfully". It now
    reports each failing form and returns #f, which surfaced (and fixed) five
    examples that had quietly stopped working.
  • Memory safety through the C++ runtime — every Scheme FFI primitive is
    registered with its real name and arity, so a wrong call is a Scheme error
    rather than a segfault, and the zone allocator, OSC send path, IFF chunk
    scanner and a dozen fixed buffers no longer write past their ends.
  • Relocatable installs — the binary looks for runtime/, libs/ and
    examples/ beside itself, so an unzipped release runs from any working
    directory and can be moved wherever you like.
  • Less vendored code — the 2019 Networking TS snapshot and PCRE 8.38 are
    gone; sockets go through one small shim on every platform and regular
    expressions use PCRE2 10.48.

Before you upgrade

  • pcg32_boundedrand now matches reference PCG32, so seeded streams differ from
    earlier releases.
  • io:osc:set-integer-64bit? and io:osc:send-from-server-socket? are removed.
  • topclock no longer starts its network loop at load when
    *topclock-autostart* is #f.
  • sys:directory-list returns bare names on every platform.

Installing

Download the archive for your platform below and unzip it. The folder is
self-contained — keep it together, but put it wherever you like — and
extempore (extempore.exe on Windows) runs from any working directory.

On macOS the binaries aren't signed with an Apple Developer ID, so first launch
is refused until you clear the quarantine flag:

xattr -dr com.apple.quarantine /path/to/extempore

Questions and bug reports are welcome on the
mailing list or as
an issue.