Das W3C-Konsortium hat die Fertigstellung der Spezifikation bekannt gegeben, die den Zwischencode WebAssembly 3.0 und die damit verbundene API standardisiert, die die Erstellung von hochleistungsfĂ€higen Anwendungen ermöglicht, die zwischen Browsern und Hardwareplattformen portierbar sind. WebAssembly bietet einen universellen, browserunabhĂ€ngigen, niedrigstufigen Zwischencode zur AusfĂŒhrung von Anwendungen, die aus verschiedenen Programmiersprachen kompiliert wurden.
Die WebAssembly-Technologie kann verwendet werden, um im Browser Aufgaben auszufĂŒhren, die hohe Leistungen erfordern, wie zum Beispiel Videos kodieren, Audios verarbeiten, Grafik- und 3D-Manipulation, Spieleentwicklung, kryptografische Operationen und mathematische Berechnungen, indem die AusfĂŒhrung von im Browser geschriebenem, kompilierbarem Code organisiert wird, wie C/C++. Durch den Einsatz von JIT fĂŒr WebAssembly kann eine Leistung erreicht werden, die nah am nativen Code liegt.
Zu den Hauptzielen von WebAssembly gehört die GewĂ€hrleistung von PortabilitĂ€t, Vorhersehbarkeit des Verhaltens und IdentitĂ€t der AusfĂŒhrung von Code 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 jeder Infrastruktur, auf Betriebssystemen und GerĂ€ten vorangetrieben.
Die folgenden Spezifikationen sind verfĂŒgbar:
- 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 API â bietet eine API zur Integration mit JavaScript. Erlaubt 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 werden Ă€hnlich wie bei der AusfĂŒhrung von JavaScript-Code durchgefĂŒhrt.
- 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.
- WASI API â definiert eine modulare Systemschnittstelle zum AusfĂŒhren von WebAssembly auĂerhalb von Browsern und zum Bereitstellen von Zugriff auf Ressourcen wie Dateien, Netzwerkverbindungen, Zufallszahlengeneratoren und Systemuhren.
Es wird festgestellt, dass in der neuen Version des Standards die UnterstĂŒtzung fĂŒr die Kompilierung hochgradiger Sprachen in WebAssembly erheblich verbessert wurde. Beispielsweise wurde die Möglichkeit zur Kompilierung von Projekten in WebAssembly in den Sprachen Java, OCaml, Scala, Kotlin, Scheme und Dart implementiert. Die wichtigsten Ănderungen in WebAssembly 3.0 im Vergleich zur zweiten Version des Standards sind:
- Es wurde UnterstĂŒtzung fĂŒr 64-Bit-AdressrĂ€ume implementiert. FĂŒr die Adressierung des Speichers kann jetzt der Typ i64 verwendet werden, nicht nur i32, was den fĂŒr Anwendungen verfĂŒgbaren Adressraum von 4 GB auf 16 EB erweitert (bei AusfĂŒhrung im Browser ist eine Begrenzung auf 16 GB gesetzt).
- Es wurde die Möglichkeit bereitgestellt, mehrere Speicherobjekte in einem WebAssembly-Modul gleichzeitig 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 wurde ein separater Speichertype vorgeschlagen, der automatisch durch einen Garbage Collector verwaltet wird. Der Compiler kann jetzt separate Datenstrukturen, Arrays und Variablen verwenden, fĂŒr die WebAssembly die Speicherzuweisung und das Lebenszyklusmanagement ĂŒbernimmt.
- Es wurde die UnterstĂŒtzung fĂŒr typisierte Referenzen hinzugefĂŒgt, die die genaue Struktur des Wertes beschreiben können, auf den die Referenz zeigt, was zusĂ€tzliche PrĂŒfungen zur Laufzeit vermeidet. UnterstĂŒtzt werden Subtypen, Typrekursion und die sichere Verwendung von Funktionsreferenzen, die keine Typ- und BereichsprĂŒfungen zur Laufzeit erfordern.
- Die UnterstĂŒtzung fĂŒr Tail-Calls wurde hinzugefĂŒgt, wobei die aktuelle Funktion die AusfĂŒhrung sofort nach dem Aufruf einer anderen Funktion beendet, ohne Platz im Stack zu verbrauchen.
- Die UnterstĂŒtzung fĂŒr die Behandlung von Ausnahmen wurde hinzugefĂŒgt.
- Die UnterstĂŒtzung fĂŒr "entschlossene" (relaxed) Vektor-SIMD-Befehle wurde hinzugefĂŒgt, die eine höhere Leistung durch den Verzicht auf strenge Einhaltung der Semantik auf allen Hardware-Plattformen gewĂ€hrleisten.
- Die UnterstĂŒtzung fĂŒr ein deterministisches AusfĂŒhrungsprofil wurde hinzugefĂŒgt, das ein plattformunabhĂ€ngiges Verhalten fĂŒr Anweisungen definiert, deren AusfĂŒhrungsergebnisse auf verschiedenen Plattformen variieren können (Gleitkommaoperationen, RĂŒckgabe von NaN, abgeschwĂ€chte Vektor-Anweisungen). Wenn dieses Profil ausgewĂ€hlt ist, gewĂ€hrleistet Wasm deterministisches Verhalten, Reproduzierbarkeit und PortabilitĂ€t.
- Eine Syntax wurde hinzugefĂŒgt, um benutzerdefinierte Annotationen zu erstellen, die es ermöglichen, zusĂ€tzliche Informationen an WebAssembly-Code anzuhĂ€ngen. Zuvor gab es im binĂ€ren WebAssembly-Format UnterstĂŒtzung fĂŒr benutzerdefinierte Abschnitte, die beliebige Informationen speichern, aber im Textformat fehlte diese. Jetzt gibt es die Möglichkeit, diese Informationen in lesbarer und bearbeitbarer Form hinzuzufĂŒgen.
- Im JavaScript-API wurden integrierte Funktionen zur Bearbeitung von Strings hinzugefĂŒgt. FrĂŒher konnten JavaScript-Strings nur als externe VerknĂŒpfungen an WebAssembly ĂŒbergeben werden, jetzt kann direkt auf Strings zugegriffen und innerhalb von WebAssembly damit gearbeitet werden.
Quelle: opennet.ru
