Jan 04, 2023

Unison's 2022 in Review

Rebecca Mark

2022 was a year of continued growth for the Unison ecosystem. We can't cover everything that happened in the past year, but here are some of the highlights.

Unison Forall conference

This year we held our first ever Unison language conference,Unison Forall.The conference, held online, brought together Unison enthusiasts and featured eleven speakers and hundreds of attendees. You can watchrecordings of the talks online here.

Code hosting on Unison Share

In 2021, we createdUnison Shareas a hosted repository for Unison code. Unison Share renders Unison'snewly enricheddocumentation format, provides click-through links to definitions, and allows you to browse a codebase graphically. But before this year we were still relying on the Git protocol and external hosting services for warehousing and exchanging code. This wasn’t a great fit because Unison’s codebase format is, after all, not text-based. We knew we needed a Unison-specific solution for sharing code, so in 2022 we added Unison-native codebase hosting to Unison Share and made it possible topullandpushcode directly to remotely hosted codebases. This opens the door to more features for collaboration and library discovery in 2023.

Unison Cloud in beta testing

We’ve startedunison.cloudprivate beta testing and will be opening it up to more people in the coming months. Unison Cloud has been steadily moving from the dream of writing cloud-native Unison code to a reality.

If you are interested in being a part of the Cloud beta-test, you shouldread about our Trailblazers program and fill out the attached form link.
Film still from Kubrick's 2001: A Space Odyssey, showing a monolith surrounded by early hominids.
Actual photo of us learning to use the Unison Cloud and preparing for the forthcoming breakthroughs in technology and science. Image courtesy of Stanley Kubrick.

Team news

This year we welcomed Travis Staton as a new team member. He has been using his considerable Haskell expertise in the service of adding features to the Unison Codebase Manager and the Unison language itself. We're very glad you're here, Travis!

While technically a 2023 addition, Unison has also recently welcomed distributed systems expert Fabio Labella to the team. You've probably seen Fabio helping answer questions in the Unison community slack, or maybe you've run into him sharing his knowledge of functional programming. Welcome, Fabio!

The Unison team is distributed, which means we mostly interface with each other through various screens, but in 2022 we were able to meet in person for the first time! We held a team retreat in Boston, where we worked on planning and strategy. We also had a great time cooking together and exploring the city!

Photo of the Unison team outside, arranged in two rows.
The Unison team when we briefly materialized in corporeal space.

Native compilation progress

The Unison language currently runs through an interpreter written in Haskell, but as of theM4e releaseof the UCM, the Unison language contains an initial implementation of aChez Schemebackend capable of producing native executables. This represents a major performance improvement for the Unison runtime, with some benchmarks indicating that running native Unison code is hundreds of times faster. The native compilation feature-set is still being fleshed out, but the command to run yourmainfunction with this backend looks like:

.> run.native myMainFunction

You can read more about native compilation and these preliminary results in compiler engineer Dan Doel's own words inthis blog post.

Language Server Protocol implementation

This year we added an implementation of theLanguage Server Protocolfor Unison. This means that Unison now has first-class support in many popular editors and IDEs. For those of us whose workflow is heavily indebted to IDE features like auto-completion, seeing types on hover, or having errors highlighted in the editor, this is a huge win for the developer experience. If you haven't tried it yet, you can read more about how to set up your editor with the LSP in theUnison language server project documentation.

LSP support is in active development, and it seems like every weekthere's a new feature or improvementto discover.

Base library development

In 2022 we continued to expand thebase library.Newcomers and experienced programmers alike will benefit from the increased documentation coverage for the existing standard lib and new types and functions.

A few of the additions to the base library include:

Ecosystem growth

This year saw a number of new projects and libraries built with Unison. Here are a few of our favorites:

Folks are finding interesting applications for Unison and exploring new ways to use the language. If you have a project or idea that you're excited about, join us in the#libraries channel in the Unison slackand let's talk about it!

Unison website revamp

A year ago the Unison website looked very different. In early 2022 we deployed a new, revamped website written almost entirely in Unison's ownbase.Docformat. The website being Unison code means that it's easy to keep code samples up to date with the latest syntax and features. (So much so that sometimes the code examples outpace what's written, in which case you should message us in the#documentation channel in Slackand we'll fix it!)

Community events

In 2022 we wanted to make sure that the Unison team was connected to writing Unison code with you all. We've been live-streaming and collaborating with the community on Wednesdays so that folks can ask questions, follow along, and learn from each other. Most of all we wanted to humanize the process of writing Unison code, messing things up, and trying new things.

This December we capped off the year with a number of folks participating inAdvent of Code.Advent of Code brought new people to Unison and inspired knowledge sharing and general conviviality. We collected highlights of solutions and write ups inthis blog post.

Learning Unison with Exercism

We want it to be easy to learn and discover Unison. For that reason we partnered withExercismto develop our ownUnison language trackin 2022. We chose Exercism because of their existing network of programming languages, because it's free, and because of their focus on creating a welcoming learning environment. This means that you can now learn Unison by solving programming problems in the browser or via the command line.

Unison "projects" moves from idea to implementation

Unison "projects" introduces an additional abstraction to the Unison codebase that better describes a unit of Unison code as a "library" or "application" with associated properties like versions, issues, and dependencies. Our existing concept of namespaces was a bit too granular to describe these concepts, so we spent a lot of time and care thinking about what a Unison-specific library and dependency system should look like.

In the next iteration of Unison Share, when you click on a library, you'll see an overview of the project which looks something like this:

A mock up of the Unison projects overview UI, showing library name, version, and summary.
A mock-up of a project overview page, showing the name of an example library, its version, the people who contribute, and basic stats.

From the project overview, you might choose to explore the code of the library, which will open a page displaying the current branch, number of releases, and issues, and readme.

A mock up of project code view screen, showing readme, and a header containing releases, issues, merge requests and current branch.
A mock-up of a project's code exploration entry point, with a header containing releases, issues, merge requests and current branch.

If you missed Simon introducing the projects concept at Unison Forall, you can watch ithere.

Work is underway to bring this set of features to the Unison community. We're excited to share more about it in 2023!

UCM developer experience improvements

The UCM itself received many usability improvements in 2022. One major ergonomics shift for users of the UCM has been the change from globally available namespaces to scoped namespaces. A namespace can now reference the terms inside its child namespaces, but not the terms in its parent or sibling namespaces. This change makes it simpler to split your codebase into different libraries and applications, without unwanted references across namespaces.

Other notable additions include:

  • Theadd.runcommand which adds the results of the lastrunto the codebase as a term
  • Snappier startup time for the UCM and general performance improvements
  • Support for thedokeyword as syntax for delayed computations

Be a part of Unison in 2023

We're excited to see what the year ahead has in store for Unison. If you've been following along with Unison for a while, thank you, we're glad you're here; and if you're new,2023 is a great time to get started writing Unison. 😃