您好,登錄后才能下訂單哦!
WASI原理與Wasmtime配置是怎樣的,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
WASM(Web Assembly)盡管是為了提高網頁中性能敏感模塊表現而提出的字節碼標準, 但是WASM卻不僅能用在瀏覽器(broswer)中, 也可以用在其他環境中. 在這些環境中, 我們則需要支持WASI(WebAssembly System Interface, WASM系統接口)的runtime來執行我們編譯運行的wasm模塊. 本文將介紹Mozilla下的一個組織CraneStation所開發的WASM運行時wasmtime, 該運行時對WASI支持比較高.
WASI是一個新的API體系, 由Wasmtime項目設計, 目的是為WASM設計一套引擎無關(engine-indepent), 面向非Web系統(non-Web system-oriented)的API標準. 目前, WASI核心API(WASI Core)在做覆蓋文件, 網絡等等模塊的API, 但這些實現都是剛剛開始實現, 離實用還是有很長路要走.
在了解了WASI之后, 博主最后選定兩個WASM運行時進行探索: WASMER 與 Wasmtime.
這兩款運行時都號稱開始支持了WASI標準, 但博主使用rust-wasi-tutorial對兩款運行時進行試驗后,
發現WASMER對于文件讀取還是有些問題, 而Wasmtime則是通過了規格測試(基于specs testsuite),
因此本文接下來著重于Wasmtime的配置介紹.
由于目前Wasmtime與WASMER均只支持Unix-like環境, 接下來樓主將演示如何在WSL(Ubuntu 18.04)下配置Wasmtime.
而在目前比較方便生成wasm的編程語言中, 博主選擇使用自帶wasi目標的[rust編程語言], 可以”零代價”配置wasm相關工具鏈.
下載并安裝rustup: curl https://sh.rustup.rs -sSf | sh
, 安裝時使用默認 stable-x86_64-unknown-linux-gnu
工具鏈, 后面我們還會自行添加用于編譯wasm的nightly
工具鏈.
為cargo配置ustc反代, 提高crates(rust庫)下載速度2
安裝rustfmt: rustup component add rustfmt --toolchain stable-x86_64-unknown-linux-gnu
. Wasmtime的test腳本需要用到該組件.
安裝rust nightly工具鏈: rustup toolchain add nightly-x86_64-unknown-linux-gnu
. 當前rust的WASI目標還在開發中, 尚未穩定.
安裝rust WASI目標: rustup target add wasm32-unknown-wasi
.
安裝cmake與clang: sudo apt install cmake clang
, 用于編譯Wasmtime. Wasmtime目前尚未有正式發布版本, 故需要我們自行編譯.
拷貝Wasmtime源碼: git clone --recursive git@github.com:CraneStation/wasmtime.git ~/wasmtime
.
切換到Wasm源碼目錄: cd ~/wasmtime
執行測試腳本: ./test-all.sh
. 當腳本執行完畢并通過測試后, 說明wasmtime已經正常編譯并且能在當前WSL環境下正常工作, 可以使用生成的wasmtime可執行文件.
將生成的wasmtime拷貝到/usr/bin
目錄中: cp ~/wasmtime/target/release/wasmtime /usr/bin
, 以便在整個WSL環境中任意目錄執行wasmtime. wasmtime是個單文件(stand alone)運行時.
執行wasmtime --help
命令, 確認wasmtime成功安裝.
看完上述內容,你們掌握 WASI原理與Wasmtime配置是怎樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。