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 to
pushcode 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.
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 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 your
mainfunction 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:
PatternAPI for regex-like text matching and capturing
data.Mapimplementations specific for containing
- New mutable and immutable
Instanttypes for working with blocks of time, plus types like
OffsetDateTimeso you can experience the pain of managing time-zones
This year saw a number of new projects and libraries built with Unison. Here are a few of our favorites:
- A library foropticsin Unison, complete with examples and cheatsheets!
- Aredis client
- HTTP serverandclientlibraries
- A library for parsing and representing theDhall configuration language in Unison
- TheCodec libraryfor serializing and deserializing Unison values into binary formats
- Aresource libraryfor effectful provisioning and releasing of resources
- Acomplex numberlibrary
- A library fordrawing svg'sin 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 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 own
base.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!)
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:
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 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:
add.runcommand which adds the results of the last
runto the codebase as a term
- Snappier startup time for the UCM and general performance improvements
- Support for the
dokeyword 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. 😃