Release v0.5.0
Changes
Lunatic was completely re-written from scratch. Now it's built on top of Wasmtime's async
support and doesn't contain any unsafe code.
The architecture of the runtime was changed to closer mirror Erlang's features. Processes now only contain one mailbox and the channels API was removed. Processes can also be linked together to propagate failure, so that supervisor like tools can be built on top of them.
Environments
Environments allow you to specify some characteristics of the execution, like how much memory or CPU processes can use. They can also define host function namespaces that are allowed to be called. Processes that are spawned into an environment inherit theses characteristics, allowing you to dynamically create execution contexts for new processes.
Dynamic module loading
WebAssembly modules can be loaded from other WebAssembly modules during runtime. Combined together with Environments
this can be used to load untrusted code and run it inside a sandbox.
Libraries
The Rust library was also completely re-written to support the new abstractions. Check out the new docs!
The AssemblyScript update is still WIP.
Next steps
The next part is going to be adding support for distributed workloads. We should be able to build on top of the Environment
abstraction and say "create a new environment but on this other machine". All processes spawned into this environment would be spawned onto a different node. All other parts like message passing and linking should stay transparent to processes, no matter on what machine they run.