WebAssembly, abbreviated as wasm, is a World Wide Web standard for application development. It is designed to complement JavaScript with superior performance. The standard consists of bytecode, its textual representation, and a runtime environment in a JavaScript-compatible sandbox. It can be run in a web browser and outside of it. WebAssembly is standardized as part of the World Wide Web Consortium.
Since WebAssembly only specifies a low-level language, the bytecode is usually produced by compiling a higher-level language. Among the first languages supported in Rust with the project/module (crate) wasm-bindgen as well as C and C++, compiled with Emscripten (based on LLVM). Many other programming languages now have a WebAssembly compiler, including C#, Go, Java, Lua, Python, or Ruby. Web browsers compile the wasm bytecode into the machine language of the host they are running on before executing it.
The project is supported by all major browser engine developers, ie Mozilla, Microsoft, Google and Apple.
Since March 2017, version 1 has been delivered by default with Chrome, Firefox, Edge and Webkit. The standard was officially established on December 5, 2019. Other functions have been standardized individually and are under development or already included in some implementations.
---
Development of WebAssembly code
The development of webassembly code is possible in several programming languages, for other languages there are runtime systems such as WebAssembly. In addition to the byte code (wasm), there is a text form (wat) from which the byte code can be generated directly using the wat2wasm command.
In addition, the programming languages C and C++ are supported. The Emscripten tool can compile almost any C and C++ source code into a WebAssembly module. In addition, the necessary JavaScript code for loading and executing this module and an HTML document for display is generated. The development environment Unity also uses Emscripten to generate WebAssembly code (e.g. for browser games).
Also, Rust and Go compile to WebAssembly natively. According to polls, Rust is the most popular language for Wasm applications. The JWebAssembly project translates Java bytecode to WebAssembly (experimental). However, there is also a proprietary compiler for Java called CheerpJ.
AssemblyScript is a variant of the JavaScript-based TypeScript that was specially developed for WebAssembly. It also allows the integration of low-level functions.
With the Blazor framework (for WebAssembly), a runtime system (IL interpreter) is loaded as a WebAssembly, so that the programming languages C# and F# can ultimately be used in the browser. Starting with .NET 6, translation to WebAssembly bytecode can be done at development time (AOT), making the app larger. Python can be used in the browser via the pyodide project (experimental).
Use outside of the browser
In the future, WebAssembly will also be able to be used outside of browsers via a new interface called WASI. The wasmtime command starts a stand-alone runtime environment for WebAssembly. The runtime environment for WebAssembly can also be embedded in different languages. There is also a micro runtime with reduced memory usage.
With Wasmer there is also another implementation of a runtime environment that was released in January 2021 with version 1.0.0 (and thus classifies itself as stable).