您應該瞭解的工具
這是一份精選的令人讚嘆工具清單,當您進行 Rust 及 WebAssembly 開發時您應該瞭解這些工具。
開發、建置和工作流程協調
wasm-pack
| 程式庫
wasm-pack
致力於成為一套建立 Rust 生成的 WebAssembly 並與其協作的一站式服務,您可能想在網路或 Node.js 上與 JavaScript 進行互操作。wasm-pack
能協助您建置並發佈 Rust 生成的 WebAssembly 到 npm 程式庫,以用於與您已經使用的任何其他 JavaScript 套件中的工作流程一同使用。
最適化和處理 .wasm
二進位檔
<code>wasm-opt</code> | 倉庫
<code>wasm-opt</code> 工具會讀取 WebAssembly 作為輸入,執行轉換、最佳化和/或調試,然後輸出轉換後代 WebAssembly。透過 <code>rustc</code> 編譯 LLVM 產生的 <code>.wasm</code> 二進位檔,通常會產生同時較小且執行速度較快的 <code>.wasm</code> 二進位檔。此工具是 <code>binaryen</code> 專案的一部份。
<code>wasm2js</code> | 倉庫
<code>wasm2js</code> 工具會將 WebAssembly 編譯成「幾乎是 asm.js」。這非常適用於支援未實現 WebAssembly 的瀏覽器,例如 Internet Explorer 11。此工具是 <code>binaryen</code> 專案的一部份。
<code>wasm-gc</code> | 倉庫
一個小型工具,可用來對 WebAssembly 模組進行垃圾回收,並移除所有不需要的匯出、匯入、函式等等。這在實質上對 WebAssembly 來說是一個 <code>--gc-sections</code> 連接器標記。通常會自動啟用於 LTO 建置事項。
基於兩個原因,通常不需要自行使用此工具
- <code>rustc</code> 現在有一個較新的 <code>lld</code> 版本,支援 <code>--gc-sections</code> 標記。這在實質上會自動啟用於 LTO 建置事項。</p>
- <code>wasm-bindgen</code> CLI 工具會自動執行 <code>wasm-gc</code>。
<code>wasm-snip</code> | 倉庫
<code>wasm-snip</code> 會使用一個 <code>unreachable</code> 指令取代 WebAssembly 函式的本體。
也許你清楚知道某些函式在執行時永遠不會被呼叫,但編譯器在編譯時卻無法證明此事嗎?那就剪掉它!然後再次執行 <code>wasm-gc</code>,所有該函式傳遞性呼叫的函式(這些函式在執行時也永遠不會被呼叫)也會被移除。
這很適用於在非偵錯的製作建置事項中,強制移除 Rust 的恐慌基礎架構。
inspecting <code>.wasm</code> 二進位檔
<code>twiggy</code> | 倉庫
<code>twiggy</code> 是 <code>.wasm</code> 二進位檔的程式碼大小剖析器。它會分析二進位檔的呼叫圖,以回答下列問題
- 為何第一時間將此函式納入二進位檔中?亦即,哪些匯出函式傳遞性呼叫了它?
- 此函式的保留大小為何?亦即,如果我將此函式及移除該函式後成為死程式碼的所有函式移除,將可以節省多少空間。
使用 twiggy
讓你的二進位檔更精簡!
wasm-objdump
| 儲存庫
列印 .wasm
二進位檔及其各區段的底層明細。也支援反組譯成 WAT 文字格式。它就像 WebAssembly 的 objdump
。這是 WABT 專案的一部分。
wasm-nm
| 儲存庫
列出 .wasm
二進位檔中定義的已匯入、已匯出和私有函式符號。它就像 WebAssembly 的 nm
。