WebAssembly (wasm) is a modern low level language (mimicking assembly code, but independent of a machine) intended for execution on a virtual machine. It is represented in one of the three common forms. Virtual machine accepts the bytecode version. The corresponding assembly like representation is also used where the commands are given the names as usual. The third is lisp-like bracketed notation, the so called S-expression representation (which is complemented by a little bit of additional information not explicit in assembly like representation). It is optimized for small compiling time and near native execution time, at least when implemented on a virtual machine on one of major computer architectures (like 86 series). It is created as a new VM standard for web browsers, backed by major internet companies; it is also used or planned on a number of blockchain projects, most notably Parity substrate. On web browsers it is highly interoperable with JavaScript.
Lin Clark, Creating a WebAssembly module instance with JavaScript, hacks.mozilla.org/2017/07, Memory in WebAssembly (and why it’s safer than you think)hacks, WebAssembly table imports… what are they?hacks
To employ wasm in web browsers one needs to provide some connection to the real world, which is usually via interface to javascript APIs. The most used is the interface wasm-bindgen
Alex Crichton, JavaScript to Rust and back again: A wasm-bindgen tale, hacks.mozilla.org
One can try build small wasm projects entirely online at webassembly.studio.
Rust language has small runtime, which is desirable in common applications of WebAssembly. Thus Rust commonly compiles either to native code or to wasm.
General support for wasm outside of browsers is not yet standardized. One has to complement sandboxed wasm with some system calls to have reasonable functionality. WASI is a generic term for the wasm system interface (through APIs).
Lin Clark, Standardizing WASI: A system interface to run WebAssembly outside the web2019/03; WebAssembly’s post-MVP future: A cartoon skill tree2018/10)
Lin Clark, Till Schneidereit, Bringing WebAssembly outside the web with WASI, yt
Michael Yuan, The state of WASI support in Rust and WebAssembly toolchain, Dec 2020 yt
wasmer is a standalone for wasm applications, see github, wasmer.io, this podcast of S. Akbary and article WebAssembly & CloudABI, Medium
wasCC.dev – A dynamic, elastically scalable WebAssembly host runtime for securely connecting actors and capability providers
oasis labsdocs whitepaper: Raymond Cheng, Fan Zhang, Jernej Kos, Warren He, Nicholas Hynes, Noah Johnson, Ari Juels, Andrew Miller, Dawn Song, Ekiden: A platform for confidentiality-preserving, trustworthy, and performant smart contract executionarxiv/1804.05141; Blockchain-flavored WASI, medium
perlin is a DAG-based blockchain (wavelet whitepaper pdf) using Rust smart contracts deployed on wasm virtual machine
Efficiency of wasm and its standardization and programming tools support make wasm VM ideal for distributed ledger applications. Ethereum flavoured version of wasm VM specification is at github/ewasm, see also github/ewasm/design. eWasm has a testnet. According to article ewasm explained,
The ewasm specification consists of a subset of WebAssembly components suitable for Ethereum’s needs, namely determinism and relevant features. It also includes a number of system smart contracts that provide access to Ethereum platform features.
A modification of TrueBit is being developed by FluenceLabs: fluence.network, github/fluence, fluence.dev, docsrust-sdk; A. Demidko, M. Voronov, A. Pyshnenko (Fluence Labs) Fluence core: an efficient trustless computation platform (whitepaper), github/pdf
J. Teutsch et al. Retrofitting a two-way peg between blockchains, arxiv/1908.03999
Jason Teutsch, Sami Mäkelä, Surya Bakshi, Bootstrapping a stable computation token, arxiv/1908.02946
Last revised on November 2, 2021 at 23:38:34.
See the history of this page for a list of all contributions to it.