看了几天 rust, 总结了一句话关于生命周期

2023-05-03 11:09:22 +08:00
 iorilu
这个生命周期概念确实是 rust 独有

虽然这个理论并不新鲜, 但 rust 是强制,作为程序员必须明确知道所有变量或对象的生命周期,而不是靠编译器或语言自己推理

我总就一句话就是

这里我指一个复杂对象,里面可以有对别的对象引用

借我钱意思是引用我

我借别人钱意思是引用别人

所有借我钱的必须死我前面,这样我就能收回所有借出的钱

但我借别人钱我得死别人前面,这样就不用还钱

这样才能利益最大化啊。。
5203 次点击
所在节点    程序员
25 条回复
Tanix2
2023-05-03 11:14:26 +08:00
就是要保证不会有空引用
aijam
2023-05-03 11:21:02 +08:00
你到底说了几句话
misaka
2023-05-03 11:36:42 +08:00
你这一句话好长啊
adoal
2023-05-03 11:40:58 +08:00
只听田七嘶声道:“李寻欢,你好长的气”
Mohanson
2023-05-03 11:49:56 +08:00
RAII 好像不是 Rust 独有的, 但强制使用 RAII 应该是独一家?
zeal7s
2023-05-03 12:04:40 +08:00
啊?没有垃圾回收的语言都有生命周期吧,无非就是需要开发者自己维护,否则就是空异常
xtreme1
2023-05-03 12:10:15 +08:00
rustc 其实在相当多情况是帮你推理了生命周期的
如果意识不到这一点, 可以找个早期版本写一写
TWorldIsNButThis
2023-05-03 12:10:57 +08:00
是生存期 lifetime
不是生命周期 lifecycle
一个变量死了以后不会复活
gant
2023-05-03 12:43:36 +08:00
利益最大化?没了诚信你怎么利益最大化?你的的诚信一文不值?阴曹地府不讲诚信?判官让你投猪胎。
alne
2023-05-03 12:45:42 +08:00
重新定义一句话
vituralfuture
2023-05-03 13:25:51 +08:00
我觉得应该是类似一个有向树,就像软件的依赖一样,一个高级的对象引用了一些中级的对象,中级的对象引用了一些低级的对象,就像包管理器不能卸载一个被其他软件依赖的软件,要卸载软件,或者说要解除引用,应该先从最顶层开始

当然我并没有学过 rust ,只是个人理解
zhez
2023-05-03 14:23:20 +08:00
关于“借”,更应该写明“借出”和“借入”或“借给我”和“我借给”
e7
2023-05-03 14:32:19 +08:00
领导说“下面我简单说两句”,我们都错怪他了,确实只说了两句
iorilu
2023-05-03 14:44:49 +08:00
@zhez 确实, 应该更明确点

借我钱意思是引用我 => 别人找我借钱(我借出)意思是引用我

我借别人钱意思是引用别人 => 我找别人借钱(我借入)意思是我引用别人
chtcrack
2023-05-03 15:02:23 +08:00
这么简单的问题,为什么要搞那么复杂?,你申请了一块内存来用,不用的时候记得回收,就这样而已..
搞得花里胡哨没有一点意义..
MrHyde
2023-05-03 15:59:09 +08:00
循环引用怎么办?
Jirajine
2023-05-03 16:26:14 +08:00
用 RUST 最顺手的地方不是生命周期,而是和类型、强类型约束的错误处理。
defage
2023-05-03 17:05:05 +08:00
就是原来 C++编译器要干的事现在让程序员干大头了(^_^)
lmshl
2023-05-03 19:01:09 +08:00
你总结的不行,听我的一句话总结:
Rust Ownership 的设计目的只有一个,就是应该将 drop() 插入到哪个位置。
liuguang
2023-05-03 19:01:41 +08:00
简而言之,rust 中的引用必须保证引用的内存有效,不能出现无效引用。
在 C/C++,如果你的结构体字段是一个指针,但是指针指向的内存可能早就已经释放了,这时候读写这块内存,就是内存安全问题。
在 rust 语言中,一个结构体的字段如果是引用,就必须保证这个结构体的对象存在时,字段的引用必须有效。
这个要经过编译器检查的,也就是说,能编译通过的 rust 程序,就不会出现上面说的无效引用,不会出现这种内存安全问题。
而且也并不是函数中有引用,就需要标注生命周期。只有函数的输入输出都有引用时,才需要标注生命周期。
而且有三种范式是比较常见的,可以省略标注,因为编译器能理解,其他情况才需要去标注。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/936977

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX