Wasmer 3.0, een toolkit voor het bouwen van op WebAssembly gebaseerde applicaties, is beschikbaar

Dit is de derde grote release van het Wasmer-project, dat een runtime ontwikkelt voor het uitvoeren van WebAssembly-modules die kunnen worden gebruikt om universele applicaties te maken die op verschillende besturingssystemen kunnen worden uitgevoerd, evenals sandbox-uitvoering van niet-vertrouwde code. De projectcode is geschreven in Rust en gedistribueerd onder de MIT-licentie.

De mogelijkheid om dezelfde applicatie op verschillende platforms uit te voeren, wordt geboden door de code te compileren tot een low-level WebAssembly-tussenliggende code die op elk besturingssysteem kan worden uitgevoerd of kan worden ingebed in programma's in andere programmeertalen. Programma's zijn lichtgewicht containers die WebAssembly-pseudocode uitvoeren. Deze containers zijn niet gebonden aan het besturingssysteem en kunnen code bevatten die oorspronkelijk in elke programmeertaal is geschreven. De Emscripten-toolkit kan worden gebruikt om naar WebAssembly te compileren. Om WebAssembly te vertalen naar de machinecode van het huidige platform, wordt het ondersteund om verschillende compilatie-backends (Singlepass, Cranelift, LLVM) en engines (met behulp van JIT of het genereren van machinecode) met elkaar te verbinden.

Applicaties zijn geïsoleerd van het hoofdsysteem in een sandbox-omgeving en hebben alleen toegang tot de aangegeven functionaliteit (op capaciteit gebaseerd beveiligingsmechanisme - voor acties met elk van de bronnen (bestanden, mappen, sockets, systeemaanroepen, enz.) moet de applicatie de juiste bevoegdheid krijgen). Toegangscontrole en interactie met het systeem wordt geleverd met behulp van de WASI (WebAssembly System Interface) API, die programmeerinterfaces biedt voor het werken met bestanden, sockets en andere functies die door het besturingssysteem worden geleverd.

Met het platform kunt u uitvoeringsprestaties van applicaties bereiken die dicht bij die van native assemblies liggen. Met behulp van de Native Object Engine voor een WebAssembly-module kunt u native code genereren ("wasmer compile -native" voor het genereren van vooraf gecompileerde .so-, .dylib- en .dll-objectbestanden). sandbox-isolatie. Het is mogelijk om voorgecompileerde programma's te leveren met ingebouwde Wasmer. Rust API en Wasm-C-API worden aangeboden voor het maken van add-ons en add-ons.

Om een ​​WebAssembly-container te starten, volstaat het om Wasmer-runtime op het systeem te installeren, dat wordt geleverd zonder externe afhankelijkheden ("curl https://get.wasmer.io -sSfL | sh"), en voer het benodigde bestand uit ("wasmer-test .wasm"). Programma's worden gedistribueerd in de vorm van gewone WebAssembly-modules, die kunnen worden beheerd met behulp van de WAPM-pakketbeheerder. Wasmer is ook beschikbaar als een bibliotheek die kan worden gebruikt om WebAssembly-code in te sluiten in Rust-, C/C++-, C#-, D-, Python-, JavaScript-, Go-, PHP-, Ruby-, Elixir- en Java-programma's.

Grote veranderingen in Wasmer 3.0:

  • De mogelijkheid toegevoegd om native uitvoerbare bestanden voor elk platform te maken. De opdracht "wasmer create-exe" is volledig opnieuw ontworpen om een ​​tussenliggend codebestand van WebAssembly te converteren naar zelfstandige uitvoerbare bestanden voor Linux-, Windows- en macOS-platforms die kunnen worden uitgevoerd zonder Wasmer zelf te installeren.
  • De mogelijkheid om WAPM-pakketten in de map wapm.io uit te voeren met behulp van de opdracht "wasmer run" is beschikbaar. Als u bijvoorbeeld "wasmer run python/python" uitvoert, wordt het python-pakket uit de wapm.io-repository gedownload en uitgevoerd.
  • De Wasmer Rust API is volledig opnieuw ontworpen, waarbij de stijl van werken met geheugen is gewijzigd en de mogelijkheid is geboden om Wasm-objecten veilig op te slaan in de Store-structuur. Er wordt een nieuwe MemoryView-structuur voorgesteld die het lezen en schrijven van gegevens naar een lineair geheugengebied mogelijk maakt.
  • Er is een set wasmer-js-componenten geïmplementeerd om Wasmer in een webbrowser uit te voeren en ermee te communiceren vanuit JavaScript met behulp van de wasm-bindgen-bibliotheek. Wasmer-js is qua functionaliteit vergelijkbaar met de wasmer-sys-componenten die zijn ontworpen om Wasmer op reguliere besturingssystemen uit te voeren.
  • Vereenvoudigde motoren. In plaats van aparte engines voor JIT, dynamische en statische koppeling (Universal, Dylib, StaticLib), wordt nu één gemeenschappelijke engine aangeboden en laadt en bewaart code waarin wordt aangestuurd op het niveau van parameterinstellingen.
  • Om artefacten te deserialiseren, wordt het rkyv-framework gebruikt, dat een kopieervrije werking biedt, d.w.z. waarvoor geen extra geheugentoewijzing nodig is en deserialisatie wordt uitgevoerd met alleen de aanvankelijk geleverde buffer. Het gebruik van rkyv verhoogde de opstartsnelheid aanzienlijk.
  • De Singlepass-compiler is verbeterd om functies met meerdere waarden te ondersteunen, de betrouwbaarheid te verbeteren en ondersteuning toe te voegen voor frames voor het afhandelen van uitzonderingen.
  • Verbeterde implementatie van de WASI (WebAssembly System Interface) API. Problemen opgelost in de WASI API voor het werken met het bestandssysteem. Interne typen zijn opnieuw ontworpen met behulp van WAI (WebAssembly Interfaces), waardoor in de toekomst een reeks nieuwe functies kunnen worden geïmplementeerd.

Bron: opennet.ru

Voeg een reactie