

Version 3.0 of the WebAssembly (Wasm) standard is now complete and considered the “live” standard for Wasm. This announcement comes three years after the completion of Wasm 2.0, which had added many features like vector instructions, bulk memory operations, multiple return values, and simple reference types.
According to the Wasm W3C Community Group and Working Group, this is a substantial update compared to 2.0, and several of the features that are now available were in the works for six to eight years.
Wasm 3.0 supports 64-bit address space, meaning that memories and tables can use i64 in addition to i32 as their address space. This expands the available address space from 4 gigabytes to 16 exabytes, in theory. Hardware and use cases will now be the limiting factor, such as the web limiting 64-bit memory to 15 gigabytes. “The new flexibility is especially interesting for non-web ecosystems using Wasm, as they can support much, much larger applications and data sets now,” the working group wrote in a post.
Another new feature is the ability for a single module to declare and access multiple memories. It was previously possible for Wasm apps to use multiple memory objects at the same time, but only by declaring and accessing them in separate modules.
Wasm 3.0 also adds garbage collection. “Staying true to the spirit of Wasm as a low-level language, Wasm GC is low-level as well: a compiler targeting Wasm can declare the memory layout of its runtime data structures in terms of struct and array types, plus unboxed tagged integers, whose allocation and lifetime is then handled by Wasm. But that’s it. Everything else, such as engineering suitable representations for source-language values, including implementation details like method tables, remains the responsibility of compilers targeting Wasm,” the working group clarified.
GC was made possible because of an extension to the type system. It now supports richer forms of references, such as describing the exact shape of the referenced heap value.
Other new features in Wasm 32.0 include tail calls, exception handling, relaxed vector instructions, deterministic default behavior for instructions with non-deterministic results, and custom annotation syntax.
According to the working group, these new features provide Wasm with better support for compiling high-level programming languages, and as a result, several languages have started targeting Wasm, including Java, OCaml, Scala, Kotlin, Scheme, and Dart.
Wasm 3.0 features are already incorporated into most of the major web browsers, including Chrome, Firefox, and Safari.