Skip to content

Clasp v3.0.0

Latest

Choose a tag to compare

@Bike Bike released this 18 Jun 23:47
· 1 commit to main since this release

Version 3.0.0 (LLVM15-20, 22) 2026-06-18

Added

  • Support for LLVM20 and LLVM22. LLVM21 is excluded due to API incompatibility.
  • Weak-value and weak-key-and-value hash tables, as well as an interface
    for weak-key-or-value tables, although at present they are actually
    strong tables in practice.
  • ext:macroexpand-all macroexpands a form and its subforms.
  • Arguments to bytecode functions are made available to debuggers.
  • ext:deoptimize can temporarily replace almost all native-compiled functions with a simpler bytecode version with better debuggability. ext:reoptimize restores the native version.
  • A style warning is signaled if the compiler assumes a symbol names a function and then sees it defined as a macro.
  • New interfaces for reading and evaluating code with tracked source locations: ext:with-source-tracking, ext:stream-source-location, ext:read-source, ext:augment-source, ext:eval-source, ext:compile-source.

Changed

  • Use Khazern extended for CL:LOOP
  • :output-type parameter to compile-file is replaced by :native. :native t will build a fasl with both bytecode and native versions of code. If :native is not provided, it defaults to cmp:*compile-file-native*.
  • compile can similarly be set to compile natively or to leave functions as bytecode with the cmp:*compile-native* variable.
  • Build modes are changed: :faso, :bytecode-faso, :fasoll, :fasobc, :fasl build modes are removed. Only :bytecode and the new :native can be used. :default-native is a new build flag that can be used to control whether the built Clasp will native-compile files and functions by default (i.e. it controls the default values of cmp:*compile-file-native* and cmp:*compile-native*.
  • The build procedure is completely rewritten, building Clasp's Lisp code using another Lisp implementation instead of boostrapping from the C++ Clasp.

Fixed

  • Weak pointers and weak hash tables survive snapshot save/load.
  • ext:quit can be used from any thread, not just the initial thread.
  • Quasiquoted vectors are read correctly (#1666).
  • The bytecode compiler detects malformed bindings.
  • Literal arrays with fill pointers are not dumped with excess elements.
  • setf of apply no longer has multiple evaluation problems.
  • Improve error messages for package name conflicts. Fixes #1722.
  • FASL loading is more resilient in the face of heavy file use and interruptions. Thanks @dg1sbg.
  • Writing non-base-chars into base strings by various means (e.g. replace) now signals an error instead of treating the low byte of the codepoint as a base char.
  • ext:macroexpand-all no longer allows macros to expand into tagbody tags.

Removed

  • -z/--snapshot-symbols-save command line option, occasionally used
    for snapshot debugging. You can call core:mangled-symbol-names if the
    effect is still needed.
  • FASO and other compile-file output types, other than FASL. compile-file now always produces a FASL.

Optimized

  • FASL loading batches reads more, improving load times. Thanks @dg1sbg.
  • Array copying operations like subseq and replace cons less.