慢啃 Rust 系列 | Gazebo 库 之 Dupe
原文标题:Rust Nibbles - Gazebo : Dupe
「Rust Nibbles」 翻译成 「慢啃 Rust 」 没毛病吧 ?
这是 Facebook for Develpers 网站出的Rust Nibbles系列文章,介绍 facebook 开源的各种 Rust 库。
Gazebo 是 facebook 工程师 编写的基础库,Gazebo以独立模块的形式包含了一系列经过测试的Rust实用程序。这篇文章是介绍了 Gazebo 中的 Dupe trait 。
在Rust中,有两个用于 "复制 "一个值的相关特性--Copy和Clone。
在Gazebo中引入了第三个类似的trait,称之为Dupe,它可以在Gazebo Prelude中使用。(dupe 有复制物品/复制底片的意思)。
Copy 是 编译器的自动行为,复制成本也不高。而 Clone 则不然。为了降低 Clone 的成本,一般可以使用 Arc,但是 Arc 使得代码阅读成本提升。比如 let xs = ys.clone();
,你可能需要查看大量上下文来弄清是 调用了 Clone 还是 Arc 。当然你可以使用 let xs = Arc::clone(ys)
来提升可读性,但缺点是,它破坏了抽象。
所以,Gazebo 中引入了 Dupe trait, let xs = ys.dupe()
。
rust use gazebo::prelude::*; #[derive(Clone, Dupe)] struct MyArc(Arc);
看了