In der Welt der modernen Webentwicklung und performanten Anwendungen sind WebAssembly (Wasm) und die Programmiersprache Rust zwei Technologien, die immer häufiger Hand in Hand gehen. Ihre Kombination ermöglicht es Entwickler:innen, hochoptimierte, sicherheitskritische Software zu erstellen, die sowohl auf dem Server als auch direkt im Browser beeindruckende Geschwindigkeiten erreicht.

With Rust, many of the classes of problem simply go away, by design. At the same time, software written in it is compatible with existing software written in C. What this means is that we can start to slowly migrate to Rust and significantly improve our security as a result.
Ivan Ristic, software engineer and founder of SSL Labs
Das Besondere an Rust liegt in seiner einzigartigen Kombination aus Leistung, Sicherheit und Produktivität. Es ist eine Systemprogrammiersprache, die die Geschwindigkeit von C++ bietet, aber gleichzeitig durch ein innovatives “Ownership”- und “Borrowing”-Modell Speichersicherheit und Thread-Sicherheit garantiert, ohne einen Garbage Collector zu benötigen. Das bedeutet, dass viele der häufigsten Fehler, wie Speicherlecks oder Datenkonflikte bei paralleler Ausführung, bereits zur Übersetzungszeit (Kompilierzeit) erkannt und verhindert werden. Hinzu kommt ein hervorragendes Ökosystem mit dem Paketmanager Cargo, nützlichen Fehlermeldungen des Compilers und einer wachsenden, engagierten Community, die die Entwicklung von zuverlässiger und effizienter Software erleichtert.
Wie üblich in der Welt in der Programmiersprachen zeigen wir das übersetzbare und ausführbare Minimalprogramm (für alle, die Rust noch nicht angefasst haben):
fn main() {
println!("Hello, world!");
}
Wir teilen dem Rust-Compiler hiermit mit, dass beim Ausführen des Programms einfach nur die Zeichenfolge Hello, World! ausgegeben werden soll und das Programm dann endet. (Für die Nerds: Es fügt noch eine neue Zeile ein und die Ausgabe erfolgt auf stdout.)
Das Ausrufezeichen zeigt an, dass es sich bei println!() um ein Makro handelt. Das hat Gründe, die in der funktionalen Sicherheit und im Sprachdesign liegen. Das sollte Anfänger:innen der Sprache aber nicht stören, denn println!() kann hier einfach nur als Funktion angesehen werden.

Mein Experiment Rusty Pi Cake nutzt Rust, um Wasm-Code zu generieren, der auf allen modernen Browsern im Web ausgeführt werden kann und die Eingangsfrage mit einem klaren Ja beantwortet.
Dabei wird im Browser parallel zum Hauptthread ein Webworker gestartet. Sehr vereinfacht gesagt ist der Hauptthread das, wo der Browser alle Berechnungen durchführt, um die Seite anzuzeigen, Code auszuführen und auf User-Interaktionen zu warten usw. Im sogenannten Webworker wird dann eine sehr rechenintensive Aufgabe ausgeführt, zu Demonstrationszwecken wird π mit vorgegebener Präzision berechnet. Würde die Berechnung im Hauptthread ausgeführt werden (der Normalfall), würde die Seite nicht mehr interaktiv sein und z. B. eine Fortschrittsanzeige würde nicht mehr aktualisiert werden: die Seite wäre blockiert.
Alle aktiven Komponenten sind in Rust geschrieben und werden als WebAssembly übersetzt und vom Browser ausgeführt. Dafür ist eine Art von Gerüst nötig, welches in Javascript geschrieben ist und den Wasm-Code lädt. Daher kommt das auch nicht ganz ohne Javascript aus.
cargo install trunk)rustup target add wasm32-unknown-unknown