De release van het Wasmer 5.0-project is aangekondigd, dat de runtime ontwikkelt voor het uitvoeren van WebAssembly-modules, die kunnen worden gebruikt voor het creëren van universele toepassingen die op verschillende besturingssystemen kunnen draaien. Wasmer kan ook worden ingezet voor de geïsoleerde uitvoering van niet-vertrouwde codeblokken binnen gewone toepassingen. De code van het project is geschreven in Rust en wordt verspreid onder de MIT-licentie.
De mogelijkheid om ƩƩn applicatie op verschillende platformen te draaien, wordt gerealiseerd via de compilatie naar laag-niveau tussenliggende code van WebAssembly, die op elk besturingssysteem kan worden uitgevoerd of in programma's in andere programmeertalen kan worden ingebed. De programma's zijn lichte containers waarin pseudocode van WebAssembly wordt uitgevoerd. Deze containers zijn niet gebonden aan een specifiek besturingssysteem en kunnen code bevatten die oorspronkelijk in elke programmeertaal is geschreven.
Voor de uitvoering van de tussenliggende code van WebAssembly of de transformatie naar machinecode van het doelsysteem worden verschillende backends aangeboden:
- Backend op basis van de Singlepass-compiler, optimaal voor gebruik in blockchains.
- Backend op basis van de Cranelift-codegenerator, optimaal voor gebruik tijdens het ontwikkelingsproces.
- Backend op basis van de LLVM-compiler, optimaal voor gebruik in productietoepassingen.
- Backend voor uitvoering in web browsers.
- Backend op basis van de JavaScript-engine JavascriptCore, optimaal voor gebruik op macOS.
- Backend op basis van de JavaScript-engine V8, optimaal voor toepassingen op iOS en Android.
- Backend op basis van de Wasmi-interpreter, optimaal voor blockchains en Rust-projecten die geen standaardbibliotheek (nostd) gebruiken.
- Backend op basis van de WAMR-runtime, optimaal voor het iOS-platform.
Toepassingen zijn geĆÆsoleerd van het hoofd systeem in een sandbox-omgeving en hebben alleen toegang tot de gedeclareerde functionaliteit. Voor isolatie wordt een mechanisme op basis van capability management gebruikt: voor acties met elke bron (bestanden, mappen, sockets, systeem-aanroepen, enzovoort) moeten de juiste bevoegdheden aan de applicatie worden verleend. Toegangsbeheer en interactie met het systeem worden gerealiseerd via de WASI (WebAssembly System Interface) API, die interfaces biedt voor het werken met bestanden, sockets en andere systeemfuncties.
Het platform stelt je in staat om een applicatieprestatie te bereiken die dicht bij die van native builds ligt. Met de Native Object Engine voor de WebAssembly-module kan machinecode worden gegenereerd, waarvoor minimaal runtime vereist is, terwijl alle mogelijkheden van sandbox-isolatie behouden blijven. Er is een optie voor het leveren van voorgemonteerde programma's met ingebouwde Wasmer. Voor de creatie van extensies en aanvullingen zijn Rust API en Wasm-C-API beschikbaar.
Om een WebAssembly-container te starten, is het genoeg om de Wasmer-runtime in het systeem te installeren, die zonder externe afhankelijkheden wordt geleverd ("curl https://get.wasmer.io -sSfL | sh"), en het vereiste bestand te starten ("wasmer test.wasm"). Programma's worden verspreid als gewone WebAssembly-modules, waarvoor je de pakketbeheerder WAPM kunt gebruiken. Wasmer is ook beschikbaar in de vorm van een bibliotheek, die kan worden gebruikt voor het integreren van WebAssembly-code in programma's geschreven in de talen Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir en Java.
De belangrijkste vernieuwingen in Wasmer 5.0:
- De mogelijkheid om WebAssembly-interpreters te gebruiken is geĆÆmplementeerd.
- Er is een experimentele backend toegevoegd op basis van de lichtgewicht interpreter Wasmi, waarmee tussenliggende WebAssembly-code kan worden uitgevoerd in omgevingen met beperkte middelen.
- Er is een experimentele backend toegevoegd op basis van de WebAssembly-runtime WAMR (WebAssembly Micro Runtime), geoptimaliseerd voor minimaal resourceverbruik en geschikt voor gebruik op apparaten met beperkte hoeveelheid RAM.
- Er is een experimentele backend toegevoegd op basis van de JavaScript-engine V8, gebruikt in browsers die op de Chromium-codebasis draaien. Het belangrijkste voordeel van het gebruik van de V8-backend is de mogelijkheid om de ingebouwde debugger en tools voor webontwikkelaars in deze engine te gebruiken, evenals de beschikbaarheid van uitgebreide WebAssembly-functionaliteit in V8, zoals exception handling en garbage collection.
- In de backend die LLVM gebruikt, is er experimentele ondersteuning voor de Loongarch64-architectuur toegevoegd.
- Ondersteuning voor het iOS-platform is toegevoegd, beschikbaar bij het gebruik van de backends WAMR, Wasmi en V8.
- De ondersteuning voor de Emscripten-compiler is stopgezet.
- Afhankelijkheden zijn bijgewerkt, waaronder LLVM 18, codegenerator Cranelift 27 en framework rkyv 0.8.
- Er is prestatie-optimalisatie uitgevoerd. Bijvoorbeeld, bij het uitvoeren van deserialisatie van modules is er tot 50% prestatieverbetering waargenomen.







Bron: opennet.ru







