Die W3C-Konsortium hat die Fertigstellung der Spezifikation bekannt gegeben, die den standardisierten Zwischencode von WebAssembly 3.0 und die damit verbundene API definiert. Diese ermöglicht die Entwicklung von leistungsstarken Anwendungen, die plattformĂŒbergreifend zwischen Browsern und Hardware-Plattformen genutzt werden können. WebAssembly bietet browserunabhĂ€ngigen, universellen, niedrig-leveligen Zwischencode fĂŒr die AusfĂŒhrung von Anwendungen, die aus verschiedenen Programmiersprachen kompiliert wurden.
Die WebAssembly-Technologie kann verwendet werden, um im Browser Aufgaben mit hoher Leistung auszufĂŒhren, wie zum Beispiel Video-Codierung, Audioverarbeitung, Grafik- und 3D-Manipulation, Spieleentwicklung, kryptografische Operationen und mathematische Berechnungen. Dies geschieht durch die AusfĂŒhrung von Code, der in kompilierbaren Sprachen wie C/C++ geschrieben ist. Mit dem Einsatz von JIT fĂŒr WebAssembly kann eine Performance erreicht werden, die nahezu mit nativem Code vergleichbar ist.
Zu den Hauptaufgaben von WebAssembly gehört die GewĂ€hrleistung von PortabilitĂ€t, Vorhersehbarkeit des Verhaltens und IdentitĂ€t der CodeausfĂŒhrung auf verschiedenen Plattformen. WebAssembly ist nicht auf Browser beschrĂ€nkt und wird auch als universelle Plattform fĂŒr die sichere AusfĂŒhrung von Code in allen Infrastrukturen, Betriebssystemen und GerĂ€ten gefördert.
Die folgenden Spezifikationen sind verfĂŒgbar:
- WebAssembly Core â beschreibt eine niedrigstufige virtuelle Maschine zur AusfĂŒhrung von WebAssembly-Bytecode. Die mit WebAssembly verbundenen Ressourcen werden im Format â.wasmâ bereitgestellt, das vergleichbar ist mit â.classâ-Dateien in Java und statische Daten sowie Code Segmente zum Arbeiten mit diesen Daten enthĂ€lt.
- WebAssembly JavaScript API â bietet eine API zur Integration mit JavaScript. Ermöglicht das Abrufen von Werten und das Ăbergeben von Parametern an WebAssembly-Funktionen. Die AusfĂŒhrung von WebAssembly entspricht dem Sicherheitsmodell von JavaScript, und alle Interaktionen mit dem zugrunde liegenden System erfolgen analog zur AusfĂŒhrung von JavaScript-Code.
- WebAssembly Web API â definiert eine programmgesteuerte Schnittstelle basierend auf dem Promise-Mechanismus zur Anforderung und AusfĂŒhrung von Ressourcen wie «.wasm». Das WebAssembly-Ressourcenformat ist optimiert, um die AusfĂŒhrung zu starten, ohne auf den vollstĂ€ndigen Dateiupload zu warten, was die ResponsivitĂ€t von Webanwendungen erhöht.
- WASI API â definiert eine modulare Systemschnittstelle zum AusfĂŒhren von WebAssembly auĂerhalb von Browsern und bietet Zugriff auf Ressourcen wie Dateien, Netzwerkverbindungen, Zufallszahlengeneratoren und Systemuhren.
Es wird festgestellt, dass die neue Version des Standards die UnterstĂŒtzung fĂŒr die Kompilierung von Hochsprachen in WebAssembly erheblich verbessert hat. Beispielsweise wurde die Möglichkeit der Kompilierung von Projekten in WebAssembly aus Sprachen wie Java, OCaml, Scala, Kotlin, Scheme und Dart umgesetzt. Die wichtigsten Ănderungen in WebAssembly 3.0 im Vergleich zur zweiten Version des Standards:
- UnterstĂŒtzung fĂŒr einen 64-Bit-Adressraum wurde implementiert. Zur Adressierung des Speichers kann nun der Typ i64 anstelle von nur i32 verwendet werden, wodurch der fĂŒr Anwendungen verfĂŒgbare Adressraum von 4 GB auf 16 EB erweitert wird (im Browser besteht eine EinschrĂ€nkung von 16 GB).
- Die Möglichkeit wurde hinzugefĂŒgt, mehrere Speicherobjekte gleichzeitig in einem WebAssembly-Modul zu verwenden und mit verschiedenen AdressrĂ€umen zu arbeiten. Unter anderem ist es möglich, Daten zwischen verschiedenen Instanzen von Speicherobjekten, die in unterschiedlichen AdressrĂ€umen platziert sind, zu kopieren.
- Die UnterstĂŒtzung fĂŒr Garbage Collection wurde hinzugefĂŒgt. Neben dem zuvor verfĂŒgbaren linearen Speicher wird ein separater Speichertyp angeboten, der automatisch mit einem Garbage Collector verwaltet wird. Der Compiler kann nun separate Datenstrukturen, Arrays und Variablen verwenden, fĂŒr die WebAssembly die Speicherzuweisung und das Lebenszyklus-Management ĂŒbernimmt.
- Die UnterstĂŒtzung fĂŒr typisierte Referenzen wurde hinzugefĂŒgt, die die genaue Struktur des Wertes, auf den verwiesen wird, beschreiben können. Dies ermöglicht es, zusĂ€tzliche ĂberprĂŒfungen zur Laufzeit zu vermeiden. Es werden Subtypen, Rekursion von Typen und die sichere Verwendung von Funktionsreferenzen unterstĂŒtzt, die keine ĂberprĂŒfungen von Typen und Grenzen zur Laufzeit erfordern.
- UnterstĂŒtzung fĂŒr Tail-Call-Optimierung hinzugefĂŒgt, bei der die aktuelle Funktion die AusfĂŒhrung sofort beendet, nachdem eine andere Funktion aufgerufen wurde, ohne Platz im Stack zu verbrauchen.
- UnterstĂŒtzung fĂŒr die Verarbeitung von Ausnahmen hinzugefĂŒgt.
- UnterstĂŒtzung fĂŒr "entspannte" (relaxed) SIMD-Vektor-Befehle hinzugefĂŒgt, die eine höhere Leistung ermöglichen, indem die strikte Einhaltung der Semantik auf allen Hardware-Plattformen aufgegeben wird.
- UnterstĂŒtzung fĂŒr ein deterministisches AusfĂŒhrungsprofil hinzugefĂŒgt, das das plattformunabhĂ€ngige Verhalten fĂŒr Befehle definiert, deren AusfĂŒhrungsergebnisse auf verschiedenen Plattformen variieren können (z. B. Gleitkomma-Operationen, RĂŒckgabe von NaN, entspannte Vektor-Befehle). Bei Auswahl dieses Profils gewĂ€hrleistet Wasm deterministisches Verhalten, Reproduzierbarkeit und PortabilitĂ€t.
- Es wurde eine Syntax fĂŒr die Erstellung eigener Annotations hinzugefĂŒgt, die es ermöglicht, zusĂ€tzliche Informationen zu WebAssembly-Code anzuhĂ€ngen. Zuvor gab es UnterstĂŒtzung fĂŒr benutzerdefinierte Abschnitte zur Speicherung beliebiger Informationen im binĂ€ren WebAssembly-Format, jedoch fehlte diese im textbasierten WebAssembly-Format. Nun kann diese Information in lesbarer und bearbeitbarer Form hinzugefĂŒgt werden.
- Die JavaScript-API hat integrierte Funktionen zur Bearbeitung von Strings erhalten. Bisher konnten JavaScript-Strings nur als externe Verweise an WebAssembly ĂŒbergeben werden; nun ist es möglich, direkt auf Strings zuzugreifen und sie innerhalb von WebAssembly zu manipulieren.
Quelle: opennet.ru
