Das W3C-Konsortium hat einen Entwurf der neuen Spezifikation veröffentlicht, die den Zwischencode von WebAssembly 2.0 und die zugehörige API standardisiert. Diese ermöglicht die Erstellung leistungsstarker Anwendungen, die zwischen Browsern und Hardware-Plattformen portierbar sind. WebAssembly bietet einen plattformunabhĂ€ngigen, universellen nieder-level Zwischencode zur AusfĂŒhrung von Anwendungen, die aus verschiedenen Programmiersprachen kompiliert wurden. Durch den Einsatz von JIT kann WebAssembly eine Leistung erreichen, die nahe an jener von nativem Code liegt.
Die Technologie WebAssembly kann fĂŒr die AusfĂŒhrung von Aufgaben im Browser verwendet werden, die hohe Leistung erfordern, wie z.B. Videokodierung, Audioverarbeitung, Grafik- und 3D-Manipulation, Spieleentwicklung, kryptografische Operationen und mathematische Berechnungen, indem sie die AusfĂŒhrung von in kompilierbaren Sprachen wie C/C++ geschriebenem Code im Browser organisiert.
Eine der Hauptaufgaben von WebAssembly besteht darin, PortabilitĂ€t, Vorhersagbarkeit des Verhaltens und IdentitĂ€t der AusfĂŒhrung von Code auf verschiedenen Plattformen zu gewĂ€hrleisten. In letzter Zeit wird WebAssembly auch als universelle Plattform fĂŒr die sichere AusfĂŒhrung von Code in beliebigen Infrastrukturen, Betriebssystemen und GerĂ€ten gefördert, wobei nicht nur Browser berĂŒcksichtigt werden.
Das W3C hat drei erste Spezifikationen von WebAssembly 2.0 veröffentlicht:
- WebAssembly Core â beschreibt die niedrigstufige virtuelle Maschine zur AusfĂŒhrung von Zwischencode fĂŒr WebAssembly. Die mit WebAssembly verbundenen Ressourcen werden im Format â.wasmâ bereitgestellt, das Ă€hnlich wie â.classâ-Dateien in Java ist und statische Daten sowie Code-Segmente zur Verarbeitung dieser Daten enthĂ€lt.
- WebAssembly JavaScript Interface â bietet eine API zur Integration mit JavaScript. Sie ermöglicht den Zugriff auf Werte und die Ăbergabe 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 Programmierschnittstelle basierend auf dem Promise-Mechanismus zur Anforderung und AusfĂŒhrung von â.wasmâ-Ressourcen. Das Format der WebAssembly-Ressourcen ist optimiert, um die AusfĂŒhrung zu beginnen, ohne auf das vollstĂ€ndige Laden der Datei zu warten, was die ReaktionsfĂ€higkeit von Webanwendungen erhöht.
Die wesentlichen Ănderungen in WebAssembly 2.0 im Vergleich zur ersten Version des Standards sind:
- UnterstĂŒtzung des Vektortyps v128 und der zugehörigen Vektoroperationen, die die gleichzeitige AusfĂŒhrung von Operationen an mehreren numerischen Werten (SIMD, Single Instruction Multiple Data) ermöglichen.
- Die Möglichkeit zum Import und Export von verĂ€nderbaren (mutable) globalen Variablen, die die globale Bindung fĂŒr Werte wie Stackzeiger in C++ ermöglichen.
- Neue Anweisungen zur Umwandlung von float in int, die anstelle einer Ausnahme bei einer Ăberlauf des Ergebnisses den minimal möglichen oder maximalen Wert zurĂŒckgeben (notwendig fĂŒr SIMD).
- Anweisungen zur Erweiterung des Vorzeichens von Ganzzahlen (Erhöhung der Bitbreite der Zahl unter Beibehaltung des Vorzeichens und Wertes).
- UnterstĂŒtzung fĂŒr die RĂŒckgabe mehrerer Werte in Blöcken und Funktionen (neben der Ăbergabe mehrerer Parameter an Funktionen).
- Umsetzung der JavaScript-Funktionen BigInt64Array und BigUint64Array zur Konvertierung zwischen dem JavaScript-Typ BigInt und der Darstellung von 64-Bit-Ganzzahlen in WebAssembly.
- UnterstĂŒtzung von Referenztypen (funcref und externref) und den damit verbundenen Anweisungen (select, ref.null, ref.func und ref.is_null).
- Anweisungen memory.copy, memory.fill, memory.init und data.drop zum Kopieren von Daten zwischen Speicherbereichen und zum Bereinigen von Speicherregionen.
- Anweisungen fĂŒr den direkten Zugriff auf und die Modifizierung von Tabellen (table.set, table.get, table.size, table.grow). Möglichkeit zur Erstellung, zum Import und Export mehrerer Tabellen in einem Modul. Funktionen zum Kopieren/fĂŒllen von Tabellen im Batch-Modus (table.copy, table.init und elem.drop).
Quelle: opennet.ru
