我当然知道 raii 是从 c++ 来的,不然为啥说是上个世纪就存在的技术。
循环引用的问题是,结构一旦复杂起来,人肉很难意识到哪里产生了循环引用。如果没有编译期的检查,或者即使 runtime 有可以检查的功能,但并没有调用到,那就还是只能靠人肉。
至于数据结构,按照脚本语言的经验,有 Vec 和 HashMap,可以避免很大一部分自定义的复杂结构。而且一般意义上的数据结构,除非太冷门一般都会有现成的库可以用。如果能避免使用 Rc 的话,还是尽量 raii,这样才能最大化利用编译器带来的好处。如果无脑直接抄 poc 项目的代码,上来就优先考虑 Rc,那真的没啥必要非得 rust。用 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,否则就要重新设计数据结构,甚至要对功能进行删
: ...................
--
FROM 203.211.111.*