È disponibile Wasmer 3.0, un toolkit per la creazione di applicazioni basate su WebAssembly

Viene introdotta la terza major release del progetto Wasmer, che sviluppa un runtime per l'esecuzione di moduli WebAssembly che possono essere utilizzati per creare applicazioni universali che possono essere eseguite su diversi sistemi operativi, nonché per eseguire codice non attendibile in isolamento. Il codice del progetto è scritto in Rust ed è distribuito sotto la licenza MIT.

La possibilità di eseguire un'applicazione su piattaforme diverse viene fornita compilando il codice in codice intermedio WebAssembly di basso livello, che può essere eseguito su qualsiasi sistema operativo o essere incorporato in programmi in altri linguaggi di programmazione. I programmi sono contenitori leggeri che eseguono lo pseudocodice WebAssembly. Questi contenitori non sono legati al sistema operativo e possono includere codice scritto originariamente in qualsiasi linguaggio di programmazione. Il toolkit Emscripten può essere utilizzato per compilare in WebAssembly. Per tradurre WebAssembly nel codice macchina della piattaforma attuale, supporta la connessione di vari backend di compilazione (Singlepass, Cranelift, LLVM) e motori (utilizzando JIT o generazione di codice macchina).

Le applicazioni sono isolate dal sistema principale in un ambiente sandbox e hanno accesso solo alle funzionalità dichiarate (un meccanismo di sicurezza basato sulla gestione delle capacità - per azioni con ciascuna delle risorse (file, directory, socket, chiamate di sistema, ecc.), il alla domanda devono essere attribuiti gli opportuni poteri). Il controllo dell'accesso e l'interazione con il sistema vengono forniti utilizzando l'API WASI (WebAssembly System Interface), che fornisce interfacce di programmazione per lavorare con file, socket e altre funzioni fornite dal sistema operativo.

La piattaforma consente di ottenere prestazioni di esecuzione delle applicazioni vicine agli assembly nativi. Utilizzando il motore di oggetti nativi per il modulo WebAssembly, è possibile generare codice macchina ("wasmer compile -native" per generare file oggetto precompilati .so, .dylib e .dll), che richiede un tempo di esecuzione minimo, ma mantiene tutto l'isolamento sandbox caratteristiche. E' possibile fornire programmi precompilati con Wasmer integrato. L'API Rust e la Wasm-C-API sono offerte per la creazione di componenti aggiuntivi ed estensioni.

Per avviare un contenitore WebAssembly, è sufficiente installare Wasmer nel sistema runtime, che viene fornito senza dipendenze esterne (“curl https://get.wasmer.io -sSfL | sh”), ed eseguire il file necessario (“wasmer test.wasm” ). I programmi sono distribuiti sotto forma di normali moduli WebAssembly, che possono essere gestiti utilizzando il gestore pacchetti WAPM. Wasmer è disponibile anche come libreria che può essere utilizzata per incorporare codice WebAssembly in programmi Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir e Java.

Principali modifiche in Wasmer 3.0:

  • Aggiunta la possibilità di creare file eseguibili nativi per qualsiasi piattaforma. Il comando "wasmer create-exe" è stato completamente riprogettato per convertire un file di codice intermedio WebAssembly in eseguibili autonomi per piattaforme Linux, Windows e macOS che possono essere eseguiti senza installare Wasmer stesso.
  • È possibile avviare i pacchetti WAPM situati nella directory wapm.io utilizzando il comando "wasmer run". Ad esempio, l'esecuzione di "wasmer run python/python" scaricherà il pacchetto python dal repository wapm.io e lo eseguirà.
  • L'API Wasmer Rust è stata completamente ridisegnata, modificando lo stile di lavoro con la memoria e fornendo la possibilità di salvare in sicurezza gli oggetti Wasm nella struttura dello Store. È stata proposta una nuova struttura MemoryView che consente di leggere e scrivere dati su un'area di memoria lineare.
  • È stato implementato un set di componenti wasmer-js per eseguire Wasmer in un browser Web e interagire con esso da JavaScript utilizzando la libreria wasm-bindgen. Nelle sue capacità, wasmer-js corrisponde ai componenti wasmer-sys progettati per eseguire Wasmer su normali sistemi operativi.
  • I motori sono stati semplificati. Invece di motori separati per JIT, collegamento dinamico e statico (Universal, Dylib, StaticLib), viene ora offerto un motore comune e il caricamento e il salvataggio del codice sono controllati a livello di impostazione dei parametri.
  • Per deserializzare gli artefatti viene utilizzato il framework rkyv, che garantisce il funzionamento in modalità zero-copy, ovvero che non richiede allocazione di memoria aggiuntiva ed esegue la deserializzazione solo utilizzando il buffer inizialmente fornito. L'uso di rkyv ha aumentato significativamente la velocità di avvio.
  • Il compilatore a passaggio singolo Singlepass è stato migliorato, aggiungendo il supporto per funzioni multivalore, maggiore affidabilità e aggiunto supporto per i frame di gestione delle eccezioni.
  • Implementazione migliorata dell'API WASI (WebAssembly System Interface). Sono stati risolti i problemi nell'interfaccia del software WASI per lavorare con il file system. I tipi interni sono stati riprogettati utilizzando WAI (WebAssembly Interfaces), che abiliteranno una serie di nuove funzionalità in futuro.

Fonte: opennet.ru

Aggiungi un commento