WebAssembly

WebAssembly
WebAssembly Logo.svg
Paradigma strukturiert Stapelmaschine[1]
Entworfen von W3c
Entwickler
Erstmals erschienen März 2017; vor 5 Jahren
OS Plattformunabhängig
Lizenz Apache -Lizenz 2.0
Dateiname -Erweiterungen
  • .wat (Textformat)
  • .wasmus (Binärformat)
Webseite WebAssembly.org
Beeinflusst von

WebAssembly (manchmal abgekürzt Wasm) definiert a tragbar Binärcode Format und ein entsprechendes Textformat für ausführbare Programme[2] ebenso gut wie Software Schnittstellen zur Erleichterung der Interaktionen zwischen solchen Programmen und ihrer Hostumgebung.[3][4][5][6]

Das Hauptziel der WebAssembly ist es, Hochleistungsanwendungen auf Webseiten"Aber es gibt keine webspezifischen Annahmen oder liefert webspezifische Funktionen, sodass es auch in anderen Umgebungen verwendet werden kann."[7] Es ist ein offener Standard[8][9] und zielt darauf ab, jede Sprache in jedem Betriebssystem zu unterstützen,[10] Und in der Praxis haben alle beliebtesten Sprachen bereits zumindest ein gewisses Maß an Unterstützung.

Die WebAssembly wurde 2015 angekündigt und erstmals im März 2017 veröffentlicht. Er wurde ein World Wide Web Konsortium Empfehlung am 5. Dezember 2019[11][12][13] und es erhielt die Programmiersprachen Software Award aus ACM Sigplan im Jahr 2021.[14] Das World Wide Web Konsortium (W3C) behält den Standard mit Beiträgen aus Mozilla, Microsoft, Google, Apfel, Schnell, Intel, und roter Hut.[15][16]

Geschichte

WebAssembly wurde erstmals 2015 bekannt gegeben,[17] und die erste Demonstration wurde ausgeführt Einheit's Wütende Bots in Feuerfuchs,[18] Google Chrome,[19] und Microsoft Edge.[20] Die Vorläufer -Technologien waren ASM.JS aus Mozilla und Google Native Client,[21][22] und die erste Implementierung basierte auf dem Feature -Satz von ASM.Js.[23] Die ASM.JS-Technologie bietet bereits fast native Codeausführungsgeschwindigkeiten[24][25] und kann als praktikable Alternative für Browser angesehen werden, die keine WebAssembly unterstützen oder sie aus Sicherheitsgründen deaktivieren lassen.

Im März 2017 das Design der Minimum lebensfähiges Produkt (MVP) wurde als fertig erklärt und die Vorschauphase endete.[26] Ende September 2017, Safari 11 wurde mit Unterstützung freigelassen. Im Februar 2018 veröffentlichte die WebAssembly Working Group drei öffentliche Arbeitsentwürfe für die Kernspezifikation, die JavaScript -Schnittstelle und die Web -API.[27][28][29][30]

Im Juni 2019 wurde Chrome 75 mit Webassembly -Threads, die standardmäßig aktiviert sind, veröffentlicht.[31]

Implementierungen

Während WebAssembly ursprünglich so konzipiert wurde, dass sie eine nahezu native Code-Ausführungsgeschwindigkeit im Webbrowser ermöglicht, wurde sie außerhalb solcher als wertvoll in allgemeineren Kontexten als wertvoll angesehen.[32][33] Da die Laufzeitumgebungen von WebAssembly (RE) niedrig sind Virtuelle Stack -Maschinen (verwandt mit JVM oder Flash VM) Das kann in Host -Anwendungen eingebettet werden, einige von ihnen haben einen Weg gefunden, sich für eigenständige Laufzeitumgebungen wie WASMTIME und WASMER zu befassen.[9][10]

Internetbrowser

Im November 2017 erklärte Mozilla die Unterstützung "in allen großen Browsern",[34] Nachdem die WebAssembly standardmäßig in Edge 16 aktiviert wurde.[35] Der Support umfasst mobile Webbrowser für iOS und Android. Ab August 202296% der installierten Browser unterstützen WebAssembly.[36] Aber für ältere Browser kann WASM von einem JavaScript in ASM.JS zusammengestellt werden Polyfill.[37]

Compiler

Implementierungen von WebAssembly -Implementierungen verwenden normalerweise entweder vor der Zeit (Aot) oder gerade rechtzeitig (JIT) Zusammenstellung, kann aber auch eine verwenden Dolmetscher. Während die ersten Implementierungen gelandet sind InternetbrowserEs gibt auch Nicht-Browser-Implementierungen für die allgemeine Verwendung, einschließlich Wasmer,[10] WASMTIME[38] oder wamr,[16] WASM3, WAVM und viele andere.[39]

Weil WebAssembly Ausführbare sind vorkompiliert, es ist möglich, eine Vielzahl von Programmiersprachen zu verwenden, um sie herzustellen.[40] Dies wird entweder durch direkte Zusammenstellung von WASM oder durch die Umsetzung der entsprechenden virtuelle Maschinen in WASM. Es wurden rund 40 Programmiersprachen berichtet, die WASM als Zusammenstellungsziel unterstützen.[41]

