È stata rilasciata la versione 5.0 del progetto Wasmer, che sviluppa un runtime per l'esecuzione di moduli WebAssembly, utilizzabile per creare applicazioni universali in grado di funzionare su diversi sistemi operativi. Wasmer può anche essere applicato per l'esecuzione isolata di blocchi di codice non attendibili all'interno di normali applicazioni. Il codice del progetto è scritto in Rust e distribuito con licenza MIT.
La possibilità di eseguire un'applicazione su diverse piattaforme è realizzata attraverso la compilazione in un codice intermedio a basso livello di WebAssembly, che può essere eseguito su qualsiasi sistema operativo o integrato in programmi scritti in altri linguaggi di programmazione. I programmi sono contenitori leggeri in cui viene eseguito il pseudocodice WebAssembly. Questi contenitori non sono legati a un sistema operativo e possono includere codice originariamente scritto in qualsiasi linguaggio di programmazione.
Per l'esecuzione del codice intermedio WebAssembly o la sua traduzione in codice macchina per la piattaforma di destinazione, sono proposti diversi backend:
- Un backend basato sul compilatore Singlepass, ottimale per l'uso nelle blockchain.
- Backend basato sul generatore di codice Cranelift, ideale per l'uso durante lo sviluppo.
- Backend basato sul compilatore LLVM, ottimale per implementazioni produttive.
- Backend per l'esecuzione nel web browser.
- Backend basato sul motore JavaScript JavascriptCore, ideale per l'uso su macOS.
- Backend basato sul motore JavaScript V8, ottimale per applicazioni su piattaforme iOS e Android.
- Backend basato sull'interprete Wasmi, ideale per blockchain e progetti Rust che non utilizzano la libreria standard (nostd).
- Backend basato sul runtime WAMR, ottimale per la piattaforma iOS.
Le applicazioni sono isolate dal sistema principale in un ambiente sandbox e hanno accesso solo alle funzionalità dichiarate. Per l'isolamento viene utilizzato un meccanismo basato sulla gestione delle capacità: per ogni risorsa (file, directory, socket, chiamate di sistema, ecc.) le applicazioni devono ricevere le corrispondenti autorizzazioni. La gestione degli accessi e l'interazione con il sistema sono garantite tramite l'API WASI (WebAssembly System Interface), che fornisce interfacce per lavorare con file, socket e altre funzioni di sistema.
La piattaforma consente di raggiungere prestazioni delle applicazioni simili a quelle delle build native. Con il Native Object Engine per il modulo WebAssembly, è possibile generare codice macchina che richiede un runtime minimo, mantenendo però tutte le funzionalità di isolamento sandbox. È possibile fornire programmi precompilati con Wasmer integrato. Per la creazione di estensioni e plugin sono disponibili le API Rust e Wasm-C-API.
Per avviare un container WebAssembly, è sufficiente installare il runtime Wasmer nel sistema, che viene fornito senza dipendenze esterne ("curl https://get.wasmer.io -sSfL | sh") e avviare il file necessario ("wasmer test.wasm"). I programmi sono distribuiti sotto forma di normali moduli WebAssembly, gestibili tramite il gestore di pacchetti WAPM. Wasmer è anche disponibile come libreria, utilizzabile per incorporare codice WebAssembly in programmi scritti in Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir e Java.
Le principali novità di Wasmer 5.0:
- Implementata la possibilità di utilizzare interpreti WebAssembly.
- Aggiunto un backend sperimentale basato sullinterprete leggero Wasmi, che consente di eseguire codice intermedio WebAssembly in ambienti con risorse limitate.
- Aggiunto un backend sperimentale basato sul WebAssembly runtime WAMR (WebAssembly Micro Runtime), ottimizzato per un consumo minimo di risorse e adatto per l'uso su dispositivi con poca memoria RAM.
- È stato aggiunto un backend sperimentale basato sul motore JavaScript v8, utilizzato nei browser sulla base di codice Chromium. Il principale vantaggio dell'utilizzo di un backend basato su V8 è la possibilità di utilizzare il debugger integrato in questo motore e gli strumenti per sviluppatori web, oltre alla disponibilità di funzionalità avanzate di WebAssembly in V8, come la gestione delle eccezioni e la raccolta dei rifiuti.
- Nel backend che utilizza LLVM, è stato aggiunto il supporto sperimentale per l'architettura Loongarch64.
- È stato aggiunto il supporto per la piattaforma iOS, disponibile utilizzando i backend WAMR, Wasmi e V8.
- È stata interrotta la supporto per il compilatore Emscripten.
- Aggiornate le dipendenze, tra cui LLVM 18, il generatore di codice Cranelift 27 e il framework rkyv 0.8.
- È stata effettuata un'ottimizzazione delle prestazioni. Ad esempio, durante l'esecuzione delle operazioni di deserializzazione dei moduli si osserva un aumento delle prestazioni fino al 50%.







Fonte: opennet.ru







