Rust 和 WebAssembly 周报 10
大家好,欢迎阅读本期《Rust 和 WebAssembly 周报》!
Rust 是一种系统级编程语言,追求安全、并发和速度三者的完美结合。
WebAssembly 是一种基于堆栈的虚拟机和指令集。它快速、安全、可移植,并且是开放 Web 平台的一部分。通过编译到 WebAssembly,我们可以将 Rust 代码运行在 Web 上!
本周报将总结 Rust 和 WebAssembly 的最新进展和社区动态。
我们是否遗漏了什么?请在 Twitter 上关注我们 @rustwasm 或 向我们发送 Pull Request。
来自网络的新闻和博客文章
希望下次发布周报时,您的内容能出现在这个列表中?在此问题上留言。
-
The
console_log
crate 是 thelog
facade 的后端,它将记录的消息管道到浏览器的控制台。 -
Zemeroth 是一款使用 Rust 和 WebAssembly 编写的回合制六边形战术游戏。
-
Seed 是一个新的 Wasm 框架,用于 Web 应用程序。
-
sendilkumarn/generator-wasm-app
是一个用于 Yeoman 的 Wasm 应用程序生成器。 -
edvorg/rustsmith
是一个使用 Rust 和 WebAssembly 构建的 Web 平台上的 Rocksmith 克隆。
#RustWasm2019
文章
-
Rust WebAssembly 2019 by Ryan Levick
-
我的 Rust 2019 年梦想:统治 Web by richardanaya
-
Wasm 2019 by Yoshua Wuyts
-
2019 年的 Rust 和 WebAssembly by Nick Fitzgerald
-
2019 年 Rust Wasm 的非 Web 嵌入 by Brandon Fish and wasmer.io
2019 年 Rust 全员大会上的 Wasm
2019 年 Rust 全员大会于 2 月 4 日至 8 日在柏林举行。来自 Rust 和 WebAssembly 工作组的 @ag_dubs、@alexcrichton、@fitzgen 和 @yoshuawuyts 都参加了会议,讨论了一些与 Wasm 相关的主题并为 2019 年制定了计划。
我们讨论了
-
通往
wasm-pack
1.0 的道路。 此次会议的目的是确定我们希望在wasm-pack
1.0 版本中发布的内容,以及明确wasm-pack
的理想用户体验。 -
用于 Wasm 的模块化工具包。 在
#RustWasm2019
文章和 2019 年路线图 RFC 中,人们一直在讨论为 Wasm 应用程序和库构建模块化工具包。此次会议试图更深入地探讨这方面的细节。当然,还有命名问题。 -
cargo
构建任务、钩子和/或post-build.rs
用于 Wasm。 从长远来看(可能需要几年时间),我们希望构建 Rust 和 Wasm 项目的体验与构建普通 Rust 项目完全相同:只需cargo build
即可。但是,在rustc
生成 Wasm 二进制文件后,还需要为 Wasm 做很多事情,例如生成 JS 绑定或运行wasm-opt
。此次会议讨论了如何向cargo
添加某种通用构建钩子,并将wasm-pack
变成这些通用钩子的实现,专门针对 Wasm 开发。 -
Wasm 多线程和
rayon
。 此次会议讨论了如何将我们的实验性 Wasm 多线程支持转变为可靠的库,使其成为 Web 上多线程的基础。来自rayon
团队的 @CUViper 也加入了会议,我们制定了一个计划,说明如何让rayon
在 Wasm 中运行。
来自 rustwasm/*
的更新
RFC
新的 RFC
-
2019 年路线图 — 这是您帮助我们制定今年目标的机会!
已合并的 RFC
无。
书籍
- @DebugSteven 为生命游戏教程编写了测试部分!
Twiggy🌱
-
@brson 修复了一个错误,该错误会导致我们 尝试将不是 C++ 的符号反解为 C++ 符号。
walrus
-
walrus
是一个新的库 crate,用于编写 Wasm 到 Wasm 的转换。 它最终(但尚未)会为 Wasm 保留 DWARF 调试信息,以便在您的转换中使用。 -
@alexcrichton 使
walrus
正确地对所有 Wasm 规范测试进行往返转换。 -
@fitzgen 编写了一个简单的 Wasm 模糊测试器,立即发现了一个错误,并快速修复了它。
-
@alexcrichton 重构了指令解析,以 避免递归。这意味着我们在调试版本或遇到恶意输入时不会导致堆栈溢出。
-
我们刚刚在 crates.io 上发布了
walrus
0.1.0 — 期待未来walrus
的更多精彩内容 :)
wasm-bindgen
-
@derekdreery 改进了
std::fmt::Debug
对JsValue
的输出,使其包含对象属性及其值,而不仅仅是[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 在
wasm-bindgen
的前置中添加了UnwrapThrowExt
trait。此扩展 trait 向Option<T>
和Result<T, E>
添加了unwrap_throw
和expect_throw
方法,它们的行为与常规的unwrap
和expect
相同,只是在失败时会抛出 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 添加了对 在生成的
package.json
中发出“homepage”字段 的支持,如果该字段存在于 crate 的Cargo.toml
中。 -
@jscheffner 修复了
wasm-pack
在 Windows 上获取chromedriver
二进制文件 以进行无头浏览器测试。
贡献请求
想参与 Rust 和 WebAssembly 吗?加入 Rust 和 WebAssembly 工作组!