Emscripten kompiliert C und C ++ zu Wasm[26] Verwenden des Binaryen und Llvm als Backend.[42] Das EMSCIPTEN SDK kann jede kompilieren Llvm-Verblutes Sprachen (wie z. C, C ++ oder Rostunter anderem) Quellcode in eine binäre Datei, die in derselben ausgeführt wird Sandkasten als JavaScript -Code.[Anmerkung 1] EMSCIPTEN liefert Bindungen für mehrere häufig verwendete Umgebungsschnittstellen wie Webgl.

Ab Version 8 ein Standalone Klang kann kompilieren C und C ++ zu Wasm.[47]

Sein ursprüngliches Ziel ist es, zu unterstützen Zusammenstellung aus C und C ++,[48] aber Unterstützung für andere Quelle Sprachen wie zum Beispiel Rost, .Net Sprachen[49][50][41] und Assemblyskript[51] (Typoskript-Like) entsteht ebenfalls. Nach der MVP -Veröffentlichung gibt es Pläne zur Unterstützung Multithreading und Müllsammlung[52][53] Dies würde WebAssembly zu einem Kompilierungsziel für mit Müll gesammelte Programmiersprachen machen wie C# (unterstützt über Blazor), F# (unterstützt über Bolero[54] mit Hilfe von Blazor), Python, und sogar JavaScript Wo der Browser des Browsers Just-in-Time-Zusammenstellung Geschwindigkeit wird als zu langsam angesehen. Eine Reihe anderer Sprachen unterstützt einige Unterstützung einschließlich Python,[55] Java,[56] Julia,[57][58][59] und Rubin.[60]

Einschränkungen

  1. Im Allgemeinen erlaubt WebAssembly keine direkte Interaktion mit dem Dom. Alle Interaktion muss durch JavaScript Interop fließen.
  2. Abwesenheit von Müllsammlung (Obwohl es Pläne gibt, dies anzugehen.)
  3. Sicherheitsüberlegungen (unten diskutiert)

WebAssembly wird auf Desktops und mobilen, aber in letzterem in der Praxis unterstützt (für nicht-kleine Speicherzuweisungen, wie mit Einheit Game Engine) Es gibt "schwerwiegende Einschränkungen, die viele Anwendungen unmöglich machen zuverlässig Einsatz in mobilen Browsern [..], der derzeit mehr als ~ 300 MB Speicher zugewiesen wird, ist auf Chrom auf Android nicht zuverlässig, ohne auf chromspezifische Problemumgehungen oder in Safari auf iOS zurückzugreifen. "[61]

Es gibt keine direkten Dokumentobjektmodell (DOM) Zugang; Es ist jedoch möglich, dafür Proxy -Funktionen zu erstellen, beispielsweise über STDWEB[62] oder Web_Sys[63] Bei Verwendung der Rostsprache.

Alle wichtigen Webbrowser ermöglichen eine WebAssembly, wenn keine Inhaltssicherheitspolitik angegeben ist oder ob "unsicher-eval" verwendet wird, aber ansonsten verhalten sich die wichtigsten Webbrowser unterschiedlich.[64] In der Praxis kann WebAssembly nicht auf Chrome ohne "unsichere Eval" verwendet werden.[65][66] Während eine Worker -Faden -Problemumgehung verfügbar ist.[66]

Sicherheitsüberlegungen

Im Juni 2018 präsentierte ein Sicherheitsforscher die Möglichkeit, WebAssembly zu nutzen, um Browser -Minderungen für zu umgehen Gespenst und Kernschmelze Sicherheitslücken für Sicherheitsanfälligkeiten einmal für die Unterstützung Themen mit gemeinsamem Speicher wird hinzugefügt. Aufgrund dieser Sorge setzen WebAssembly -Entwickler die Funktion auf Eis.[67][68][69] Um diese zukünftigen Spracherweiterungen zu untersuchen, fügte Google Chrome im Oktober 2018 die experimentelle Unterstützung für den WebAssembly -Thread -Vorschlag hinzu.[70]

Die WebAssembly wurde kritisiert, um eine bessere Leichtigkeit zu ermöglichen, die Beweise für die Beweise zu verbergen Malware Schriftsteller, Betrüger und Phishing Angreifer; Die WebAssembly ist auf der Maschine des Benutzers nur in seiner kompilierten Form vorhanden, die "[Malware] Erkennung schwierig".[71] Die Geschwindigkeit und Verschleierung der WebAssembly haben zu ihrer Verwendung in Hidden geführt Krypto -Bergbau Auf dem Gerät des Website Besucher.[71][72][67] MünzenEin inzwischen nicht mehr existierender Service, der den Kryptowährungsabbau in den Browsern der Website -Besucher erleichtert, behauptet, ihr "Miner nutzt WebAssembly und läuft mit etwa 65% der Leistung eines nativen Bergmanns".[67] Eine Studie im Juni 2019 von der Technische Universität Braunschweig Analysierte die Verwendung von WebAssembly in den Top 1 Million Websites von Alexa und stellte fest, dass die vorherrschende Verwendung für böswilligen Krypto-Mining war, und dass Malware mehr als die Hälfte der untersuchten Websites-Us-Websites ausmachte.[73][74] Eine Studie April 2021 von Universität Stuttgart stellte fest, dass seitdem das Krypto -Mining marginalisiert wurde und auf unter 1% aller Webassembly -Module fiel, die aus einer Vielzahl von Quellen gesammelt wurden, einschließlich der Alexa Top 1 Million Websites.[75]

