WebAssembly (WASM) – Ein tiefer Einblick: Teil 1
Dieser Beitrag ist der Auftakt einer Serie über WebAssembly. Unten finden Sie Links zu anderen Teilen der Serie.
WebAssembly oder WASM ist eine assemblyähnliche Low-Level-Sprache, die für die Ausführung von Anwendungen entwickelt wurde, die mit verschiedenen Programmiersprachen in einem Webbrowser erstellt wurden. Seine plattformübergreifende Natur und sein Low-Level-Design sorgen für nahezu native Geschwindigkeit und erschließen Webfunktionen, die mit JavaScript allein bisher nicht möglich waren. Wenn Sie sich nach schnelleren Web-Apps gesehnt haben, die rechenintensive Aufgaben bewältigen können, ist WASM die Lösung. In dieser Einführung werden die Kernfunktionen von WASM, ihre Ursprünge und die ersten Schritte bei der Verwendung behandelt.
WebAssembly ist ein Low-Level-Kompilierungsziel, das speziell für Webbrowser entwickelt wurde. Es ist keine Sprache für die direkte Ausführung; Stattdessen definiert es eine assemblyähnliche Struktur, in die andere Sprachen in kompilieren. Dieser Aspekt des „Kompilierungsziels“ ist der Schlüssel.
Betrachten Sie dieses C-Codebeispiel:
<code class="language-c">int a = 1; int b = 2; int c = a + b;</code>
Ein C-Compiler übersetzt dies in Montageanweisungen (oder Maschinencode):
<code class="language-assembly">mov eax, 1 ; Load 1 into register EAX mov ebx, 2 ; Load 2 into register EBX add eax, ebx ; Add EAX and EBX, result in EAX</code>
Dies wiederum erzeugt eine binäre Darstellung:
<code>00000000000000000000000000000011</code>
(Hinweis: Die genaue Binärausgabe variiert je nach CPU-Architektur. Dies ist eine vereinfachte Darstellung.)
Der C-Code wird in einen Assembler- und dann in einen Binärcode umgewandelt, der direkt vom Computer ausgeführt werden kann. WebAssembly modifiziert diesen Prozess. Anstelle einer Standardassembly könnte der Compiler Folgendes erzeugen:
<code>$a int $b int $c int set $a 1 set $b 2 set $c = add $a $b</code>
(Dies ist eine hypothetische Syntax nur zur Veranschaulichung, keine tatsächliche WASM-Syntax.)
Wenn alle Browser diese Syntax verstehen würden, würde dies die Webentwicklung revolutionieren. Compiler für Sprachen wie C, Rust und Go könnten diese Ausgabe generieren und so die Browserausführung von Programmen ermöglichen, die in jeder Sprache geschrieben wurden, unabhängig vom Betriebssystem oder Browser.
Die vom W3C definierte WebAssembly-Spezifikation gewährleistet eine konsistente Browser-Verarbeitung von WASM. Die wichtigsten Browser unterstützen WebAssembly bereits nativ.
WebAssembly hat zwei Hauptformate:
Diese Formate sind austauschbar; WAT kann in WASM konvertiert werden und umgekehrt. Das Kompilieren zu beiden ist möglich.
Lassen Sie uns unser Beispiel noch einmal mit WAT betrachten:
<code class="language-c">int a = 1; int b = 2; int c = a + b;</code>
<code class="language-assembly">mov eax, 1 ; Load 1 into register EAX mov ebx, 2 ; Load 2 into register EBX add eax, ebx ; Add EAX and EBX, result in EAX</code>
<code>00000000000000000000000000000011</code>
WebAssembly verwendet eine Stapelmaschine. get_local
schiebt Werte auf den Stapel, i32.add
fügt die beiden obersten Stapelelemente hinzu und set_local
speichert das Ergebnis. Das WASM-Binäräquivalent ist:
<code>$a int $b int $c int set $a 1 set $b 2 set $c = add $a $b</code>
Obwohl dies komplex erscheinen mag, denken Sie daran, dass WASM ein Kompilierungsziel und keine primäre Programmiersprache ist. Normalerweise schreiben Sie Code in höheren Sprachen und kompilieren ihn nach WASM.
Nein. WASM soll JavaScript ergänzen und nicht ersetzen. JavaScript zeichnet sich durch DOM-Manipulation und grundlegende Webinteraktionen aus, während WASM rechenintensive Aufgaben mit nahezu nativer Leistung bewältigt. Diese Synergie ermöglicht eine effiziente Aufgabenverteilung.
WASM ist aufgrund seiner Leistung ideal für:
Beispiele für bestehende WASM-Anwendungen sind Figma, Amazon Prime Video und Google Earth.
Während WASM zunächst browserorientiert war, gehen die Funktionen von WASM durch WASI (WebAssembly System Interface) über das Web hinaus. WASI bietet Standard-APIs, die die Erstellung plattformübergreifender Anwendungen aus einer einzigen Binärdatei ermöglichen, sodass keine plattformspezifischen Builds erforderlich sind.
Mehrere frühere Projekte versuchten, andere Sprachen in Browsern auszuführen, stießen jedoch häufig auf Einschränkungen aufgrund mangelnder Standardisierung, Sicherheitslücken oder Leistungsproblemen (ActiveX, Java-Applets, Flash, NaCl, asm.js, Dart). WebAssembly behebt diese Mängel durch Standardisierung, Portabilität, Sicherheit, Leistung und Erweiterbarkeit.
Diese Einführung bietet einen allgemeinen Überblick über WebAssembly. Nachfolgende Beiträge werden sich eingehender mit bestimmten Themen befassen und praktische WebAssembly-Projekte untersuchen.
Das obige ist der detaillierte Inhalt vonEinführung in WebAssembly. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!