Arbeit mit WebAssembly und Swift: von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in WebAssembly und Swift

\n

WebAssembly (WASM) ist ein binäres Low-Level-Anweisungsformat, das es ermöglicht, Code, der in verschiedenen Sprachen (C, C++, Rust, Swift) geschrieben wurde, im Browser und darüber hinaus mit nahezu nativer Geschwindigkeit auszuführen. Für Swift-Entwickler auf den Plattformen iOS und macOS eröffnet die Integration mit WebAssembly neue Möglichkeiten: die Übertragung bestehender Bibliotheken, die Beschleunigung von Rechenaufgaben und die plattformübergreifende Vereinheitlichung.

\n

In diesem Artikel erfahren Sie, wie Sie die Umgebung einrichten, Swift-Code in WASM kompilieren und ihn aus einer nativen Anwendung aufrufen. Wir betrachten praktische Beispiele und analysieren typische Fehler.

\n\n

1. Grundlagen von WebAssembly: Architektur und Vorteile

\n

WebAssembly stellt eine virtuelle Maschine mit linearem Speicher und strenger Typisierung dar. Die wichtigsten Merkmale:

\n
    \n
  • Sicherheit — isolierte Ausführung (Sandbox);
  • \n
  • Leistung — nahezu nativ durch Vorkompilierung;
  • \n
  • Kompaktheit — das binäre .wasm-Format benötigt wenig Platz;
  • \n
  • Integration — einfach aus JavaScript, Swift, Rust aufrufbar.
  • \n
\n

Für Swift gibt es das Projekt SwiftWasm, das es ermöglicht, Swift-Code in WASM zu kompilieren. Dies ist besonders nützlich für die Erstellung von Rechenmodulen, die dann in iOS-Anwendungen verwendet werden.

\n\n

2. Einrichtung der Umgebung für SwiftWasm

\n

Bevor Sie Code schreiben, installieren Sie die Werkzeuge. Öffnen Sie das Terminal und führen Sie Folgendes aus:

\n
# Installation von SwiftWasm (über Homebrew)\nbrew install swiftwasm/tap/swiftwasm\n\n# Überprüfung der Version\nswift --version
\n

Außerdem wird wasmtime für lokale Tests benötigt:

\n
brew install wasmtime
\n

Erstellen Sie ein neues Swift-Paket:

\n
mkdir MyWasmApp && cd MyWasmApp\nswift package init --type executable
\n\n

3. Schreiben und Kompilieren eines Swift-Moduls in WASM

\n

Betrachten wir ein einfaches Beispiel – eine Funktion zur Addition zweier Zahlen. Bearbeiten Sie die Datei Sources/main.swift:

\n
@_extern(wasm, module: "env", name: "add")\nfunc add(_ a: Int, _ b: Int) -> Int\n\n@main\nstruct App {\n    static func main() {\n        let result = add(5, 3)\n        print("Result: \\(result)")\n    }\n}
\n

Kompilieren Sie nun in WASM:

\n
swift build --triple wasm32-unknown-wasi
\n

Nach erfolgreicher Erstellung erscheint die Datei .build/wasm32-unknown-wasi/release/MyWasmApp.wasm. Führen Sie sie mit wasmtime aus:

\n
wasmtime .build/wasm32-unknown-wasi/release/MyWasmApp.wasm
\n

Sie sollten die Ausgabe sehen: Result: 8.

\n\n

4. Integration von WebAssembly in eine native iOS/macOS-Anwendung

\n

Nun zum interessantesten Teil – dem Aufruf einer WASM-Funktion aus einer Swift-Anwendung auf iOS. Verwenden Sie die Bibliothek WasmKit (oder WASMInterfaces).

\n

4.1 Hinzufügen der Abhängigkeit

\n

Fügen Sie in Package.swift Ihres iOS-Projekts Folgendes hinzu:

\n
dependencies: [\n    .package(url: "https://github.com/swiftwasm/WasmKit.git", from: "0.1.0")\n],\ntargets: [\n    .target(\n        name: "YourApp",\n        dependencies: ["WasmKit"]\n    )\n]
\n

4.2 Laden und Aufrufen des WASM-Moduls

\n

Beispielcode zum Laden einer .wasm-Datei und Aufrufen einer Funktion:

\n
import WasmKit\n\nfunc callWasmAdd() throws {\n    guard let wasmURL = Bundle.main.url(forResource: "MyWasmApp", withExtension: "wasm") else {\n        fatalError("WASM file not found")\n    }\n    let wasmData = try Data(contentsOf: wasmURL)\n    let engine = WasmEngine()\n    let module = try engine.loadModule(wasmData)\n    let instance = try module.instantiate()\n    \n    // Aufruf der Funktion add\n    let result = try instance.exports["add"]?.function?.call([5, 3])\n    print("WASM result: \\(result?.first ?? 0)")\n}
\n

Vergessen Sie nicht, die .wasm-Datei zu Ihrem App-Bundle hinzuzufügen.

Blogs

Buchempfehlungen