Die Fähigkeit, große Code -Mengen effektiv zu verschleiern, kann auch verwendet werden, um zu deaktivieren Anzeigenblockierung und Datenschutzwerkzeuge, die verhindern Webverfolgung wie Privatsphäre Dachs.

Als WebAssembly unterstützt nur strukturiert SteuerflussEs ist für Sicherheitsüberprüfungstechniken einschließlich der Sicherheitsüberprüfungstechniken zugänglich Symbolische Ausführung.[76] Zu den aktuellen Bemühungen in dieser Richtung gehört die manticore symbolische Ausführungsmaschine.[77]

WAR ICH

WebAssembly -Systemschnittstelle (WASI) ist eine einfache Schnittstelle (Abi und API) entworfen von Mozilla für jede Plattform tragbar sein.[78] Es bietet Posix-ähnliche Funktionen wie Datei -E/A -eingeschränkt durch Fähigkeitsbasierte Sicherheit.[79][80] Es gibt auch einige andere vorgeschlagene ABI/APIs.[81][82]

Wasis wird von beeinflusst von Cloudabi und Capsicum.

Solomon Hykes, Mitbegründer von Docker, schrieb im Jahr 2019: "Wenn WASM+WASI 2008 existiert, hätten wir nicht docker erstellen müssen. So wichtig ist es. WebAssembly auf dem Server ist die Zukunft des Computers."[83] Wasmer, aus Version 1.0, enthält "Software -Containerisierung erstellen wir universelle Binärdateien, die überall ohne Änderung funktionieren, einschließlich Betriebssystemen wie Linux, MacOS, Windows und Webbrowsern. WASM sandkäfeln sandkäfende Anwendungen standardmäßig für sichere Ausführung."[83]

Spezifikation

Hostumgebung

Der allgemeine Standard enthält Kernspezifikationen für JavaScript -API und Details zum Einbetten.[5]

Virtuelle Maschine

Der WASM -Code (Binärcode, d. H. Bytecode) soll auf a ausgeführt werden tragbar virtuell Stapelmaschine (VM).[84] Die VM ist so konzipiert, dass sie schneller analysieren und ausgeführt werden kann als JavaScript und eine Kompaktcode -Darstellung.[48] Eine externe Funktionalität (wie Systems) Dies kann durch den Binärcode von WASM zu erwarten, der nicht vom Standard festgelegt wird. Es bietet eher eine Möglichkeit, Schnittstellen über Module durch die Hostumgebung zu liefern, in der die VM -Implementierung ausgeführt wird.[85][9]

WASM -Programm

Ein WASM-Programm ist ein separates Modul mit Sammlungen verschiedener WASM-definierter Werte und Programmtypdefinitionen. Diese werden entweder im binären oder im Textformat (siehe unten) ausgedrückt, die beide eine gemeinsame Struktur haben.[86]

Befehlssatz

Der Kernstandard für das binäre Format eines WASM -Programms definiert eine Anweisungsset Architektur (ISA) bestehend aus Spezifisch Binäre Codierungen von Arten von Operationen, die von der VM ausgeführt werden (ohne anzugeben, wie genau sie ausgeführt werden müssen).[87] Die Liste der Anweisungen enthält Standard -Speicherlast-/Speicheranweisungen, numerisch, parametrisch, Kontrolle des Flusses Anweisungstypen und wasmspezifische Variablenanweisungen.[88]

Die Anzahl der im ursprünglichen Standard (MVP) verwendeten Opcodes betrug etwas weniger als 200 der 256 möglichen Opcodes. Nachfolgende Versionen von WebAssembly haben die Anzahl der Opcodes etwas mehr als 200 vorgestellt. Die WebAssembly SIMD Vorschlag (zur parallelen Verarbeitung) führt ein alternatives Opcode -Präfix (0xfd) für ein 128-Bit Simd. Die Verkettung des SIMD -Präfixes sowie ein Opcode, der nach dem SIMD -Präfix gültig ist, bildet einen SIMD -Opcode. Die SIMD -Opcodes geben zusätzliche 236 Anweisungen für die SIMD -Fähigkeit "minimal lebensfähiges Produkt" (MVP) (für insgesamt rund 436 Anweisungen).[89][90] Diese Anweisungen, die "endgültigen Opcodes"[91] werden in Googles V8 (in Google Chrome) und in der entsprechenden Engine in Mozilla Firefox (in stabilen Versionen der Webbrowser nicht aktiviert) implementiert.[92] Es gibt auch einige zusätzliche Vorschläge für Anweisungen für spätere "Post SIMD MVP", und es gibt auch einen separaten "entspannten Simd" -Anvorschlag auf dem Tisch.[93]

