水木社区手机版
首页
|版面-编程技术(Programming)|
新版wap站已上线
返回
下页
|
尾页
|
1/7
|
转到
主题:请教个rust基本问题,Rc<RefCell<T>>有啥坏处?
楼主
|
beep
|
2021-12-04 00:12:46
|
只看此ID
团队正在迁往rust,有两种关于数据结构风格的意见:
1. 按照螃蟹书的风格建议,既然使用了rust,就需要先费心根据需求设计好所有权树,尽量少用Rc<RefCell<T>>,多用&和&mut解决问题
2. 因为业务需求变化不可预测,现在设计的所有权树不一定适应将来的需求,比如一个所有权树的根,将来要变成Rc多个主体拥有,哪个主体先死都不一定,那么现在就尽量多使用Rc<RefCell<T>>,其实就是把rust当作python来用,大部分重要的数据结构变量都进堆,都用Rc保证可以随便传递和复制所有权,都用RefCell来保证随时可borrow_mut,可写。而且不需要费心考虑所有权和引用规则的问题,虽然写起来罗嗦点,但是其实心智负担更轻。
我先自己说几个已知的Rc<RefCell<T>>的缺点:
a. 增加一些运行时的损耗,尤其是并行化映射为arc+rwlock之后运行时成本更严重,锁冲
突可能很严重;
b. 一些借用规则方面的错误被推迟到运行时panic才能暴露,debug起来比较困难;
c. RefCell的borrow和borrow_mut只基于{}block作用域分析,不支持NLL非词法生命期,所
以有时候需要手写额外的{}。
除此之外还有什么坑吗?
--
修改:beep FROM 123.120.160.*
FROM 123.120.160.*
1楼
|
z16166
|
2021-12-04 02:52:47
|
只看此ID
Rc<RefCell<T>>搞定不了循环引用。
这些帖子里有些观点感觉很不错
https://users.rust-lang.org/t/why-do-all-docs-say-refcell-is-bad/37086
https://users.rust-lang.org/t/if-you-use-enough-rc-refcell-t-does-rust-become-a-garbage-collected-language/61152/7
https://www.reddit.com/r/rust/comments/8jd43f/ownership_and_data_structures_that_arent_trees/
--
FROM 114.245.195.*
2楼
|
DreamDreams
|
2021-12-04 09:36:58
|
只看此ID
难道不是Rust新手先别自己设计树这类数据结构的实现么,标注库里不是有么。
【 在 beep (菜M.喵星耗子) 的大作中提到: 】
: 标 题: 请教个rust基本问题,Rc<RefCell<T>>有啥坏处?
: 发信站: 水木社区 (Sat Dec 4 00:18:55 2021), 站内
:
: 团队正在迁往rust,有两种关于数据结构风格的意见:
:
: 1. 按照螃蟹书的风格建议,既然使用了rust,就需要先费心根据需求设计好所有权树,尽量少用Rc<RefCell<T>>,多用&和&mut解决问题
:
: 2. 因为业务需求变化不可预测,现在设计的所有权树不一定适应将来的需求,比如一个所有权树的根,将来要变成Rc多个主体拥有,哪个主体先死都不一定,那么现在就尽量多使用Rc<RefCell<T>>,其实就是把rust当作python来用,大部分重要的数据结构变量都进堆,都用Rc保证可以随便传递和复制所有权,都用RefCell来保证随时可borrow_mut,可写。而且不需要费心考虑所有权和引用规则的问题,虽然写起来罗嗦点,但是其实心智负担更轻。
:
: 我的问题是,以上第二种做法,除了可能增加一些运行时的损耗、一些错误被推迟到运行时才能panic之外,还有哪些坏处呢?为什么rust的文档和书籍里不太推荐这种做法呢?
:
: --
:
: ※ 修改:·beep 于 Dec 4 00:20:34 2021 修改本文·[FROM: 123.120.160.*]
: ※ 来源:·水木社区 mysmth.net·[FROM: 123.120.160.*]
--
修改:beep FROM 123.120.160.*
FROM 114.241.12.221
3楼
|
beep
|
2021-12-04 10:17:55
|
只看此ID
多谢!学习一下
【 在 z16166 (Netguy) 的大作中提到: 】
: Rc<RefCell<T>>搞定不了循环引用。
: 这些帖子里有些观点感觉很不错
:
https://users.rust-lang.org/t/why-do-all-docs-say-refcell-is-bad/37086
: ...................
--
FROM 123.120.160.*
4楼
|
beep
|
2021-12-04 10:18:13
|
只看此ID
不是设计通用基础数据结构,是业务数据需要的特定结构
【 在 DreamDreams (光风霁月) 的大作中提到: 】
: 难道不是Rust新手先别自己设计树这类数据结构的实现么,标注库里不是有么。
--
FROM 123.120.160.*
5楼
|
todaysm
|
2021-12-04 10:46:11
|
只看此ID
为什么你什么都懂
【 在 z16166 的大作中提到: 】
: Rc<RefCell<T>>搞定不了循环引用。
:
: 这些帖子里有些观点感觉很不错
:
https://users.rust-lang.org/t/why-do-all-docs-say-refcell-is-bad/37086
:
https://users.rust-lang.
: ..................
发自「今日水木 on iPhone XS」
--
FROM 58.247.70.*
6楼
|
beep
|
2021-12-04 11:06:38
|
只看此ID
我先自己说几个已知的Rc<RefCell<T>>的缺点:
a. 增加一些运行时的损耗,尤其是并行化映射为arc+rwlock之后运行时成本更严重,锁冲突可能很严重;
b. 一些借用规则方面的错误被推迟到运行时panic才能暴露,debug起来比较困难;
c. RefCell的borrow和borrow_mut只基于{}block作用域分析,不支持NLL非词法生命期,所以有时候需要手写额外的{}。
除此之外还有什么坑吗?
【 在 z16166 (Netguy) 的大作中提到: 】
: 标 题: Re: 请教个rust基本问题,Rc<RefCell<T>>有啥坏处?
: 发信站: 水木社区 (Sat Dec 4 02:52:47 2021), 站内
:
: Rc<RefCell<T>>搞定不了循环引用。
:
: 这些帖子里有些观点感觉很不错
:
https://users.rust-lang.org/t/why-do-all-docs-say-refcell-is-bad/37086
:
https://users.rust-lang.org/t/if-you-use-enough-rc-refcell-t-does-rust-become-a-garbage-collected-language/61152/7
:
https://www.reddit.com/r/rust/comments/8jd43f/ownership_and_data_structures_that_arent_trees/
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net
·[FROM: 114.245.195.*]
--
FROM 123.120.160.*
7楼
|
txgx
|
2021-12-04 11:51:48
|
只看此ID
看头像就知道睿智,大气。
【 在 todaysm 的大作中提到: 】
: 为什么你什么都懂
: 发自「今日水木 on iPhone XS」
--
FROM 117.147.23.*
8楼
|
KEILLY
|
2021-12-04 16:25:58
|
只看此ID
哪本叫螃蟹书?
发现大部分rust的书,封面都是螃蟹。。
【 在 beep 的大作中提到: 】
: 团队正在迁往rust,有两种关于数据结构风格的意见:
:
: 1. 按照螃蟹书的风格建议,既然使用了rust,就需要先费心根据需求设计好所有权树,尽量少用Rc<RefCell<T>>,多用&和&mut解决问题
: ....................
--
FROM 124.160.154.*
9楼
|
Chear
|
2021-12-04 17:12:53
|
只看此ID
如果从零开始构建,还是从rust风格来更好,积重难返的道理
【 在 beep 的大作中提到: 】
: 团队正在迁往rust,有两种关于数据结构风格的意见:
: 1. 按照螃蟹书的风格建议,既然使用了rust,就需要先费心根据需求设计好所有权树,尽量少用Rc<RefCell<T>>,多用&和&mut解决问题
: 2. 因为业务需求变化不可预测,现在设计的所有权树不一定适应将来的需求,比如一个所有权树的根,将来要变成Rc多个主体拥有,哪个主体先死都不一定,那么现在就尽量多使用Rc<RefCell<T>>,其实就是把rust当作python来用,大部分重要的数据结构变量都进堆,都用Rc保证可以随便传递和复制所有权,都用RefCell来保证随时可borrow_mut,可写。而且不需要费心考虑所有权和引用规则的问题,虽然写起来罗嗦点,但是其实心智负担更轻。
: ...................
--
FROM 124.64.16.*
下页
|
尾页
|
1/7
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版