用於構建基於 WebAssembly 的應用程序的工具包 Wasmer 3.0 可用

這是 Wasmer 項目的第三個主要版本,它開發了一個用於執行 WebAssembly 模塊的運行時,可用於創建可在不同操作系統上運行的通用應用程序,以及不受信任代碼的沙箱執行。 項目代碼是用 Rust 編寫的,並在 MIT 許可證下分發。

通過將代碼編譯成可以在任何操作系統上運行或嵌入到其他編程語言的程序中的低級 WebAssembly 中間代碼,可以提供在不同平台上運行相同應用程序的能力。 程序是運行 WebAssembly 偽代碼的輕量級容器。 這些容器與操作系統無關,可以包含最初以任何編程語言編寫的代碼。 Emscripten 工具包可用於編譯為 WebAssembly。 將WebAssembly翻譯成當前平台的機器碼,支持連接不同的編譯後端(Singlepass、Cranelift、LLVM)和引擎(使用JIT或生成機器碼)。

應用程序在沙盒環境中與主系統隔離,只能訪問聲明的功能(基於能力的安全機制——對於每個資源(文件、目錄、套接字、系統調用等)的操作,應用程序必須給予適當的權力)。 使用 WASI(WebAssembly 系統接口)API 提供訪問控制和與系統的交互,它提供用於處理文件、套接字和操作系統提供的其他功能的編程接口。

該平台允許您實現接近本機程序集的應用程序執行性能。 使用 WebAssembly 模塊的原生對象引擎,您可以生成原生代碼(“wasmer compile -native”用於生成預編譯的 .so、.dylib 和 .dll 目標文件),它需要最少的運行時間,但保留了所有功能沙箱隔離。 可以提供帶有內置 Wasmer 的預編譯程序。 提供 Rust API 和 Wasm-C-API 用於創建附加組件和附加組件。

要啟動 WebAssembly 容器,只需在系統上安裝沒有外部依賴項的 Wasmer 運行時(“curl https://get.wasmer.io -sSfL | sh”),然後運行必要的文件(“wasmer test .wasm”)。 程序以普通 WebAssembly 模塊的形式分發,可以使用 WAPM 包管理器進行管理。 Wasmer 還可以作為庫使用,可用於將 WebAssembly 代碼嵌入 Rust、C/C++、C#、D、Python、JavaScript、Go、PHP、Ruby、Elixir 和 Java 程序中。

Wasmer 3.0 的主要變化:

  • 添加了為任何平台創建本機可執行文件的功能。 “wasmer create-exe”命令已經過完全重新設計,可以將 WebAssembly 中間代碼文件轉換為適用於 Linux、Windows 和 macOS 平台的獨立可執行文件,無需安裝 Wasmer 本身即可運行。
  • 提供了使用“wasmer run”命令運行位於 wapm.io 目錄中的 WAPM 包的能力。 例如,執行“wasmer run python/python”將從 wapm.io 存儲庫下載 python 包並運行它。
  • Wasmer Rust API 已經完全重新設計,其中使用內存的方式已經改變,並且提供了在 Store 結構中安全存儲 Wasm 對象的能力。 提出了一種新的 MemoryView 結構,允許讀取和寫入數據到線性內存區域。
  • 已實施一組 wasmer-js 組件以在 Web 瀏覽器中運行 Wasmer 並使用 wasm-bindgen 庫從 JavaScript 與其交互。 Wasmer-js 在功能上類似於設計用於在常規操作系統上運行 Wasmer 的 wasmer-sys 組件。
  • 簡化引擎。 現在提供一個通用引擎,而不是用於 JIT、動態和靜態鏈接(Universal、Dylib、StaticLib)的單獨引擎,並在參數設置級別控制加載和保存代碼。
  • 為了反序列化工件,使用 rkyv 框架,它提供零拷貝操作,即不需要額外的內存分配並僅使用最初提供的緩衝區執行反序列化。 使用 rkyv 顯著提高了啟動速度。
  • Singlepass 編譯器已得到改進以支持多值函數、提高可靠性並添加對異常處理框架的支持。
  • 改進了 WASI(WebAssembly 系統接口)API 的實現。 修復了 WASI API 中用於處理文件系統的問題。 內部類型已使用 WAI(WebAssembly 接口)重新設計,這將允許在未來實現一系列新功能。

來源: opennet.ru

添加評論