Diese SIMD -Opcodes sind ebenfalls tragbar und übersetzen in native Befehlssets wie X64 und Arm. Im Gegensatz dazu weder Javas's JVM (Noch Cil) Unterstützung Simd bei ihrem Opcode -Ebene, d.h. im Standard; Beide haben einige parallele APIs, die SIMD -Beschleunigung bieten. Es gibt eine Erweiterung für Java hinzuzufügen Intrinsik für x64 SIMD,[94] Das ist nicht tragbar, d. H. Auf Arm- oder Smartphones nicht verwendbar. Smartphones können SIMD unterstützen, indem sie Assembly -Code mit SIMD aufrufen, und C# bietet ähnliche Unterstützung.

Codedarstellung

Im März 2017 erzielte die WebAssembly Community Group einen Konsens über das anfängliche Binärformat, die JavaScript -API und die Referenzdolmetscher (MVP).[95] Es definiert ein Binärformat von WebAssembly (.wasm), das nicht von Menschen verwendet werden soll, sowie für ein menschlich-lesbares WebAssembly-Textformat (.wat) Das ähnelt einer Kreuzung zwischen S-Expressionen und traditionellen Montagesprachen.

Die folgende Tabelle zeigt ein Beispiel für a Fakultät Funktion geschrieben in C und seinen entsprechenden WebAssembly -Code nach der Kompilierung, beide in gezeigt in .wat Textformat (eine menschenlesbare Textdarstellung von WebAssembly) und in .wasmus Binärformat (das Roh Bytecode, unten in ausgedrückt in hexadezimal), das wird von einem Webbrowser oder einer Laufzeitumgebung ausgeführt, die die WebAssembly unterstützt.

C Quellcode und entsprechende WebAssembly
C Quellcode WebAssembly .wat Textformat WebAssembly .wasmus Binärformat
int Fakultät(int n) {   wenn (n == 0)   Rückkehr 1;   anders   Rückkehr n * Fakultät(n-1); } 
(Func (Param i64) (Ergebnis i64)  local.get 0  i64.eqz  wenn (Ergebnis i64)  i64.Const 1  anders  local.get 0  local.get 0  i64.Const 1  i64.Sub  Anruf 0  i64.mul  Ende) 
00 61 73 6d 01 00 00 00 01 00 01 60 01 73 01 73 06 03 00 01 00 02 0A 00 01 00 00 20 00 50 04 7E 42 01 05 20 00 20 00 42 01 7d 10 00

Alle ganzzahligen Konstanten werden unter Verwendung einer platzeffizienten, variablen Länge codiert Leb128 Codierung.[96]

Das Textformat des WebAssembly -Textes ist kanonischer in einem gefalteten Format mit verwendetem Format geschrieben S-Expressionen. Für Anweisungen und Ausdrücke ist dieses Format rein syntethischer Zucker und hat keine Verhaltensunterschiede mit dem linearen Format.[97] Durch wasm2wat, der obige Code zersetzt::

