Wasmer 3.0 ist verfügbar, ein Toolkit zur Erstellung von WebAssembly-Anwendungen.

Die dritte bedeutende Version des Wasmer-Projekts wurde vorgestellt, das eine Runtime für die Ausführung von WebAssembly-Modulen entwickelt, die zur Erstellung universeller Anwendungen verwendet werden kann, die auf verschiedenen Betriebssystemen ausgeführt werden können, sowie für die isolierte Ausführung von nicht vertrauenswürdigem Code. Der Code des Projekts ist in Rust geschrieben und wird unter der MIT-Lizenz vertrieben.

Die Möglichkeit, eine Anwendung auf verschiedenen Plattformen auszuführen, wird durch die Kompilierung von Code in niedrigstufigen WebAssembly-Intermediate Code ermöglicht, der auf jedem Betriebssystem ausgeführt oder in Programme anderer Programmiersprachen eingebettet werden kann. Die Programme bestehen aus leichten Containern, in denen der WebAssembly-Pseudocode ausgeführt wird. Diese Container sind nicht an das Betriebssystem gebunden und können Code enthalten, der ursprünglich in jeder Programmiersprache geschrieben wurde. Für die Kompilierung in WebAssembly kann das Toolkit Emscripten verwendet werden. Für die Übersetzung von WebAssembly in den Maschinencode der aktuellen Plattform unterstützt die Anbindung unterschiedlicher Compiler-Backends (Singlepass, Cranelift, LLVM) und Engines (Einsatz von JIT oder Generierung von Maschinen-code).

Anwendungen sind in einer Sandbox-Umgebung von der Hauptsystemumgebung isoliert und haben nur Zugriff auf die deklarierte Funktionalität (ein Sicherheitsmechanismus auf der Grundlage von Berechtigungsmanagement – für Aktionen mit jedem der Ressourcen (Dateien, Verzeichnisse, Sockets, Systemaufrufe usw.) muss der Anwendung die entsprechenden Befugnisse erteilt werden). Der Zugriff und die Interaktion mit dem System werden durch die WASI-API (WebAssembly System Interface) ermöglicht, die Programmierschnittstellen für die Arbeit mit Dateien, Sockets und anderen Funktionen, die vom Betriebssystem bereitgestellt werden, bietet.

Die Plattform ermöglicht eine Ausführungsgeschwindigkeit von Anwendungen, die der von nativen Builds nahekommt. Mithilfe des Native Object Engine für das WebAssembly-Modul kann maschinenlesbarer Code generiert werden („wasmer compile —native“ zur Erstellung vorkompilierter Objektdateien .so, .dylib und .dll), für dessen Ausführung ein minimaler Runtime erforderlich ist, jedoch werden alle Möglichkeiten der Sandbox-Isolierung beibehalten. Es können vorkompilierte Programme mit integriertem Wasmer bereitgestellt werden. Für die Erstellung von Erweiterungen und Ergänzungen stehen Rust API und Wasm-C-API zur Verfügung.

Um einen WebAssembly-Container auszuführen, genügt es, das Wasmer-Runtime auf dem System zu installieren, das ohne externe Abhängigkeiten geliefert wird („curl https://get.wasmer.io -sSfL | sh“), und die erforderliche Datei auszuführen („wasmer test.wasm“). Programme werden in Form gewöhnlicher WebAssembly-Module verbreitet, deren Verwaltung über den Paketmanager WAPM erfolgen kann. Wasmer ist auch als Bibliothek verfügbar, die zur Einbindung von WebAssembly-Code in Programme in den Sprachen Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir und Java verwendet werden kann.

Wesentliche Änderungen in Wasmer 3.0:

  • Die Möglichkeit zur Erstellung nativer ausführbarer Dateien für alle Plattformen wurde hinzugefügt. Der Befehl „wasmer create-exe“ wurde vollständig überarbeitet, sodass eine Datei mit Zwischen-Code WebAssembly in eigenständige ausführbare Dateien für die Plattformen Linux, Windows und macOS umgewandelt werden kann, die ohne Installation von Wasmer funktionieren.
  • Die Möglichkeit, WAPM-Pakete, die im Verzeichnis wapm.io abgelegt sind, mit dem Befehl „wasmer run“ auszuführen, wurde bereitgestellt. Beispielsweise führt die Ausführung von „wasmer run python/python“ zum Laden des Pakets python aus dem Repository wapm.io und dessen Ausführung.
  • Das Wasmer Rust API wurde vollständig überarbeitet, wobei der Umgang mit dem Speicher geändert wurde und die sichere Speicherung von Wasm-Objekten in der Struktur Store ermöglicht wird. Es wurde eine neue Struktur MemoryView vorgeschlagen, die das Lesen und Schreiben von Daten im linearen Speicherbereich ermöglicht.
  • Ein Satz von Komponenten wasmer-js wurde implementiert, um Wasmer im Webbrowser auszuführen und mit ihm über JavaScript zu interagieren, wobei die Bibliothek wasm-bindgen verwendet wird. In Bezug auf die Möglichkeiten entspricht wasmer-js den Komponenten wasmer-sys, die für die Ausführung von Wasmer in herkömmlichen Betriebssystemen vorgesehen sind.
  • Die Engines wurden vereinfacht. Anstelle separater Engines für JIT, dynamisches und statisches Linking (Universal, Dylib, StaticLib) wird jetzt eine gemeinsame Engine angeboten, wobei das Laden und Speichern des Codes über Parametersteuerung verwaltet wird.
  • Für die Deserialisierung von Artefakten wird das Framework rkyv eingesetzt, das den Betrieb im Zero-Copy-Modus gewährleistet, d.h. es erfordert keine zusätzliche Speicherauslagerung und führt die Deserialisierung nur mit dem ursprünglich bereitgestellten Puffer durch. Der Einsatz von rkyv hat die Startgeschwindigkeit erheblich verbessert.
  • Der Ein-Pass-Compiler Singlepass wurde verbessert, wobei die Unterstützung für Funktionen mit mehreren Argumenten (Multi-Value) hinzugefügt, die Zuverlässigkeit erhöht und die Unterstützung für Exception-Handling-Frames implementiert wurde.
  • Die Implementierung der WASI-API (WebAssembly System Interface) wurde verbessert. Probleme in der WASI-Schnittstelle für den Umgang mit Dateisystemen wurden gelöst. Die internen Typen wurden überarbeitet, um WAI (WebAssembly Interfaces) zu verwenden, was in Zukunft die Einführung einer Reihe neuer Möglichkeiten ermöglichen wird.

Quelle: opennet.ru

60GB SSD 8Gb DDR4