写点什么

Rust Cell 与 RefCell,有啥区别?

作者:非凸科技
  • 2022 年 3 月 29 日
  • 本文字数:441 字

    阅读完需:约 1 分钟

1.相同点:绕开所有权的限制,实现内部可变性

rust 的所有权规则:(1)只能由一个可变引用;(2)允许存在多个不可变引用

Cell 主要是一些 setter 和 getter 的方法,比如 set,get,replace,take, 但是呢,get 的方法需要变量实现 Copy trait,比如 String 类型没有实现 Copy trait, 那么 Cell::new(String::from("Hello")).get()会报错,提示说没有实现 Copy trait。

而 replace,set,take 则适用于 String 这种没有实现 Copy trait 的类型。一般来说,Cell 内部实现会发生内存的分配,性能较之 RefCell 有点大。

RefCell 提供了 borrow_mut 和 borrow,调用这两个方法时,rust 的运行时会检查所有权,比如 borrow_mut 调用时,类型已经存在了可变引用了,则会直接发生线程 panic,因此提供了返回错误的版本:try_borrow_mut 和 try_borrow。

2.不同点:

(1)Cell 是操作 T(values), RefCell 操作 &T(references)

(2)Cell 在编译器检查,运行时不会 panic;RefCell 在运行时检查,使用不当会发生 panic

非凸科技是 Rust 量化先行者,追求高效和极致。如果热衷 Rust,喜欢量化,欢迎加入非凸!


用户头像

非凸科技

关注

追求卓越算法,赋能量化交易 2022.02.22 加入

专注于智能算法交易领域的研究和开发

评论

发布
暂无评论
Rust Cell 与RefCell,有啥区别?_非凸科技_InfoQ写作平台