看了几天 rust, 总结了一句话关于生命周期 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复粘贴 AI 生成的内容
iorilu
V2EX    程序员

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

  •  1
     
  •   iorilu 2023-05-03 11:09:22 +08:00 via Android 5624 次点击
    这是一个创建于 902 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个生命周期概念确实是 rust 独有

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

    我总就一句话就是

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

    借我钱意思是引用我

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

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

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

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

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

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

    我借别人钱意思是引用别人 => 我找别人借钱(我借入)意思是我引用别人
    chtcrack
        15
    chtcrack  
       2023-05-03 15:02:23 +08:00
    这么简单的问题,为什么要搞那么复杂?,你申请了一块内存来用,不用的时候记得回收,就这样而已..
    搞得花里胡哨没有一点意义..
    MrHyde
        16
    MrHyde  
       2023-05-03 15:59:09 +08:00   1
    循环引用怎么办?
    Jirajine
        17
    Jirajine  
       2023-05-03 16:26:14 +08:00
    用 RUST 最顺手的地方不是生命周期,而是和类型、强类型约束的错误处理。
    defage
        18
    defage  
       2023-05-03 17:05:05 +08:00   1
    就是原来 C++编译器要干的事现在让程序员干大头了(^_^)
    lmshl
        19
    lmshl  
       2023-05-03 19:01:09 +08:00
    你总结的不行,听我的一句话总结:
    Rust Ownership 的设计目的只有一个,就是应该将 drop() 插入到哪个位置。
    liuguang
        20
    liuguang  
       2023-05-03 19:01:41 +08:00
    简而言之,rust 中的引用必须保证引用的内存有效,不能出现无效引用。
    在 C/C++,如果你的结构体字段是一个指针,但是指针指向的内存可能早就已经释放了,这时候读写这块内存,就是内存安全问题。
    在 rust 语言中,一个结构体的字段如果是引用,就必须保证这个结构体的对象存在时,字段的引用必须有效。
    这个要经过编译器检查的,也就是说,能编译通过的 rust 程序,就不会出现上面说的无效引用,不会出现这种内存安全问题。
    而且也并不是函数中有引用,就需要标注生命周期。只有函数的输入输出都有引用时,才需要标注生命周期。
    而且有三种范式是比较常见的,可以省略标注,因为编译器能理解,其他情况才需要去标注。
    liuguang
        21
    liuguang  
       2023-05-03 19:15:19 +08:00
    别人借我钱,别人必须活的比我长。如果别人先死了,我持有的借用就无效了。
    我借别人钱,我必须活的比别人长。如果我先死了,别人持有的借用就无效了。
    这两个是一样的! A 借钱给 B ,那么 A 的生命周期>=B 的生命周期。
    一个结构体的字段如果持有三个引用,那么这个结构体的生命周期<=生周期最短的那个。这应该很好理解吧。
    815979670
        22
    815979670  
       2023-05-03 21:16:09 +08:00
    进程不是也是这个概念,父进程 必须比子进程活得长,子进程必须在父进程关闭之前结束掉(如果没结束也会自动结束)
    fengjianxinghun
        23
    fengjianxinghun  
       2023-05-04 11:22:46 +08:00
    @Jirajine 类型系统比它强的多的是,其实好的部分就是 cargo 和 Resut/Option
    lynnharry
        24
    lynnharry  
       2023-05-04 15:22:17 +08:00
    @TWorldIsNButThis
    程序再次跑到这里的时候,就复活了吧?我还见过的:
    https://developer.android.com/guide/fragments/lifecycle
    gp3098
        25
    gp3098  
       2023-05-08 10:45:10 +08:00 via Android
    我来我来
    出来混,迟早要还的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     957 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 19:32 PVG 03:32 LAX 12:32 JFK 15:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86