Das W3C-Konsortium hat einen Entwurf einer neuen Spezifikation veröffentlicht, die den Zwischencode von WebAssembly 2.0 und die zugehörige API standardisiert. Dies ermöglicht die Erstellung von hochperformanten Anwendungen, die zwischen Browsern und Hardwareplattformen portierbar sind. WebAssembly bietet einen plattformunabhĂ€ngigen, universellen, niedrigstufigen Zwischencode zur AusfĂŒhrung von Anwendungen, die aus verschiedenen Programmiersprachen kompiliert wurden. Durch den Einsatz von JIT fĂŒr WebAssembly kann eine Performance erreicht werden, die nahezu der von nativen Codes entspricht.
Die Technologie WebAssembly kann genutzt werden, um im Browser Aufgaben mit hoher Leistungsanforderung auszufĂŒhren, z. B. Videokodierung, Audiobearbeitung, Grafikmanipulation und 3D, Spielentwicklung, kryptografische Operationen und mathematische Berechnungen, indem sie die AusfĂŒhrung von Code in kompilierbaren Sprachen wie C/C++ ermöglicht.
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. In letzter Zeit wird WebAssembly auch als universelle Plattform fĂŒr die sichere AusfĂŒhrung von Code in beliebigen Infrastrukturen, Betriebssystemen und GerĂ€ten vorangetrieben, ohne auf Browser beschrĂ€nkt zu sein.
W3C hat drei Entwurfsspezifikationen fĂŒr WebAssembly 2.0 veröffentlicht:
- 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 Interface â stellt eine API fĂŒr die Integration mit JavaScript bereit. Ermöglicht es, Werte zu erhalten und Parameter in Funktionen von WebAssembly zu ĂŒbergeben. Die AusfĂŒhrung von WebAssembly entspricht dem Sicherheitsmodell von JavaScript, und alle Interaktionen mit dem zugrunde liegenden System erfolgen Ă€hnlich wie bei der 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.
Die wichtigsten Ănderungen in WebAssembly 2.0 im Vergleich zur ersten Version des Standards:
- UnterstĂŒtzung des vektoriellen Typs v128 und verwandter vektorbasierter Anweisungen, die es ermöglichen, Aktionen auf mehreren numerischen Werten gleichzeitig auszufĂŒhren (SIMD, single instruction multiple data).
- Die Möglichkeit, verĂ€nderliche (mutable) globale Variablen zu importieren und zu exportieren, ermöglicht die Anwendung von globalen Bindungen fĂŒr Werte wie Stapelzeiger in C++.
- Neue Anweisungen zur Umwandlung von float in int, die anstelle der Erzeugung einer Ausnahme bei einer Ăberlaufbedingung den minimalen oder maximalen möglichen Wert zurĂŒckgeben (notwendig fĂŒr SIMD).
- Anweisungen zur Erweiterung des Vorzeichens von Ganzzahlen (Erhöhung der Bitbreite einer Zahl unter Beibehaltung des Vorzeichens und Wertes).
- UnterstĂŒtzung der RĂŒckgabe mehrerer Werte durch Blöcke und Funktionen (neben der Ăbertragung mehrerer Parameter an Funktionen).
- Implementierung der JavaScript-Funktionen BigInt64Array und BigUint64Array zur Umwandlung 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 ZurĂŒcksetzen von Speicherregionen.
- Anleitungen fĂŒr den direkten Zugriff und zur Ănderung 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/Initialisieren von Tabellen im Batch-Modus (table.copy, table.init und elem.drop).
Quelle: opennet.ru
