gluon v0.13.0 Release Notes

Release Date: 2019-10-27 // over 4 years ago
  • 🐎 Performance

    • Only do one hash lookup when creating a Symbol (a709c712)
    • Shrink Type's size to 48 bytes (from 64) (178180f8)
    • πŸ›  Avoid RefCell in Fixed* structurs (-1%) (de32dbd6)
    • Avoid recursion in implicits.rs (89eb836a)
    • Only mark types with unbound generics as HAS_GENERICS (3d835a8a)
    • Avoid computing the plain name in name_eq (-3%) (a7ac9f80)
    • check:
      • Use RefCell::get_mut when possible (12441438)
      • Remove redundant operations in union (f3d4203a)
      • No need to lookup the type again before querying the level (5e4efe37)
      • Remove some branches in the occurs checkΒ¨ (03e7c3b4)
      • Only initialize the variable generator when it is necessary (-3%) (793b6580)
      • Only do one lookup/insertion on the implicit definition map (0ea13ff1)
      • Narrow down the implicit parititioning further (-10%) (a9c965b4)
      • Avoid looking through metadata when checking for an implicit type (4a3662e9)
      • Only add implicit fields if the binding is implicit (da861eba, breaks #)
    • ⚑️ optimize: Allocate core syntax directly into arenas (723ec4d6)
    • πŸ“œ parser:
      • Shrink the Token type and remove it's need to Drop (3016f251)
      • Simplify tokenization iterators (c7061c7b)
    • vm:
      • Add function inlining (5093137a)
      • Eliminate redundant match expressions (945fb83d)
      • Implement inter-module dead code elimination (ab1b1b80)
      • Avoid tracing global values unless we are in the root gc (-7%) (48a5313e)
      • Avoid the bounds check when fetching instructions (c2778e7f)
      • Faster updates to the stack frame (2b94a3af)
      • Cache the frame offset for the stack (-20%) (0469cb2e)
      • Copy instead of clone unrooted gc values (a0396f40)

    πŸ’₯ Breaking Changes

    • Replace Compiler with the ThreadExt trait (c16132eb, breaks #)
    • check: Only add implicit fields if the binding is implicit (da861eba, breaks #)

    πŸ› Bug Fixes

    • Don't leak implicit bindings into adjacent scopes (5681ffc5, closes #783)
    • βœ… ignore formatting in std.test due to a bug (bdccee6f)
    • rerefix formatting (31166161)
    • refix formatting (fcb7f0bb)
    • fix formatting and apply naming suggesions (6bb0d87c)
    • Make the behaviour consistent for Show Char (0ff89870)
    • Avoid infinite loops/extremely slow optimization (dc7ec72a)
    • Expand macros inside macros (5a294330)
    • βœ… Invalidate text properly so rexpect tests work (92e45081)
    • 🏁 Don't depend on ansi_term in windows to make windows 7 work (58e2a8b9, closes #777)
    • βœ… Add tests and fix the regression with clone_userdata (df078725)
    • Ensure that threads are dropped when using child threads (b9efb513)
    • check: Handle aliases better in do (770e52ea, closes #766)
    • repl: make the REPL respect --no-std (e7974706)
    • std: export missing assertions in std.test (41f4fc52)
    • vm:
      • Don't (rust) panic in string.split_at (50f937b3, closes #757)
      • Accept trailing comma in record macros (f35c0b96, closes #770)

    πŸ”‹ Features

    • Use implicit Monoids in std.foldable (295b8c3d)
    • Add a mutable string type to the ST monad (9ec946b4)
    • Allow attributes to be specified on fields inside types (fb35db51)
    • Provide std.effect.io as a mirror of std.io (66e49b37)
    • Replace Compiler with the ThreadExt trait (c16132eb, breaks #)
    • Use salsa for incremental compilation (7bc82532)
    • Add history hints and bracket highlight to the REPL (10ef8cdf)
    • Use line/column numbers in lambda names (201fdfb9)
    • codegen: Map Rust's struct enums to records in Gluon. (afb682e5)
    • repl: add --no-std option to gluon.exe (f2c1819f)
    • std:
      • add ordering assertions (3efac996)
      • add a few functions to std.test & std.effect.error (58e00431)
    • vm: Make macro errors implement PartialEq, Eq, Hash and Clone (039825ab)