【 在 eGust (十年) 的大作中提到: 】
: 标 题: Re: 请教个rust基本问题,Rc<RefCell<T>>有啥坏处?
: 发信站: 水木社区 (Fri Dec 10 20:47:19 2021), 站内
: 至于数据结构,按照脚本语言的经验,有 Vec 和 HashMap,可以避免很大一部分自定义的复杂结构。而且一般意义上的数据结构,除非太冷门一般都会有现成的库可以用。如果能避免使用 Rc 的话,还是尽量 raii,这样才能最大化利用编译器带来的好处。如果无脑直接抄 poc 项目的代码,上来就优先考虑 Rc,那真的没啥必要非得 rust。用 c++ 不也一样可以直接翻译代码么,都是从零开始还能麻烦到哪去
c++ 和 rust 相比,差的可不仅仅是这一点。我们先是尝试了大半个月 c++,发现:
1. 没有主流包管理
2. cmake 写死人
3. pybinding 对接个 python,写起来也好烦好烦
4. raii 只是“建议”不是强制,内存安全还是要依靠人肉 code review
5. 连个像样的 string 都没有
6. 。。。。。
相反,尝试 rust 之后,以上问题都非常顺畅地解决了。pyo3 随便一跑就跑通了,比
pybinding 用起来不知道简单多少。
目前的结论是,如果要写无 gc 的高性能的东西,肯定不会去选 c/c++, 肯定是 rust。如果无 gc 的语言写起来太劳神,那也只能牺牲一点点性能,考虑 go swift 这种。肯定是不会去碰 c++ 的。。。
:
: 【 在 beep (菜M.喵星耗子) 的大作中提到: 】
: : 多谢长篇回复!
: : 多解释两句,rust的raii就是从c++抄来的,Box就是unique_ptr,Rc就是shared_ptr,几乎一样。在变量生命期方面,rust就是比c++多了一个“默认move语义”,而c++默认是copy语义。这一点需要习惯。因为默认move,所以编译期rust会给你检查是否使用了已经moved变量,提前警
: : rust里的Rc和普遍所说的ref count可能还有点角色上的不一样。rust里面有严格的所有权检查、读写引用冲突检查,所以其他语言里有些场合,不用rc也可以,但是在rust里,为了满足所有权传递和读写引用的要求,就必须要用rc,否则就要重新设计数据结构,甚至要对功能进行删
: : ...................
:
: --
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 203.211.111.*]
--
FROM 183.173.173.*