68 karma · joined February 12, 2015
If the change can’t be made automatically because it breaks stuff, then UCM guides you through propagating manually.
You’d have to do this manual propagation in any language. Unison is a little nicer about it than most languages, since it just tells you what needs an update (and will suggest an order in which to make the updates) instead of giving you type errors or test failures.
So if you want to be really sure of resource cleanup, you should use something like the `Resource` ability to acquire resources:
https://share.unison-lang.org/@runarorama/code/latest/namesp...
That said, it wouldn't be as bad as it sounds. Unison is a purely functional language, so if you don't explicitly provide the ability to e.g. do arbitrary I/O, then other nodes will not be able to send you code that does I/O. It will not type-check.
Something very much like Spark map-reduce can be implemented in ~100 lines of Unison code:
https://www.unison-lang.org/articles/distributed-datasets/
Some videos on Unison's capabilities over and above Spark:
Distributed programming overview: https://www.youtube.com/watch?v=ZhoxQGzFhV8
Collaborative data structures (CRDTs): https://www.youtube.com/watch?v=xc4V2WhGMy4
Distributed data types: https://www.youtube.com/watch?v=rOO2gtkoZ3M
Distributed global optimization with genetic algorithms: https://www.youtube.com/watch?v=qNShVqSbQJM
See also https://share.unison-lang.org/ where you can look at the base library, and some (contributed?) libraries as well.