Rust and WebAssembly 10:本周動態
你好,歡迎閱讀Rust and WebAssembly:本周動態的最新一期!
Rust 是一種系統語言,旨在追求安全、並行和速度這三大目標。
WebAssembly 是堆疊式虛擬機器和指令組。它快速、安全、可攜式,而且是開放網路平台的一部分。透過編譯為 WebAssembly,我們可以在網路執行 Rust 程式碼!
本資訊是 Rust 和 WebAssembly 進度與社群的每週摘要。
我們是否漏掉什麼了嗎?請在 @rustwasm 上傳送推文給我們,或傳送拉取請求給我們。
來自網路的新聞和部落格文章
想確保我們下次發佈資訊時,某些內容能出現在清單上嗎?在此資訊上留言。
-
console_log
crate 是log
門面的後端,它將記錄的訊息傳送至瀏覽器的控制台。 -
Zemeroth 是一款使用 Rust 和 WebAssembly 編寫的回合制六角戰略遊戲。
-
Seed 是用於網頁應用程式的全新 Wasm 架構。
-
sendilkumarn/generator-wasm-app
是 Yeoman 的 Wasm 應用程式產生器。 -
edvorg/rustsmith
是使用 Rust 和 WebAssembly 為網路平台打造的 Rocksmith 副本。
#RustWasm2019
文章
-
Rust WebAssembly 2019,作者:Ryan Levick
-
我 2019 年的 Rust 夢:稱霸網路,作者:richardanaya
-
Wasm 2019,作者:Yoshua Wuyts
-
2019 年的 Rust 和 WebAssembly,作者:Nick Fitzgerald
-
2019 年 Rust Wasm 的非網路嵌入,作者:Brandon Fish 和 wasmer.io
Wasm 出現在 2019 年 Rust 全體會議
2019 年 Rust All Hands 聚會於 2 月 4 日至 8 日在柏林舉行。@ag_dubs、@alexcrichton、@fitzgen 和來自 Rust 與 WebAssembly 工作組的 @yoshuawuyts 都出席了本次聚會,討論了一些與 Wasm 相關的主題並對 2019 年進行規劃。
我們討論的話題包括
-
升級
wasm-pack
的方式。此會議旨在試著設定目標,於wasm-pack
1.0 版本發布時發布的內容,以及說明wasm-pack
最理想的使用體驗。 -
Wasm 的模組化工具套件。在
#RustWasm2019
的文章與 2019 年路線圖 RFC 中,關於為 Wasm 應用程式與函式庫建置模組化工具套件的討論很多。此會議旨在深入探討其中的細節內容。當然,也得討論命名方式。 -
針對 Wasm 的
cargo
建置工作、掛勾,或post-build.rs
。長遠來說(有可能在幾年後),我們希望建置 Rust 和 Wasm 專案的體驗與建置一般 Rust 專案的體驗完全相同:只使用cargo build
就完成了。但在rustc
發布 Wasm 二進位檔後,需要針對 Wasm 執行很多作業,例如產生 JS 繫結或執行wasm-opt
。此會議旨在了解如何為cargo
新增一些通用建置掛勾,並將wasm-pack
轉為專門針對 Wasm 開發的通用掛勾的實作。 -
Wasm 多執行緒和
rayon
。此會議旨在討論如何將我們的實驗性 Wasm 多執行緒支援轉為可靠的函式庫,作為網頁上多執行緒的基礎。來自rayon
團隊的 @CUViper 也加入會議,我們規劃了讓rayon
在 Wasm 中執行的實作方式。
來自 rustwasm/*
的更新內容
RFC
新的 RFC
-
2019 年路線圖 - 歡迎提出你的想法,讓我們能制定今年的目標!
已合併的 RFC
無。
手冊
- @DebugSteven 為「生命遊戲」教學課程撰寫了一個測試章節!
Twiggy🌱
-
@brson 修正了一個錯誤,這個錯誤會讓我們 嘗試分析未加解混淆卻被視為 C++ 符號的事物。
walrus
-
walrus
是一個寫 Wasm 轉 Wasm 轉換的新函式庫 crate。最後它會保留您轉換中的 Wasm 的 DWARF 除錯資訊,但目前尚未。 -
@alexcrichton 讓
walrus
對所有 Wasm 規範測試進行循環處理正確無誤。 -
@fitzgen 撰寫了一個簡單的 Wasm 測試程式,馬上就找出一個臭蟲,並快速修復。
-
@alexcrichton 重新編寫指令解析以 避免遞迴。這表示我們不會在除錯建置中或在提供惡意輸入時堆疊爆滿。
-
我們剛剛在 crates.io 上發布
walrus
0.1.0 — 期望未來walrus
會有更多令人興奮的事 :)
wasm-bindgen
-
@derekdreery 改善
JsValue
的std::fmt::Debug
輸出,使其包含物件屬性和它們的值,而不僅僅是[object Object]
。 -
@fitzgen 讓
wasm-bindgen-test
測試基礎架構 擷取更多console
記錄方法(warn
、info
等)的輸出以顯示於stdout
中。 -
@T5uku5hi 在
wasm-bindgen
的巨集產生的代碼中新增#[allow(clippy::all)]
,如此一來,在使用wasm-bindgen
的 crate 上執行 clippy 就比較不會有囉嗦的錯誤訊息。 -
@alexcrichton 新增支援 在 Wasm 和 JS 之間來回傳遞
Option<MyEnum>
,如果MyEnum
擁有#[wasm_bindgen]
屬性。 -
@fitzgen 新增
UnwrapThrowExt
特質到wasm-bindgen
的前置部分中。此擴充特質新增unwrap_throw
和expect_throw
方法給Option<T>
和Result<T, E>
,它們的行為和普通的unwrap
和expect
相同,不同之處在於失敗時會 throw 一個 JS 錯誤,而不是發生恐慌。這兩個本質上是相同的,但最終避開了std::panicking
和std::fmt
基礎架構,因此產生較小的程式碼尺寸。 -
@alexcrichton 將
wasm-bindgen
的 post-rustc
Wasm 轉換移轉到新的walrus
crate!這為透過wasm-bindgen
來管理 DWARF 除錯資訊鋪路。 -
@fitzgen 讓
wasm-bindgen-test
執行時間捕捉測試中已記錄的訊息 經由textContent
,而非innerHTML
,避免記錄 HTML 字串時出現的問題 ;)
wasm-pack
-
@drager 實作 在
wasm-pack
的Cargo.toml
區段中偵測錯誤類型。 -
@torkve 加入支援功能,讓您可以 經由
wasm-pack build
傳入額外的 CLI 參數,並將這些參數傳入cargo build
。例如,要啟用所有 cargo 功能而進行建置:wasm-pack build -- --all-features
。 -
這啟發了 @chinedufn,他加入了支援功能,讓您可以 經由
wasm-pack test
傳入額外的 CLI 參數,並將這些參數傳入cargo test
! -
@fitzgen 修復了一個錯誤,該錯誤導致 印出
wasm-pack test
的輸出兩次。 -
@rhysd 加入支援功能,讓您可以 在 crate 的
Cargo.toml
中存在時,在已產生的package.json
中發出“主頁”欄位。 -
@jscheffner 修復了
wasm-pack
在 Windows 上取得無抬頭瀏覽器測試的chromedriver
二進位檔案的方式。
徵求協助
想參與 Rust and WebAssembly?加入 Rust and WebAssembly 工作群組!