WebAssembly - Modulen

Hallo, ambitionierte Programmierer! Heute machen wir uns auf eine aufregende Reise in die Welt der WebAssembly-Module. Keine Sorge, wenn Sie neu im Programmieren sind – ich werde Ihr freundlicher Guide sein, und wir gehen das Schritt für Schritt durch. Bis zum Ende dieser Lektion werden Sie ein solides Verständnis von WebAssembly-Modulen und deren Funktionsweise haben. Tauchen wir ein!

WebAssembly - Modules

Was ist WebAssembly?

Bevor wir über Module sprechen, lassen Sie uns schnell mal klären, was WebAssembly ist. Stellen Sie sich vor, Sie bauen ein Sandkasten. WebAssembly ist wie ein spezieller Eimer, der es Ihnen ermöglicht, Burgen schneller und stärker als je zuvor zu bauen. In der Welt der Webentwicklung ist WebAssembly eine Low-Level-Sprache, die in Browsern ausgeführt wird und nahezu native Leistung ermöglicht.

Schritt 1: Verständnis von WebAssembly-Modulen

WebAssembly-Module sind die Bausteine von WebAssembly-Anwendungen. Stellen Sie sich sie als LEGO-Steine vor – jedes Modul ist eine selbst-contained Einheit, die mit anderen kombiniert werden kann, um etwas Amazinges zu schaffen.

Schlüsselkonzepte

  1. BinärfORMAT: Module werden typischerweise in einem binären Format verteilt (.wasm-Dateien).
  2. Kompilierung: Diese Module werden aus Sprachen wie C, C++ oder Rust kompiliert.
  3. Importe und Exporte: Module können Funktionalität importieren und ihre eigenen Funktionen exportieren.

Schritt 2: Erstellen und Verwenden von WebAssembly-Modulen

Nun gehen wir durch den Prozess des Erstellens und Verwendens eines WebAssembly-Moduls.

2.1 Schreiben des WebAssembly-Moduls

Zuerst müssen wir unser Modul schreiben. Wir verwenden eine einfache C-Funktion als Beispiel:

// add.c
int add(int a, int b) {
return a + b;
}

Diese Funktion addiert zwei Zahlen. Einfach, oder? Aber wie verwandeln wir das in ein WebAssembly-Modul?

2.2 Kompilierung zu WebAssembly

Um dies in WebAssembly zu kompilieren, verwenden wir ein Werkzeug namens Emscripten. Hier ist der Befehl:

emcc add.c -s WASM=1 -s EXPORTED_FUNCTIONS='["_add"]' -o add.js

Dieser Befehl erstellt zwei Dateien:

  • add.wasm: Unser WebAssembly-Modul
  • add.js: JavaScript-Verknüpfungscode, um unser Modul zu laden und zu verwenden

2.3 Laden des Moduls in JavaScript

Nun schauen wir, wie wir dieses Modul in einer Webseite verwenden können:

<!DOCTYPE html>
<html>
<head>
<title>WebAssembly Add Funktion</title>
</head>
<body>
<h1>WebAssembly Add Funktion</h1>
<p>Ergebnis: <span id="result"></span></p>
<script src="add.js"></script>
<script>
Module.onRuntimeInitialized = async _ => {
const result = Module._add(5, 3);
document.getElementById('result').textContent = result;
};
</script>
</body>
</html>

Codeerklärung

Lassen Sie uns zusammenbrechen, was in diesem Code passiert:

  1. Wir inkludieren die add.js-Datei, die unser WebAssembly-Modul lädt.
  2. Wir verwenden Module.onRuntimeInitialized, um sicherzustellen, dass das Modul geladen ist, bevor wir es verwenden.
  3. Wir rufen unsere add-Funktion mit Module._add(5, 3) auf.
  4. Das Ergebnis wird auf der Seite angezeigt.

Beispiel: Ein komplexeres Modul

Nun, da wir ein einfaches Beispiel gesehen haben, probieren wir etwas komplexeres aus. Wir erstellen ein Modul, das die Fakultät einer Zahl berechnet.

// factorial.c
int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}

Kompilieren wir es auf die gleiche Weise:

emcc factorial.c -s WASM=1 -s EXPORTED_FUNCTIONS='["_factorial"]' -o factorial.js

Nun verwenden wir es in unserer HTML:

<!DOCTYPE html>
<html>
<head>
<title>WebAssembly Fakultät</title>
</head>
<body>
<h1>WebAssembly Fakultätsrechner</h1>
<input type="number" id="input" value="5">
<button onclick="calculateFactorial()">Berechnen</button>
<p>Ergebnis: <span id="result"></span></p>
<script src="factorial.js"></script>
<script>
function calculateFactorial() {
const n = document.getElementById('input').value;
const result = Module._factorial(n);
document.getElementById('result').textContent = result;
}

Module.onRuntimeInitialized = async _ => {
calculateFactorial();
};
</script>
</body>
</html>

Ausgabe

Wenn Sie dies in einem Browser ausführen, sehen Sie ein Eingabefeld, in das Sie eine Zahl eingeben können. Wenn Sie auf die "Berechnen"-Schaltfläche klicken, wird die Fakultät dieser Zahl angezeigt, alle berechnet mit unserem WebAssembly-Modul!

Schlussfolgerung

Glückwunsch! Sie haben gerade Ihre ersten Schritte in die Welt der WebAssembly-Module unternommen. Wir haben die Grundlagen des Erstellens, Kompilierens und Verwendens von WebAssembly-Modulen in Webanwendungen behandelt. Denken Sie daran, das ist erst der Anfang – WebAssembly eröffnet eine ganze neue Welt der Möglichkeiten für die Webentwicklung, indem es Ihnen ermöglicht, hocheffiziente Berechnungen im Browser durchzuführen.

Wenn Sie Ihre Reise fortsetzen, werden Sie entdecken, wie WebAssembly für alles von Spielen bis hin zu komplexen Datenverarbeitungsaufgaben verwendet werden kann. Machen Sie weiter experimentieren und fürchten Sie sich nicht, die Grenzen dessen, was im Browser möglich ist, zu verschieben!

Methode Beschreibung
Module.onRuntimeInitialized Stellt sicher, dass das WebAssembly-Modul vollständig geladen ist, bevor es verwendet wird
Module._functionName Ruft eine Funktion auf, die aus dem WebAssembly-Modul exportiert wurde
emcc Emscripten-Kompiler-Befehl zum Erstellen von WebAssembly-Modulen

Denken Sie daran, das Lernen von WebAssembly ist wie das Fahrradfahren zu lernen – es mag am Anfang holprig sein, aber mit Übung werden Sie schnell davonfliegen. Viel Spaß beim Coden!

Credits: Image by storyset