rust里面的awm叫什么_rust中的lifetime到底是什么?

(写完之后发现有点乱)

实体A持有一个指向实体B的引用,则A能够访问期间B必须存活;函数A返回一个引用,则引用指向的对象必须在调用者完成调用后仍然存活……换句话说,生命周期其实是表达了“有关联实体间的相对依赖关系”。推广开来,生命周期并不是Rust的特定语法,而是一种通用的建模方式,它是程序运行时状态的一个侧面投影。

也就是说:生命周期确定于程序建模与设计阶段而非编码阶段,不要在一个生命周期错误的程序中尝试显式标注生命周期让其编译通过,而应该在编译器提示你借用检查错误时,思考自己的设计是否存在问题。

显式生命周期标注并不会改变程序行为。换句话说,Rust的借用检查语法和相关基础设施,实际上是为你提供了一套原语,让你能够证明自己程序生命周期的正确性。

题外话:

生命周期是运行时的依赖关系,但我们将其映射为静态的借用检查语法,显然可能有一些正确的生命周期无法或者难以用safe Rust code表达,有部分是其天生的复杂性,还有一部分则是Rust相关原语的缺失。

如很长一段时间内不允许自引用的结构体,是因为自引用的结构体地址改变时,将会产生一个野指针,典型的例子是栈上结构体move。在await/async实现中遭遇了这个问题,于是引入了Pin系列API,使得能够用上有限制的自引用。

有些问题难以语法层面解决,但又存在某种通用解决方案,就可能有高手使用unsafe封装相关基础设施(Arc、rental、crossbeam-epoch等)。

题外话二:

目前自己比较推荐的一种编码方式是:先构思完成程序的大概设计,重点关注大模块之间的依存关系,在实现某部分时继续构造大概设计,保证生命周期的“大体正确性”。

设计阶段不太可能处理太多细节,大部分人无法做到“事无巨细”,保证大体的正确性即可,随后用最符合自己直觉的方式将代码铺开,并在借用检查的指导下逐步修正少数细节处的生命周期相关问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值