Unison
a new distributed programming language
video of this talk
Paul Chiusano Β· @pchiusano
Unison Computing Β· a public benefit corp
Joint work with: Arya Irani, RΓΊnar Bjarnason, awesome open source contributors π
Open source, MIT licensed
Statically-typed, functional
Influences: Haskell, Erlang, Frank..
Currently alpha testing 1st release!!
The goal: π¦ π π
... by rethinking anything and everything about programming
factorial n = product (range 1 (n+1))
blah n = product (range 1 (n+1))
blah2 z = product (range 1 (z+1))Content-addressed code
#j1ejqucsrc/
math.u
list.u.unison/
j1ejquc/
ast.ub
names/
factorial
blah
8h7jbs5/
factorial n = product (range 1 (n + 1))
factorial =
n -> #8h7jbs5 (#h9bwx9q 1 (#e2i3biw n 1))
factorial =
$arg1 -> #8h7jbs5 (#h9bwx9q 1 (#e2i3biw $arg1 1))Content-addressed code
.unison/
j1ejquc/
ast.ub
names/
factorial
blah
8h7jbs5/
Unlike names, hashes uniquely identify
No builds, easy renames, test caching...
Benefits
Easy typed, durable storage
No dependency conflicts
Programs that deploy themselves + describe whole elastic distributed systems
Easy renames
.unison/
j1ejquc/
ast.ub
names/
factorial
.unison/
j1ejquc/
ast.ub
names/
transmogrifyπ½Β rename factorial transmogrify
... and this breaks no one π¦ π π
myFactorialTest = expect (factorial 5 == 120)No builds
.unison/
j1ejquc/
ast.ub
type.ub
names/factorial
... and no one else needs to build it either!! π¦ π π
myFactorialTest = expect (factorial 5 == 120)Caching test results
.unison/
30hbxzj/
ast.ub
type.ub
evaluated.ub
names/myFactorialTestDefinition for a hash never changes
Append-only π π¦
Cache never invalidated
So we can cache all kinds of info

Eliminating dependency conflicts
A (v1)
C
B
D
Employee, giveRaise ...
A (v2)
Employee, giveRaise ...
C
When defs "compete for a name"
What are conflicts, really?
A totally artificial problem
alice.smtp.Email and bob.web.Email
OK to allow N versions of "same" lib
No builds, easy renames, test caching...
Benefits
Easy typed, durable storageΒ βοΈ
No dependency conflicts
1 OS process
π
List Employee
Bytes, JSON,SQL
π
v2
Bytes, JSON,SQL
β±
v1
List Employee
No builds, easy renames, test caching...
Benefits
Easy typed, durable storage
No dependency conflicts
Programs that deploy themselves + describe whole elastic distributed systems βοΈ
Alice
Bob
"evaluate: #8qkdu9x 7"
"missing dep: #8qkdu9x"
"here's definition #8qkdu9x: ..."
"result of factorial 7: 5040"
πββοΈ
"evaluate: factorial 7"
Alice
n-382948
"evaluate: factorial 7"
"missing dep: #8qkdu9x"
"here's definition #8qkdu9x: ..."
"result of factorial 7: 5040"
πββοΈ
factorialAt : Node ->{Remote} Nat
factorialAt bob =
r1 = at bob '(factorial 7)
r2 = at spawn '(factorial 8)
force r1 + force r2dsort : (a -> a -> Boolean) -> [a] ->{Remote} [a]
dsort lte as =
if size as < 2 then as
else case halve as of (left, right) ->
resL = at spawn '(dsort lte left)
resR = at spawn '(dsort lte right)
merge lte (force resL) (force resR)Distributed programming as a library
ability Remote where
at : Node -> '{Remote} a -> Future a
force : Future a -> a
spawn : NodeRemote.runLocal '(dsort hugeDataset)
Cloud.usEast.run '(dsort hugeDataset)Batch computing (local state only)
ability Remote where
at : Node -> '{Remote} a -> Future a
force : Future a -> a
spawn : NodeWhat about stateful elastic services?
unisonweb.org, @unisonweb
Thanks!!
Get together at The Sliced Pint @6pm tonight
#unison in Strange Loop slack
π π contributors: Arya Irani, RΓΊnar Bjarnason, Chris Gibbs, Noah Haasis, Francis De Brabandere, Matt Dziuban, Ben Fradet, Billy Kaplan, Tomas Mikula, William Carroll, Scott Christopher, Alex Zolotko, Ian Denhardt, Mitchell Rosen, Ian Jeffries, Elliot Wu
Β
Unison: Strange Loop 2019
By Paul Chiusano
Unison: Strange Loop 2019
Presentation on Unison from Strange Loop 2019
- 3,979