- Der Standard Wasm 3.0 wurde offiziell vorgestellt und umfasst große Funktionen, die über 6–8 Jahre vorbereitet wurden
- Mit 64-Bit-Adressraum, Garbage Collection, typisierten Referenzen, Tail Calls und Exception Handling lassen sich Hochsprachen deutlich einfacher nach Wasm kompilieren
- Die wichtigsten neuen Funktionen helfen bei Hochleistungsanwendungen, verschiedenen Sprach-Runtimes sowie Sicherheit und Erweiterbarkeit
- Sie eignen sich nicht nur für die Web-Umgebung, sondern auch für nicht-webbasierte Ökosysteme, in denen größere Kapazitäten und Datensätze verarbeitet werden müssen
- Unterstützung ist bereits in den wichtigsten Webbrowsern vorhanden, und auch eigenständige Engines wie Wasmtime sollen bald vollständig nachziehen, wodurch sich Wasm als allgemeine Ausführungsplattform weiter etabliert
Überblick zum Release von Wasm 3.0
- Version 3.0 des WebAssembly-Standards wurde am 17. September 2025 veröffentlicht
- Das ist das erste größere Update seit Version 2.0 (abgeschlossen 2022), die Vektor-Instruktionen, Bulk-Memory-Operationen, mehrere Rückgabewerte und einfache Referenztypen eingeführt hatte
- Die W3C Community Group und die Working Group haben die Entwicklung fortgeführt; diese Veröffentlichung bringt entsprechend umfangreiche Funktionen, die 6–8 Jahre lang vorbereitet wurden, und ist damit eine recht große Änderung
- Wasm behält seinen Charakter als Low-Level-Sprache bei, stärkt aber Speicher- und Typsystem, um die Kompilierung von Hochsprachen besser zu unterstützen
- Funktionen, die nach Version 2.0 entwickelt wurden, sind nun abgeschlossen und als Live-Standard etabliert; die Unterstützung in Webbrowsern und eigenständigen Engines wird ausgebaut
- Auf der Wasm-Feature-Status-Seite lässt sich der Support-Stand der einzelnen Engines verfolgen
- Die erste Version wurde mit der neuen Toolchain SpecTec erstellt, was die Zuverlässigkeit verbessert
Wichtige Änderungen und neue Funktionen
- 64-Bit-Adressraum
- Speicher und Tabellen können mit dem Typ i64 deklariert werden
- Der Adressraum von Wasm-Anwendungen kann von etwa 4 GB bis an physische Grenzen wachsen (theoretisch 16 Exabyte)
- Im Web gilt zwar ein Limit von 16 GB, doch in nicht-webbasierten Ökosystemen ist das für große Anwendungen und Datensätze nützlich
- Mehrere Speicherbereiche
- Innerhalb eines einzelnen Moduls lassen sich mehrere Speicherobjekte deklarieren und direkt ansprechen
- Das ist für das Zusammenführen von Modulen, die Trennung von Adressräumen, Buffering, Sicherheit und weitere Anwendungsfälle nutzbar
- Statische Linker-Tools wie wasm-merge können dadurch auf alle Wasm-Module angewendet werden
- Garbage Collection (GC)
- Zusätzlich zum linearen Speicher wird ein vom Wasm-Runtime automatisch verwalteter Speicherbereich unterstützt
- Compiler deklarieren Datenlayouts wie Struct-/Array-Typen und unboxed Integers direkt
- Es werden nur die grundlegenden Bausteine für Speicherverwaltung bereitgestellt; Objektsysteme auf höherer Ebene oder Closures können je nach Implementierungssprache individuell entworfen werden
- Typisierte Referenzen
- Das Wasm-Typsystem wurde erweitert, um die Form von Heap-Werten und Funktionsreferenzen genauer zu beschreiben
- Es unterstützt Subtyping und Typrekursion; mit der neuen Instruktion
call_ref sind sichere indirekte Funktionsaufrufe ohne Laufzeit-Typprüfung möglich
- Tail Calls
- Unterstützt werden Tail-Call-Strukturen, die ohne zusätzlichen Stackverbrauch der aktuellen Funktion direkt zurückkehren
- Das kann in funktionalen Sprachen oder für interne Optimierungen von Runtimes genutzt werden
- Exception Handling
- Führt ein natives Exception-Handling-System in Wasm ein
- Es bietet Exception-Tags und Payload-Deklarationen, optionales Catching und blockbasierte Exception-Handler
- Dadurch sind bessere Portabilität und Performance möglich, ohne bisher übliche ineffiziente Umwege über JS
- Relaxed Vector Instructions
- Um Unterschiede in der SIMD-Hardware zu berücksichtigen, gibt es relaxed Varianten, bei denen die genaue Ausführung mancher Instruktionen der Implementierung überlassen wird
- Innerhalb der zulässigen Ergebnismenge sind damit verschiedene Optimierungen möglich
- Deterministisches Profil
- Auch in Fällen, in denen Ergebnisse für dieselbe Instruktion nicht deterministisch sein können (Floating-Point-Berechnungen, relaxed SIMD usw.), wird plattformübergreifend deterministische Ausführung definiert
- Das kann Reproduzierbarkeit und Portabilität für Blockchains, reproduzierbare Systeme und ähnliche Szenarien sichern
- Syntax für benutzerdefinierte Annotationen
- Dem Quellcode wird eine für Menschen les- und schreibbare Annotationssyntax hinzugefügt
- Sie wird vom Standard selbst nicht interpretiert, kann aber künftig für Standard- oder Erweiterungsimplementierungen genutzt werden
JavaScript-Anbindung und Kompatibilität
- JS string builtins
- String-Werte aus JS können als externref an Wasm übergeben und dort verarbeitet werden
- Durch Import neuer Built-in-Funktionen lassen sich externe JS-Strings direkt innerhalb von Wasm verwenden
Nutzen und Ausblick für Wasm 3.0
- Liefert die notwendige Grundlage für die Kompilierung fortgeschrittener Programmiersprachen nach Wasm
- Wichtige Sprachen wie Java, OCaml, Scala, Kotlin, Scheme, Dart und weitere beginnen bereits, die GC-Funktionen aktiv zu nutzen
Stand von Spezifikation und Verbreitung
- Wasm 3.0 ist der erste Standard, der mit der neuen SpecTec Toolchain erstellt wurde
- Die meisten großen Webbrowser unterstützen Wasm 3.0 bereits, und eigenständige Engines wie Wasmtime sollen bald vollständig folgen
- Auf der Seite Wasm feature status lässt sich der Support-Status je Engine prüfen
Noch keine Kommentare.