团队正在迁往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.*