Skip to content

Releases: s-expressionists/Cleavir

v2.0.0

24 Nov 18:31
Compare
Choose a tag to compare

v2.0.0 (2022-11-24)

Added

  • New block-based intermediate representation (BIR).
  • A verifier system to validate BIR objects.
  • Test-based disassembler for BIR.
  • McCLIM visualizer for BIR (contributed by @scymtym).
  • AST-to-BIR system for converting ASTs to BIR.
  • Attributes system for interesting non-type information about data.
  • Ctype system for interface with client type system.
  • Conditions system for better organization of compiler conditions.
  • Example system for demos.
  • Extensible metaevaluator for performing most optimizations on BIR (thanks @karlosz for this and more).

Changed

  • Some cleavir-env operations now take a client parameter for specialization.
  • Many (most?) AST classes have changed. See documentation for details.
  • CST-to-AST no longer accepts most primops, along with other more minor changes.
  • CST-to-AST conditions are now part of the conditions system hierarchy. Additionally, error behavior when evaluating eval-when code, macros, or compiler macros has been enhanced to signal specific encapsulation conditions.

Enhancements

  • Inlining has been generalized into contification.
  • Type inference now proceeds quickly and easily takes care of most basic, non-control-flow sensitive type check eliminations.
  • Performance of most operations on/transformations of IR has improved.

Removed

  • High-level intermediate representation (HIR). Replaced by BIR.
  • Graphviz-based IR visualizer. Replaced by the BIR disassembler and visualizer.
  • AST-to-HIR. Replaced by AST-to-BIR.
  • Many ASTs and IR instruction classes related to backend operations (e.g. fixnum-add). For now these are considered to be a client responsibility, but a future release will probably add some functionality back to Cleavir.
  • SSA conversion system; this may be restored in a later release.
  • IR-to-source back-conversion systems, which have never really been used.
  • The code walker. It's never really been a core component, and is probably better as a separate system. See, e.g., agnostic-lizard for an alternative.