WebAssembly 2.0 Standardvorschau verfügbar

Das W3C hat einen Entwurf einer neuen Spezifikation veröffentlicht, die die WebAssembly 2.0-Middleware und die zugehörige API standardisiert und so die Erstellung von Hochleistungsanwendungen ermöglicht, die über Browser und Hardwareplattformen hinweg portierbar sind. WebAssembly bietet browserunabhängigen, universellen Low-Level-Zwischencode zum Ausführen von Anwendungen, die aus verschiedenen Programmiersprachen kompiliert wurden. Durch die Verwendung von JIT für WebAssembly können Sie Leistungsniveaus erreichen, die denen von nativem Code nahe kommen.

Mit der WebAssembly-Technologie können Hochleistungsaufgaben im Browser ausgeführt werden, z. B. Videokodierung, Audioverarbeitung, Grafik- und 3D-Manipulation, Spieleentwicklung, kryptografische Operationen und mathematische Berechnungen, indem Code in kompilierten Sprachen wie C/C++ geschrieben wird .

Zu den Hauptzielen von WebAssembly gehört die Gewährleistung von Portabilität, vorhersehbarem Verhalten und identischer Codeausführung auf verschiedenen Plattformen. Vor kurzem wurde WebAssembly auch als universelle Plattform für die sichere Ausführung von Code über jede Infrastruktur, jedes Betriebssystem und jedes Gerät hinweg beworben, nicht nur über Browser.

Das W3C hat drei Spezifikationsentwürfe für WebAssembly 2.0 veröffentlicht:

  • WebAssembly Core – Beschreibt eine virtuelle Maschine auf niedriger Ebene zum Ausführen von WebAssembly-Zwischencode. Mit WebAssembly verknüpfte Ressourcen werden im „.wasm“-Format bereitgestellt, ähnlich den „.class“-Dateien in Java, und enthalten statische Daten und Codesegmente für die Arbeit mit diesen Daten.
  • WebAssembly-JavaScript-Schnittstelle – Bietet eine API für die Integration mit JavaScript. Ermöglicht das Abrufen von Werten und das Übergeben von Parametern an WebAssembly-Funktionen. Die Ausführung von WebAssembly folgt dem JavaScript-Sicherheitsmodell und die gesamte Interaktion mit dem Hauptsystem erfolgt auf die gleiche Weise wie die Ausführung von JavaScript-Code.
  • WebAssembly-Web-API – Definiert eine Programmierschnittstelle basierend auf dem Promise-Mechanismus zum Anfordern und Ausführen von „.wasm“-Ressourcen. Das WebAssembly-Ressourcenformat ist so optimiert, dass es mit der Ausführung beginnen kann, ohne auf das vollständige Laden der Datei warten zu müssen, was die Reaktionsfähigkeit von Webanwendungen verbessert.

Die wichtigsten Änderungen in WebAssembly 2.0 im Vergleich zur ersten Version des Standards:

  • Unterstützung für den Vektortyp v128 und zugehörige Vektoranweisungen, mit denen Sie Aktionen für mehrere numerische Werte parallel ausführen können (SIMD, Single Instruction Multiple Data).
  • Möglichkeit zum Importieren und Exportieren veränderlicher globaler Variablen, wodurch eine globale Bindung für Werte wie Stapelzeiger in C++ ermöglicht wird.
  • Neue Anweisungen zur Konvertierung von Float in Int, die, anstatt eine Ausnahme auszulösen, wenn das Ergebnis überläuft, den minimal oder maximal möglichen Wert zurückgeben (erforderlich für SIMD).
  • Anweisungen zur Vorzeichenerweiterung von Ganzzahlen (Erhöhen der Bittiefe einer Zahl unter Beibehaltung von Vorzeichen und Wert).
  • Unterstützung für Blöcke und Funktionen, die mehrere Werte zurückgeben (zusätzlich zur Übergabe mehrerer Parameter an Funktionen).
  • Implementierung der JavaScript-Funktionen BigInt64Array und BigUint64Array zur Konvertierung zwischen dem JavaScript-Typ BigInt und der WebAssembly-Darstellung von 64-Bit-Ganzzahlen.
  • Unterstützung für Referenztypen (funcref und externref) und die zugehörigen 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 Löschen von Speicherbereichen.
  • Anweisungen zum direkten Zugriff auf und zum Ändern von Tabellen (table.set, table.get, table.size, table.grow). Möglichkeit zum Erstellen, Importieren und Exportieren mehrerer Tabellen in einem Modul. Funktionen zum Kopieren/Füllen von Tabellen im Batch-Modus (table.copy, table.init und elem.drop).

Source: opennet.ru

Kommentar hinzufügen