(Modul  (Typ $ t0 (Func (Param i64) (Ergebnis i64)))  (Func $ f0 (Typ $ t0) (Param $ p0 i64) (Ergebnis i64)  (wenn $ I0 (Ergebnis i64) ;; $ I0 ist ein unbenutzter Label -Name  (i64.eqz  (local.get $ p0)) ;; Der Name $ p0 ist der gleiche wie 0 hier  (dann  (i64.Const 1))  (anders  (i64.mul  (local.get $ p0)  (Anruf $ f0  ;; Der Name $ f0 ist der gleiche wie 0 hier  (i64.Sub  (local.get $ p0)  (i64.Const 1))))))) 

Beachten Sie, dass ein Modul vom Compiler implizit generiert wird. Die Funktion wird tatsächlich durch einen Eintrag der Typtabelle in der Binärdatei verwiesen, daher ein Typabschnitt und der type vom Dekompiler emittiert.[98] Der Compiler und Dekompiler können online zugegriffen werden.[99]

Anmerkungen

  1. ^ Laut offiziellen Dokumentation kann das EMSCIPTEN SDK zum Erstellen verwendet werden .wasmus Dateien, die dann in einem Webbrowser ausgeführt werden können.[43][44][45] Auch wenn Emscripten bei Verwendung verschiedener Sprachen konsumieren kann KlangEs können einige Probleme auftreten.[46]

Siehe auch

Verweise

  1. ^ "WebAssembly/Design/Semantics.md". GitHub. Abgerufen 23. Februar 2021. WebAssembly -Code kann als als betrachtet werden Strukturierte Stapelmaschine; Eine Maschine, bei der die meisten Berechnungen einen Wertestapel verwenden, der Steuerfluss jedoch in strukturierten Konstrukten wie Blöcken, IFs und Schleifen ausgedrückt wird. In der Praxis müssen Implementierungen weder einen tatsächlichen Wertstapel noch tatsächliche Datenstrukturen für die Kontrolle beibehalten. Sie müssen sich nur so verhalten, als ob sie dies tun würden.
  2. ^ Mozilla. "WebAssembly -Textformat verstehen". MDN Web Docs. Abgerufen 9. Dezember 2019.
  3. ^ "Einführung - WebAssembly 1.0". WebAssembly.github.io. Abgerufen 18. Juni 2019. WebAssembly ist ein offener Standard ...
  4. ^ "Einführung - WebAssembly 1.0". WebAssembly.github.io. Abgerufen 18. Juni 2019. WebAssembly ist ein ... Codeformat
  5. ^ a b "Konventionen - WebAssembly 1.0". WebAssembly.github.io. Abgerufen 17. Mai 2019. WebAssembly ist eine Programmiersprache, die mehrere konkrete Darstellungen (sein Binärformat und das Textformat) aufweist. Beide müssen zu einer gemeinsamen Struktur geordnet werden.
  6. ^ "Einführung - WebAssembly 1.0". WebAssembly.github.io. Abgerufen 18. Juni 2019. ... Diese Spezifikation wird durch zusätzliche Dokumente ergänzt, die Schnittstellen zu bestimmten Einbettungsumgebungen wie dem Web definieren. Diese definieren jeweils eine WebAssembly Application Programming Interface (API), die für eine bestimmte Umgebung geeignet ist.
  7. ^ "Einführung - WebAssembly 1.1". WebAssembly.github.io. Abgerufen 19. Februar 2021. Das Hauptziel ist es, Hochleistungsanwendungen im Web zu ermöglichen. Es wird jedoch keine webspezifischen Annahmen getroffen oder webspezifische Funktionen bereitgestellt, sodass es auch in anderen Umgebungen verwendet werden kann.
  8. ^ Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titten, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14. Juni 2017). "Mit WebAssembly das Web auf den neuesten Stand bringen". Sigplan merkt. 52 (6): 185–200. doi:10.1145/3140587.3062363. ISSN 0362-1340. Während das Web die primäre Motivation für die WebAssembly ist, hängt nichts in seinem Design vom Web oder einer JavaScript -Umgebung ab. Es ist ein offener Standard, der speziell für die Einbettung in mehrere Kontexte entwickelt wurde, und wir erwarten, dass eigenständige Implementierungen in Zukunft verfügbar werden.
  9. ^ a b c "Außerhalb des Webs: eigenständige Webassembly -Binärdateien mit Emscripten · v8". v8.dev. Abgerufen 28. Juli 2020.
  10. ^ a b c "Wasmer - Die Universal WebAssembly -Laufzeit". Wasmer.io. Abgerufen 19. Februar 2021. Kompilieren Sie alles in WebAssembly. Führen Sie es auf einem Betriebssystem aus oder setzen Sie es in andere Sprachen ein.
  11. ^ World Wide Web Konsortium. "Kernspezifikation der WebAssembly". World Wide Web Consortium (W3). Abgerufen 9. Dezember 2019.
  12. ^ Couriol, Bruno. "WebAssembly 1.0 wird zu einer W3C -Empfehlung und der vierten Sprache, die in Browsern nativ ausgeführt wird". infoq.com. Abgerufen 9. Dezember 2019.
  13. ^ "WebAssembly -Spezifikation - WebAssembly 1.1". WebAssembly.github.io. Abgerufen 22. März 2021.
  14. ^ "Programmiersprachen Software Award". www.sigplan.org.
  15. ^ Bright, Peter (18. Juni 2015). "Das Web erhält seine Bytecode: WebAssembly". ARS Technica. Conde nast.
  16. ^ a b "Die neue Bytecode -Allianz bringt die Sicherheit, Allgegenwart und Interoperabilität des Webs in die Welt des durchdringenden Computers ein". Mozilla. 12. November 2019. Abgerufen 27. Mai 2019.
  17. ^ "Startfehler". GitHub / WebAssembly / Design. 11. Juni 2015.
  18. ^ Wagner, Luke (14. März 2016). "Ein Meilenstein der WebAssembly: Experimentelle Unterstützung in mehreren Browsern". Mozilla Hacks.
  19. ^ Thompson, Seth (15. März 2016). "Experimentelle Unterstützung für WebAssembly in V8". V8 Blog.
  20. ^ Zhu, Limin (15. März 2016). "Vorschau auf WebAssembly -Experimente in Microsoft Edge". Microsoft Edge Dev Blog.
  21. ^ Lardinois, Frederic (17. Juni 2015). "Google, Microsoft, Mozilla und andere arbeiten zusammen, um WebAssembly zu starten, ein neues binäres Format für das Web". Techcrunch. Abgerufen 24. Dezember 2017.
  22. ^ Avram, Abel (31. Mai 2017). "Google soll die Unterstützung für PNACl entfernen". Infoq. Abgerufen 22. Dezember 2017.
  23. ^ "WebAssembly: Ein binäres Format für das Web". ②alität - JavaScript und mehr. 18. Juni 2015.
  24. ^ "Starren auf die Sonne: Dalvik gegen Asm.js vs. Native". blog.mozilla.org. Abgerufen 7. Dezember 2019. Sogar die einzige Punktzahl, bei der ASM.JS besser gemacht wurde, ausgeführt es mit rund 70% der Geschwindigkeit des nativen C ++ - Code.
  25. ^ Arjun, Jangda, Abhinav Powers, Bobby Berger, Emery Guha (25. Januar 2019). Nicht so schnell: Analyse der Leistung von WebAssembly im Vergleich zum nativen Code. OCLC 1106328738.
  26. ^ a b Krill, Paul (6. März 2017). "WebAssembly ist jetzt bereit, dass Browser verwenden können". InfoWorld. Abgerufen 23. Dezember 2017.
  27. ^ "WebAssembly First Public Working Drafts". W3c. 15. Februar 2018. Abgerufen 20. April 2018.
  28. ^ "Kernspezifikation der WebAssembly". W3c. 15. Februar 2018. Abgerufen 20. April 2018.
  29. ^ "WebAssembly JavaScript -Schnittstelle". W3c. 15. Februar 2018. Abgerufen 20. April 2018.
  30. ^ "WebAssembly Web API". W3c. 15. Februar 2018. Abgerufen 20. April 2018.
  31. ^ "WebAssembly Worker -basierte Threads - Chrome -Plattformstatus". chromestatus.com. Abgerufen 19. Februar 2022.
  32. ^ "Nicht-Web-Einbettungen". WebAssembly. Abgerufen 15. Mai 2019.
  33. ^ "Nicht-Web-Einbettungen". GitHub / WebAssembly. Abgerufen 15. Mai 2019.
  34. ^ "Der Support für WebAssembly -Support ist jetzt in allen großen Browsern Versand". Der Mozilla -Blog. Abgerufen 21. November 2017.
  35. ^ "Einführung von New JavaScript -Optimierungen, WebAssembly, SharedArrayBuffer und Atomics in EdgeHTML 16". Microsoft Edge Dev Blog. 31. Oktober 2017. Abgerufen 21. November 2017.
  36. ^ "WebAssembly". Kann ich benutzen. Abgerufen 2. August 2022.
  37. ^ Bright, Peter (18. Juni 2015). "Das Web erhält seine Bytecode: WebAssembly". ARS Technica. Abgerufen 23. Dezember 2017.
  38. ^ "WASMTIME - Eine kleine und effiziente Laufzeit für WebAssembly & WASI". WASMTIME.DEV. Abgerufen 18. Dezember 2020.
  39. ^ "Roadmap". Abgerufen 7. Dezember 2021.
  40. ^ Ball, Kevin (26. Juni 2018). "Wie WebAssembly die Zukunft der Webentwicklung beschleunigt". Archiviert von das Original am 12. Februar 2019. Abgerufen 22. Oktober 2018.
  41. ^ a b "Tolle WebAssembly -Sprachen". GitHub. 26. Juni 2018. Abgerufen 15. Februar 2022.
  42. ^ Zakai, Alon [@Kripken] (21. Oktober 2019). "EMSCIPTEN hat standardmäßig auf das Upstream LLVM WASM-Backend gewechselt! (Tweet). Abgerufen 22. Oktober 2019 - via Twitter.
  43. ^ "Entwicklerhandbuch - WebAssembly". WebAssembly.org. Abgerufen 10. Juni 2019.
  44. ^ "Kompilien eines neuen C/C ++ - Moduls mit WebAssembly" zusammenstellen ". MDN Web Docs. Abgerufen 10. Juni 2019.
  45. ^ "Erstellen von WebAssembly - Emscripten 1.38.33 Dokumentation". emscripten.org. Abgerufen 10. Juni 2019.
  46. ^ "Emscripting eine C -Bibliothek zu Wasm | Web". Google -Entwickler. Abgerufen 10. Juni 2019.
  47. ^ "LLVM 8.0.0 Versionshinweise - LLVM 8 Dokumentation". Releases.llvm.org. Abgerufen 22. Oktober 2019.
  48. ^ a b "WebAssembly High-Level-Ziele". GitHub / WebAssembly / Design. 11. Dezember 2015.
  49. ^ Krill, Paul (29. November 2017). "Direct WebAssembly Compilation kommt zur Rostsprache". InfoWorld. Abgerufen 24. Dezember 2017.
  50. ^ "Häufig gestellte Fragen (FAQ) zu Blazor". Blazor.net. Abgerufen 18. Juni 2018.
  51. ^ Assemblyskript/Assemblyskript, Das Assemblyscript -Projekt, 9. September 2020, abgerufen 9. September 2020
  52. ^ Krill, Paul (26. Oktober 2017). "Was kommt als nächstes für WebAssembly: GC, Threads, Debugging". Techworld. Abgerufen 24. Dezember 2017.
  53. ^ "Müllsammlung · Ausgabe #16 · WebAssembly/Vorschläge". GitHub. Abgerufen 25. Juli 2019.
  54. ^ "Bolero: F# in WebAssembly". fsbolero.io. Abgerufen 25. Juli 2019.
  55. ^ "Pyodide: Bringen Sie den wissenschaftlichen Python -Stapel in den Browser - Mozilla Hacks - The Web Developer Blog".. Mozilla Hacks - Der Webentwicklerblog. Abgerufen 9. September 2020.
  56. ^ "Mozilla versucht Java zu machen, wie es hätte sein sollen - mit einer WASI -Spezifikation für alle Geräte, Computer, Betriebssysteme". www.theregister.com. Abgerufen 6. Oktober 2020.
  57. ^ "Julia im Browser". NextJournal.com. Abgerufen 9. April 2019.
  58. ^ "WebAssembly -Plattform von Tshort · Pull -Anfrage #2 · Juliapackaging/yggdrasil". GitHub. Abgerufen 9. April 2019.
  59. ^ Fischer, Keno (22. Juli 2019), Github - Keno/Julia -Wasm: Julia auf WASM rennen., abgerufen 25. Juli 2019
  60. ^ "Mruby in Ihrem Browser". Ruby.dj. Abgerufen 25. Juli 2019.
  61. ^ "WASM braucht eine bessere Speicherverwaltungsgeschichte · Ausgabe #1397 · WebAssembly/Design". GitHub. Abgerufen 15. Februar 2021.
  62. ^ "Stdweb - Rost". docs.rs. Abgerufen 5. Juni 2019. Ziel dieser Kiste ist es, Rostbindungen an die Web -APIs bereitzustellen und ein hohes Maß an Interoperabilität zwischen Rost und JavaScript zu ermöglichen.
  63. ^ "Web_Sys - Rost". docs.rs. Abgerufen 5. Juni 2019. Roh -API -Bindungen für Web -APIs. Dies ist eine prozedural generierte Kiste von Browser WebIDL, die eine Bindung an alle APIs bietet, die Browser im Web bereitstellen.
  64. ^ "WebAssembly/Content-Security-Policy". GitHub. Abgerufen 17. Februar 2021.
  65. ^ "948834 - Chrom - Ein Open -Source -Projekt, mit dem das Web nach vorne verschoben wird. - Monorail". bugs.chromium.org. Abgerufen 17. Februar 2021.
  66. ^ a b "Keine Möglichkeit, die WebAssembly auf Chrome ohne 'unsichere Eval' · Ausgabe Nr. 7 · WebAssembly/Inhalts-Security-Policy zu verwenden". GitHub. Abgerufen 17. Februar 2021.
  67. ^ a b c Neumann, Robert; Toro, Abel (19. April 2018). "In-Browser-Mining: Coinhive und WebAssembly". ForcePoint. Abgerufen 8. Juni 2019.
  68. ^ Cimpanu, Catalin (24. Juni 2018). "Änderungen in der WebAssembly könnten die Kernschmelze und Spectre -Browser -Patches unbrauchbar machen". Piepiercomputer. Abgerufen 8. Juni 2019.
  69. ^ Sanders, James (25. Juni 2018). "Wie ein undurchsichtiger WebAssembly -Code das Risiko von Spectre -Angriffen online erhöhen könnte". Tech Republik. Abgerufen 9. Juni 2019.
  70. ^ R, Bhagyashree (30. Oktober 2018). "Google Chrome 70 unterstützt jetzt WebAssembly-Threads, um Multi-Thread-Webanwendungen zu erstellen.". Packt Pub. Abgerufen 9. Juni 2019.
  71. ^ a b Lonkar, Aishwarya; Chandrayan, Siddhesh (Oktober 2018). "Die dunkle Seite der WebAssembly". Virus -Bulletin. Abgerufen 8. Juni 2019.
  72. ^ Segura, Jérôme (29. November 2017). "Persistent Drive-by Cryptomining kommt zu einem Browser in Ihrer Nähe". Malwarebytes. Abgerufen 8. Juni 2019.
  73. ^ "Jüngste Studien schätzt, dass 50% der Websites, die WebAssembly verwenden, sie für böswillige Zwecke anwenden". Infoq. Abgerufen 3. November 2019.
  74. ^ Muschel, Marius; Wressnegger, Christian; Johns, Martin; Rieck, Konrad (Juni 2019). "Neues Kind im Internet: Eine Studie über die Verbreitung von WebAssembly in freier Wildbahn". Erkennung von Intrusionen und Malware sowie Verwundbarkeitsbewertung (PDF). Vorlesungsnotizen in Informatik. Vol. 11543. Erkennung von Intrusionen und Malware sowie Verwundbarkeitsbewertung. S. 23–42. doi:10.1007/978-3-030-22038-9_2. ISBN 978-3-030-22037-2. S2CID 184482682. Abgerufen 15. Februar 2022. Folien (PDF)
  75. ^ Aaron Hilbig, Daniel Lehmann und Michael Pradel (April 2021). "Eine empirische Studie über reale Webassembly-Binärdateien: Sicherheit, Sprachen, Anwendungsfälle." (Archiviert April 2021) https://software-lab.org/publications/www2021.pdf
  76. ^ Watt, Conrad (8. Januar 2018). "Mechanisierung und Überprüfung der Webassembly -Spezifikation". Verfahren der 7. ACM Sigplan Internationalen Konferenz über zertifizierte Programme und Beweise. CPP 2018. Los Angeles CA USA: ACM: 53–65. doi:10.1145/3167082. ISBN 978-1-4503-5586-5. S2CID 9401691.
  77. ^ "Symbolisch ausführen WebAssembly in Manticore". 31. Januar 2020. Abgerufen 10. Februar 2020.
  78. ^ "WebAssembly System Interface Repo". GitHub / WebAssembly. 10. Februar 2020.
  79. ^ "Zusätzlicher Hintergrund zu Funktionen". GitHub. BytecodeAlliance. 4. März 2022.
  80. ^ "Standardisierung von WASI: Eine Systemschnittstelle zum Ausführen von WebAssembly außerhalb des Webs - Mozilla Hacks - The Web Developer Blog". Mozilla Hacks - Der Webentwicklerblog.
  81. ^ "Referenzsysroot Repo". GitHub / WebAssembly. 12. Januar 2020.
  82. ^ "WASM-C-API-Repo". GitHub / WebAssembly. 3. Februar 2020.
  83. ^ a b "Die" Wasmer "-Webassembly -Laufzeit ist im Allgemeinen verfügbar". Infoq. Abgerufen 19. Februar 2021.
  84. ^ "Design Begründung". GitHub / WebAssembly / Design. 1. Oktober 2016.
  85. ^ "Portabilität - WebAssembly". WebAssembly.org. Abgerufen 28. Juli 2020.
  86. ^ "Konventionen - WebAssembly 1.0". WebAssembly.github.io. Abgerufen 12. November 2019.
  87. ^ "Einführung - WebAssembly 1.0". WebAssembly.github.io. Abgerufen 17. Mai 2019.
  88. ^ "Anweisungen - WebAssembly 1.0". WebAssembly.github.io. Abgerufen 12. November 2019.
  89. ^ Lively Thomas (19. Februar 2021) [Pull-Anfrage am 2021-02-05 eröffnet]. "Finale Opcodes von Tlively · Pull Request #452 · WebAssembly/SIMD · GitHub". Bytecode -Allianz. Abgerufen 12. Mai 2021 - via GitHub.
  90. ^ Delendik, Yury (19. Februar 2021) [SIMD-Änderungen am 2021-02-19]. "Datei WASM-TOOLS/EXPR.RS unter B5C3D98E40590512A3B12470EF358D5C7B983B15 · ByteCodeAlliance/WASM-Tools · GitHub". Bytecode -Allianz. Abgerufen 12. Mai 2021 - via GitHub.
  91. ^ "Interpreter aktualisieren und Text mit endgültigen Opcodes von Ngzhian · Pull Request #486 · WebAssembly/SIMD" aktualisieren.. GitHub. Abgerufen 14. Mai 2021.
  92. ^ "WebAssembly/Simd". GitHub. Abgerufen 14. Mai 2021.
  93. ^ WebAssembly/entspannte Simd, WebAssembly, 3. Mai 2021, abgerufen 14. Mai 2021
  94. ^ "Wie wir den JVM 40x schneller gemacht haben". astojanov.github.io. Abgerufen 17. Februar 2021.
  95. ^ "Roadmap". WebAssembly. März 2017.
  96. ^ WebAssembly Community Group (Januar 2020). "WebAssembly -Spezifikation Release 1.0". Abgerufen 13. Januar 2020.
  97. ^ "Gefaltete Anweisungen". GitHub. / WebAssembly / Spec
  98. ^ "Module (binär)". WebAssembly 1.0.
  99. ^ "WebAssembly Binary Toolkit (WABT) Demos". WebAssembly.github.io.

Definition of Free Cultural Works logo notext.svgDieser Artikel enthält Text von a Kostenloser Inhalt Arbeit.Lizenziert unter Apache Lizenz 2.0 Lizenzerklärung/Genehmigung. Text entnommen von Textformat, Jfbastien;Rossberg-Chrom;Kripken;Titzer;S3thThompson;SunfishCode;lauwagner;Flagxor;Enricobacis;c3d;Binji;Andrewosh, Github.WebAssembly/Design. Um zu lernen, wie man hinzufügt Offene Lizenz Text an Wikipedia -Artikel, siehe bitte Diese How-to-Seite.Informationen zur Wiederverwendung von Text von Wikipedia finden Sie in den Nutzungsbedingungen.

Externe Links