Wasmer 3.0, un toolkit per custruisce applicazioni basate in WebAssembly, hè dispunibule

A terza liberazione maiò di u prughjettu Wasmer hè introduttu, chì sviluppa un runtime per eseguisce moduli WebAssembly chì ponu esse aduprati per creà applicazioni universali chì ponu eseguisce in diversi sistemi operativi, è ancu per eseguisce codice micca fiduciale in isolamentu. U codice di u prughjettu hè scrittu in Rust è hè distribuitu sottu a licenza MIT.

A capacità di eseguisce una applicazione nantu à e diverse piattaforme hè furnita da a compilazione di codice in u codice intermediu WebAssembly di livellu bassu, chì pò eseguisce in qualsiasi OS o esse incrustatu in prugrammi in altre lingue di prugrammazione. I prugrammi sò cuntenituri ligeri chì eseguinu pseudocode WebAssembly. Questi cuntenituri ùn sò micca ligati à u sistema upirativu è ponu include codice scrittu originale in ogni lingua di prugrammazione. U toolkit Emscripten pò esse usatu per cumpilà à WebAssembly. Per traduce WebAssembly in codice macchina di a piattaforma attuale, supporta a cunnessione di diversi backend di compilazione (Singlepass, Cranelift, LLVM) è motori (usendu JIT o generazione di codice macchina).

L'applicazioni sò isolate da u sistema principalu in un ambiente sandbox è anu accessu solu à e funziunalità dichjarata (un mecanismu di sicurezza basatu nantu à a gestione di capacità - per l'azzioni cù ognuna di e risorse (fichi, cartulari, sockets, chjama di sistema, etc.) l'applicazione deve esse attribuita i putenzi adatti). U cuntrollu di l'accessu è l'interazzione cù u sistema hè furnitu cù l'API WASI (WebAssembly System Interface), chì furnisce interfacce di prugrammazione per travaglià cù schedari, sockets è altre funzioni furnite da u sistema operatore.

A piattaforma permette di ottene prestazioni di esecuzione di l'applicazione vicinu à l'assemblee native. Utilizendu u Native Object Engine per u modulu WebAssembly, pudete generà codice macchina ("wasmer compile -native" per generà file d'ughjetti precompiled .so, .dylib è .dll), chì richiede un runtime minimu per esse run, ma mantene tuttu l'isolamentu di sandbox. caratteristiche. Hè pussibule furnisce i prugrammi precompilati cù Wasmer integratu. L'API Rust è Wasm-C-API sò offerti per creà add-ons è estensioni.

Per lancià un containeru WebAssembly, basta à stallà Wasmer in u sistema di runtime, chì vene senza dipendenze esterne ("curl https://get.wasmer.io -sSfL | sh"), è eseguite u schedariu necessariu ("wasmer test.wasm" ). I prugrammi sò distribuiti in forma di moduli WebAssembly regulari, chì ponu esse amministrati cù u gestore di pacchetti WAPM. Wasmer hè ancu dispunibule cum'è una libreria chì pò esse usata per incrustà u codice WebAssembly in i prugrammi Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir è Java.

I cambiamenti principali in Wasmer 3.0:

  • Aggiunta a capacità di creà fugliali eseguibili nativi per ogni piattaforma. U cumandamentu "wasmer create-exe" hè statu riprogettatu cumplettamente per cunvertisce un schedariu di codice intermediu WebAssembly in eseguibili autonomi per e plataforme Linux, Windows è macOS chì ponu eseguisce senza installà Wasmer stessu.
  • Hè pussibule lancià i pacchetti WAPM situati in u cartulare wapm.io usendu u cumandimu "wasmer run". Per esempiu, eseguisce "wasmer run python/python" scaricarà u pacchettu python da u repository wapm.io è eseguisce.
  • L'API Wasmer Rust hè stata completamente riprogettata, cambiendu u stilu di travaglià cù memoria è furnisce a capacità di salvà in modu sicuru l'uggetti Wasm in a struttura Store. Una nova struttura MemoryView hè stata pruposta chì permette di leghje è scrive dati in una zona di memoria lineale.
  • Un inseme di cumpunenti wasmer-js hè statu implementatu per eseguisce Wasmer in un navigatore web è interagisce cun ellu da JavaScript utilizendu a biblioteca wasm-bindgen. In e so capacità, wasmer-js currisponde à i cumpunenti wasmer-sys cuncepiti per eseguisce Wasmer in sistemi operativi regulari.
  • I mutori sò stati simplificati. Invece di mutori separati per JIT, ligami dinamichi è statici (Universal, Dylib, StaticLib), un mutore cumuni hè avà offertu, è u codice di carica è di salvezza hè cuntrullatu à u livellu di paràmetri di paràmetri.
  • Per deserialize l'artifacti, hè utilizatu u framework rkyv, chì assicura u funziunamentu in u modu di copia zero, i.e. chì ùn richiede micca allocazione di memoria addiziale è esegue a deserializazione solu utilizendu u buffer inizialmente furnitu. L'usu di rkyv hà aumentatu significativamente a velocità di startup.
  • U compilatore Singlepass single-pass hè statu migliuratu, aghjunghjendu supportu per funzioni multi-value, affidabilità mejorata, è aghjustatu supportu per i frames di gestione di eccezzioni.
  • Implementazione mejorata di l'API WASI (WebAssembly System Interface). I prublemi in l'interfaccia di u software WASI per travaglià cù u sistema di fugliale sò stati risolti. I tipi interni sò stati riprogettati cù WAI (WebAssembly Interfaces), chì permetterà una serie di funzioni novi in ​​u futuru.

Source: opennet.ru

Add a comment