< 返回版块

lidongjies 发表于 2020-07-26 21:03

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 世界的基本法则都崩塌了。

Read More

servo-unity:Unity的浏览器插件

servo是一个使用Rust开发的浏览器,servo-unity这个插件可以在unity构建的在AR/VR世界中展示一个浏览器窗口,在虚拟世界中拥有类似现实中的浏览器体验。本文介绍了这个插件能够实现的功能,以及它的工作原理、架构设计和一些挑战。

Repo

Read More

http://jamesmcm.github.io/blog/2020/07/25/intro-dod/#en)

Easy Rust 让Rust文档更容易理解

Rust的文档已经很全面了,但是很多非英语母语的人理解起来可能比较困难,easy rust用比较容易理解的表述方式组织了Rust文档。

能降低文档理解难度,确实能让一部分人受益,如果你想通过这个文档学习,最好以官方文档为主,将这个文档作为参考,否则可能会走上偏路。

Repo

Rust项目测试小技巧

在Rust项目中,如果你要对私有方法做测试,你该怎么办呢?临时将方法改为public?别再这样做了。你可以不创建tests文件夹,而是添加test模块,然后将方法改为pub(crate)。

#[cfg(test)]
mod tests;

From 日报小组 格朗, Lanpeng

社区学习交流平台订阅:

评论区

写评论
zombie110year 2020-07-27 18:50

因为每个外部的 test 模块属于另外的 crate,所以无法访问当前 crate 中的私有方法。 而在当前 crate 下创建 test 模块,再将私有方法的权限设为 pub(crate) 即可达成方法只能在同一个 crate 中被访问,并且有一个配置为仅在 test 条件下编译的测试模块的目的。

举个例子吧,假设原本的私有方法写为:

fn private_function() -> i32 { 0 }

现在:

pub(crate) fn private_function() -> i32 { 0 }

#[cfg(test)]
mod tests {
  use super::*;
  #[test]
  fn test0 () {
    assert_eq!(private_function(), 0);
  }
}
rdigua 2020-07-27 02:00
 Rust项目测试小技巧 在Rust项目中,如果你要对私有方法做测试,你该怎么办呢?临时将方法改为public?别再这样做了。你可以不创建tests文件夹,而是添加test模块,然后将方法改为pub(crate)。

#[cfg(test)] mod tests; 

没理解 打个标记

1 共 2 条评论, 1 页