Rust Stable 1.45 中的 "神奇" Bug 解读
今天Rust 官方仓库里报告了一个神奇的Bug,该 Bug 似乎动摇了 Rust 的世界法则,该 Bug 的表现如下:
struct Foo {
x: i32,
}
fn main() {
let mut foo = Foo { x: 42 };
let x = &mut foo.x;
*x = 13;
let y = foo;
println!("{}", y.x); // -> 42; expected result: 13
}
正常情况下,最后的 y.x 应该输出 “13”,但是现在还是 “42”。这个结果意味着,代码第7行的可变引用并没有起到作用。
是不是很神奇?这个 Bug 让人感觉 Rust 世界的基本法则都崩塌了。
servo-unity:Unity的浏览器插件
servo是一个使用Rust开发的浏览器,servo-unity这个插件可以在unity构建的在AR/VR世界中展示一个浏览器窗口,在虚拟世界中拥有类似现实中的浏览器体验。本文介绍了这个插件能够实现的功能,以及它的工作原理、架构设计和一些挑战。
http://jamesmcm.github.io/blog/2020/07/25/intro-dod/#en)
Easy Rust 让Rust文档更容易理解
Rust的文档已经很全面了,但是很多非英语母语的人理解起来可能比较困难,easy rust用比较容易理解的表述方式组织了Rust文档。
能降低文档理解难度,确实能让一部分人受益,如果你想通过这个文档学习,最好以官方文档为主,将这个文档作为参考,否则可能会走上偏路。
Rust项目测试小技巧
在Rust项目中,如果你要对私有方法做测试,你该怎么办呢?临时将方法改为public?别再这样做了。你可以不创建tests文件夹,而是添加test模块,然后将方法改为pub(crate)。
#[cfg(test)]
mod tests;
From 日报小组 格朗, Lanpeng
社区学习交流平台订阅:
- Rustcc 论坛: 支持 rss
- [微信公众号:Rust语言中文社区](
评论区
写评论因为每个外部的 test 模块属于另外的 crate,所以无法访问当前 crate 中的私有方法。 而在当前 crate 下创建 test 模块,再将私有方法的权限设为
pub(crate)
即可达成方法只能在同一个 crate 中被访问,并且有一个配置为仅在 test 条件下编译的测试模块的目的。举个例子吧,假设原本的私有方法写为:
现在:
没理解 打个标记