WebAssembly
A binary instruction format for a stack-based virtual machine
# Distributed Invocation
We can imagine WASM modules as functions that execute some behaviour. If we content address it, we now have a consistent way of referring to the same computation. We can imagine a particular WASM module call with a set of parameters as a suspended closure that is deterministic1.
Then, if we know we’ve ran that module with a specific set of parameters and have a receipt that it produced a certain result, we can be sure that we can just use the result instead of doing the computation again. Memoization at global scale!
Once we have a way for compute to be orchestrated at a global scale (e.g. IPVM through Homestar), this means we pretty much have a global mapping from source code + arguments to result.
This actually gives us superlinear results as we increase concurrency (opposite of what the Universal Scaling Law says! BitTorrent does this too)
# Nondeterminism
Nondeterministic execution can only occur in a small number of well-defined cases (described below) and, in those cases, the implementation may select from a limited set of possible behaviors.
See a list of nondeterministic behaviours in WASM
-
See point on nondeterminism ↩︎