Wasmer 2.0, ein Toolkit zum Erstellen von WebAssembly-basierten Anwendungen, ist verfügbar

Das Wasmer-Projekt hat seine zweite Hauptversion veröffentlicht und entwickelt eine Laufzeit zum Ausführen von WebAssembly-Modulen, mit der universelle Anwendungen erstellt werden können, die auf verschiedenen Betriebssystemen ausgeführt werden können, sowie um nicht vertrauenswürdigen Code isoliert auszuführen. Der Projektcode ist in Rust geschrieben und wird unter der MIT-Lizenz vertrieben.

Portabilität wird erreicht, indem Anwendungscode in Low-Level-WebAssembly-Zwischencode kompiliert wird, der auf jedem Betriebssystem ausgeführt oder in Programme in anderen Programmiersprachen eingebettet werden kann. Bei den Programmen handelt es sich um leichtgewichtige Container, die WebAssembly-Pseudocode ausführen. Diese Container sind nicht an das Betriebssystem gebunden und können Code enthalten, der ursprünglich in einer beliebigen Programmiersprache geschrieben wurde. Das Emscripten-Toolkit kann zum Kompilieren in WebAssembly verwendet werden. Um WebAssembly in Maschinencode der aktuellen Plattform zu übersetzen, unterstützt es die Anbindung verschiedener Kompilierungs-Backends (Singlepass, Cranelift, LLVM) und Engines (mittels JIT oder Maschinencode-Generierung).

Die Zugriffskontrolle und Interaktion mit dem System erfolgt über die WASI-API (WebAssembly System Interface), die Programmierschnittstellen für die Arbeit mit Dateien, Sockets und anderen vom Betriebssystem bereitgestellten Funktionen bereitstellt. Anwendungen sind vom Hauptsystem in einer Sandbox-Umgebung isoliert und haben nur Zugriff auf die deklarierte Funktionalität (ein Sicherheitsmechanismus basierend auf Capability Management – ​​für Aktionen mit jeder der Ressourcen (Dateien, Verzeichnisse, Sockets, Systemaufrufe usw.), die (Der Antrag muss mit den entsprechenden Befugnissen ausgestattet werden.)

Um einen WebAssembly-Container zu starten, installieren Sie Wasmer einfach im Laufzeitsystem, das ohne externe Abhängigkeiten auskommt („curl https://get.wasmer.io -sSfL | sh“), und führen Sie die erforderliche Datei („wasmer test.wasm“) aus. ). Programme werden in Form regulärer WebAssembly-Module verteilt, die mit dem WAPM-Paketmanager verwaltet werden können. Wasmer ist auch als Bibliothek verfügbar, die zum Einbetten von WebAssembly-Code in Rust-, C/C++-, C#-, D-, Python-, JavaScript-, Go-, PHP-, Ruby-, Elixir- und Java-Programme verwendet werden kann.

Mit der Plattform können Sie eine Anwendungsausführungsleistung erzielen, die der von nativen Assemblys nahekommt. Mit der Native Object Engine für das WebAssembly-Modul können Sie Maschinencode generieren („wasmer compile -native“ zum Generieren vorkompilierter .so-, .dylib- und .dll-Objektdateien), der zur Ausführung nur minimale Laufzeit benötigt, aber die gesamte Sandbox-Isolation beibehält Merkmale. Es ist möglich, vorkompilierte Programme mit integriertem Wasmer auszuliefern. Für die Erstellung von Add-Ons und Erweiterungen werden die Rust-API und die Wasm-C-API angeboten.

Eine wesentliche Änderung der Versionsnummer von Wasmer ist mit der Einführung inkompatibler Änderungen an der internen API verbunden, von denen nach Angaben der Entwickler 99 % der Plattformbenutzer nicht betroffen sein werden. Zu den Änderungen, die die Kompatibilität beeinträchtigen, gehört auch eine Änderung im Format der serialisierten Wasm-Module (in Wasmer 1.0 serialisierte Module können in Wasmer 2.0 nicht verwendet werden). Weitere Änderungen:

  • Unterstützung für SIMD-Anweisungen (Single Instruction, Multiple Data), die eine Parallelisierung von Datenoperationen ermöglichen. Zu den Bereichen, in denen der Einsatz von SIMD die Leistung erheblich verbessern kann, gehören maschinelles Lernen, Videokodierung und -dekodierung, Bildverarbeitung, physikalische Prozesssimulation und Grafikmanipulation.
  • Unterstützung für Referenztypen, die es Wasm-Modulen ermöglicht, auf Informationen in anderen Modulen oder in der zugrunde liegenden Umgebung zuzugreifen.
  • Es wurden erhebliche Leistungsoptimierungen vorgenommen. Die Geschwindigkeit der LLVM-Laufzeit mit Gleitkommazahlen wurde um ca. 50 % erhöht. Funktionsaufrufe wurden erheblich beschleunigt, indem Situationen reduziert wurden, die einen Zugriff auf den Kernel erfordern. Die Leistung des Cranelift-Codegenerators wurde um 40 % gesteigert. Reduzierte Datendeserialisierungszeit.
    Wasmer 2.0, ein Toolkit zum Erstellen von WebAssembly-basierten Anwendungen, ist verfügbar
    Wasmer 2.0, ein Toolkit zum Erstellen von WebAssembly-basierten Anwendungen, ist verfügbar
  • Um das Wesentliche genauer wiederzugeben, wurden die Namen der Engines geändert: JIT → Universal, Native → Dylib (Dynamic Library), Object File → StaticLib (Static Library).

Source: opennet.ru

Kommentar hinzufügen