Le format de code facilitant le développement Web dans plusieurs langages est passé en version 3.0. Considéré comme stable, Wasm offre un espacement d'adresses 64 bits, plusieurs mémoires, un ramasse-miettes amélioré et une prise en charge d’un plus grand nombre de langages. Selon la communauté Wasm W3C (World Wide Web Consortium) et le groupe de travail supervisant le développement, les fonctionnalités de WebAssembly 3.0 proposent une meilleure prise en charge de la compilation des langages de programmation à haut niveau d’abstraction. D’après ses promoteurs, les langages ciblant Wasm avec la fonctionnalité de ramasse-miette comprennent Java, OCaml, Scala, Kotlin, Scheme et Dart.
Annoncée le 17 septembre, la spécification Wasm 3.0 supporte la déclaration de mémoires et de tables utilisant i64 comme type d'adresse au lieu du seul i32, ce qui étend l'espace d'adressage disponible des applications Wasm de 4 gigaoctets à (théoriquement) 16 exaoctets, dans la mesure où le matériel physique le permet. WebAssembly 3.0 améliore également le ramasse-miettes dans l'extension WasmGC. En plus d'étendre les capacités des mémoires linéaires brutes, une autre forme de stockage gérée automatiquement par le runtime Wasm a été ajoutée. WasmGC est de bas niveau : un compilateur ciblant Wasm peut déclarer la disposition en mémoire de ses structures de données d'exécution en termes de types struct et array, ainsi que d'entiers (unboxed integer) étiquetés, dont l'allocation et la durée de vie sont ensuite gérées par Wasm. L'extension WasmGC, qui s'appuie sur une extension substantielle du système de type Wasm, prend désormais en charge des références de types beaucoup plus riches.
Déclaration de plusieurs mémoires
Dans le domaine de la mémoire, un seul module peut désormais déclarer plusieurs mémoires et y accéder directement, y compris pour copier des données entre elles. Cette amélioration donne la possibilité à des outils comme wasm-merge, qui effectuent une « liaison statique » entre deux ou plusieurs modules Wasm en les fusionnant en un seul, de fonctionner pour tous les modules Wasm. Elle ouvre également la voie à d’autres utilisations d'espaces d'adressage séparés ; les exemples fournis concernaient la sécurité (séparation des données privées), la mise en mémoire tampon ou l'instrumentation. « Wasm 3.0 est déjà disponible dans la plupart des principaux navigateurs web, et sa prise en charge dans des moteurs autonomes tels que Wasmtime est en bonne voie d'achèvement », ont déclaré ses promoteurs.
Parmi les autres améliorations, on peut citer le format de texte Wasm qui a été enrichi d'une syntaxe générique permettant d'insérer des annotations dans le code source Wasm. Enfin le standard spécifie désormais un comportement par défaut déterministe pour chaque instruction dont les résultats seraient autrement non déterministes. Actuellement, cela inclut les opérateurs à virgule flottante et leurs valeurs NaN générées, ainsi que les instructions vectorielles « relaxed ».