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 watch recordings of the talks online here.
Code hosting on Unison Share
In 2021, we created Unison Share as a hosted repository for Unison code. Unison Share renders Unison's newly enriched documentation 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 to pull
and push
code 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 started unison.cloud private 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.
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!
Native compilation progress
The Unison language currently runs through an interpreter written in Haskell, but as of the M4e release of the UCM, the Unison language contains an initial implementation of a Chez Scheme backend 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 your main
function 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 in this blog post.
Language Server Protocol implementation
This year we added an implementation of the Language Server Protocol for 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 the Unison language server project documentation.
LSP support is in active development, and it seems like every week there's a new feature or improvement to discover.
Base library development
In 2022 we continued to expand the base 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:
- The
Pattern
API for regex-like text matching and capturing - Optimized
Set
andMap
implementations specific for containingNat
values, NatSet and NatMap - New mutable and immutable
mutable.Array
andmutable.ByteArray
collection types time.Duration
andInstant
types for working with blocks of time, plus types likeLocalDate
andOffsetDateTime
so you can experience the pain of managing time-zones
Ecosystem growth
This year saw a number of new projects and libraries built with Unison. Here are a few of our favorites:
- A library for optics in Unison, complete with examples and cheatsheets!
- A redis client
- HTTP server and client libraries
- A library for parsing and representing the Dhall configuration language in Unison
- The Codec library for serializing and deserializing Unison values into binary formats
- A resource library for effectful provisioning and releasing of resources
- A complex number library
- A library for drawing svg's in Unison
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 slack and 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 own Doc
format. 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 Slack and 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 in Advent 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 in this blog post.
Learning Unison with Exercism
We want it to be easy to learn and discover Unison. For that reason we partnered with Exercism to develop our own Unison language track in 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:
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.
If you missed Simon introducing the projects concept at Unison Forall, you can watch it here.
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:
- The
add.run
command which adds the results of the lastrun
to the codebase as a term - Snappier startup time for the UCM and general performance improvements
- Support for the
do
keyword 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. 😃