news
Jan 09, 2019

New Years Update 2019

Rúnar Bjarnason

Hey everyone, Rúnar here. It's been a while since our last update. We've been busy.

Spreading the word about Unison

  • The video ofmy talk from Lambda World Seattlehas been published to YouTube.
  • Paul's talkat Scale by the Bayis also up.
  • I gave a talk on Unison at Øredev in Malmö, and also at the Reykjavík Functional Programming meetup.A video is available of the latter.
  • Arya did the hallway track at NeurIPS and got a sense of how researchers and industry are (or aren't) managing their distributed machine learning applications. This seems a good candidate for a Unison library.
  • We created a number of GitHub issues and marked some of them as "good first issue" and "help wanted". If you've been thinking about contributing to Unison, this might be a good place to start. We'll add to these issues as we think of more ways contributors can help. Go tohttps://github.com/unisonweb/unison/issuesto look at the list.

Codebase editor progress

Meanwhile, we're making steady progress on the implementation, working mostly on the Unison codebase editor. Here's what you get now when you start upunison:

Starting the codebase editor

From here, you can explore and manipulate your Unison codebase. You'll note that Unison first creates abranchcalled "master". A branch is really two things:

  1. A collection of names for the hashes in your codebase.
  2. A collection of edits to the codebase.

Right from the start, the master branch contains a number of predefined names for builtins. You can query the contents of the codebase using fuzzy matching:

ls drp

The codebase knows the type of every definition, and later on we'll add the ability to query by type.

Oh, and we have tab completion already.

Unison is watching

Instead of having a REPL in the traditional sense, Unison is watching for changes to*.ufiles under the directory in which it's started. I'll open a file calledscratch.uand type a Unison definition into it:

replicate

If I save the file, my Unison session immediately shows this:

saved scratch.u

Note that it says it's "evaluating any watch expressions". I can add a watch expression just by adding a line that starts with>to my file.

replicate 3 lambda

If I save again, Unison comes back with the evaluated result of this expression:

eval replicate 3 lambda

Adding and viewing definitions

I'm happy with that, so I'll ask Unison to addreplicateto my codebase:

unison add

If I had put more (well typed) definitions in my file, Unison would have happily added those too.

Now thatreplicateis in my codebase, I can actually throw away the scratch file. If I need the definition ofreplicateagain, I can always ask Unison for it:

view replicate

Git-friendly codebase structure

We really want to allow Unison developers to use good tools they're already familiar with like their favourite text editor, and Git. To that end, we've made it so that the codebase is just a bunch of (binary) files that can be versioned with Git.

Under the bonnet, Unison creates a directory called.unisonwhich contains the codebase. There are three subdirectories here (currently); one for branches, one for type declarations, and one for term definitions. Undertypesandterms,we have one directory per hash which contains the compiled definition as well as any metadata.

Unison codebase structure

Since everything is indexed by hash, you'll never actually change any file, so Git merge conflicts should never happen.

Seethe Codebase Editor design documentfor more information.

More features

We're currently adding more features to the Codebase Editor. Right now we're making it easier to edit existing definitions that have a lot of dependencies, through a kind of structured refactoring session.

Here's the feature set we have so far:

Unison help