changelog
Nov 14, 2024

UCM version 0.5.28

Rebecca Mark

🐣 New features

Apple Silicon builds

We now offer native builds for Apple Silicon (M1/M2) macOS architectures. To install Unison on an Apple Silicon machine, you no longer need to use Rosetta emulation.

Homebrew installs will automatically detect your architecture and install the correct version of Unison, or you can manually download the Apple Silicon build:

mkdir -p unisonlanguage && cd unisonlanguage
  curl -L https://github.com/unisonweb/unison/releases/latest/download/ucm-macos-arm64.tar.gz \
    | tar -xz
  ./ucm

Enhanced edit command

The edit workflow has been refined:

It used to be that entering edit aTerm would bring the term into your scratch file, appending a fold --- to the term to give you a fresh workspace to make your changes. However, if you were working on a series of definitions that were still in-flight, you'd have to scroll down to remove the fold to continue working. This was a bit cumbersome since most of us work iteratively on large problem spaces, adding definitions as we go.

The new behavior is as follows:

  • edit will add definitions to your current fold by default. The desired edit targets will simply be put at the top of your working file.
  • edit.new will create a new fold if you want a fresh section for your changes.

🛠️ UX improvements and speed-ups

    • Improved branch sorting with fzf
      • We've fine-tuned branch navigation: now, the fzf search prioritizes branches in your current project, sorting them to the bottom for easier access. This should help you find the branches you’re actively working on more efficiently.
    • Pure top-level definitions are cached for faster runtime performance
      • Before this change, all pure top-level definitions were evaluated at every call site, which was unnecessary overhead. Now we detect these using type info from the codebase. For example, a top-level definition performing IO wouldn't be cached, but one which just returns a large string can safely be cached, and references to the definition will be replaced with the cached value. This should result in a noticeable speedup for many workloads.
    • Fix for namespace and use clauses in scratch files
      • We've resolved an issue where a namespace directive followed by a use clause in scratch files would not parse in Unison. Now, these clauses will be correctly applied to the definitions in your scratch file. namespace will open up a block which adds a prefix to all the definitions that follow it, and use will import definitions from other namespaces for use in your program.

🔮 Coming soon: mergetool support

One of the most anticipated features on the horizon is mergetool support. This will simplify resolving merge conflicts within Unison, offering a better experience when working with branches and collaborating with others. Stay tuned for more updates.

Full release notes here