专栏名称: 程序人生
十年漫漫程序人生,打过各种杂,也做过让我骄傲的软件;管理过数十人的团队,还带领一班兄弟姐妹创过业,目前在硅谷一家创业公司担任 VP。关注程序人生,了解程序猿,学做程序猿,做好程序猿,让我们的程序人生精彩满满。
目录
相关文章推荐
51好读  ›  专栏  ›  程序人生

透过 Rust 探索系统的本原:RAII

程序人生  · 公众号  · 程序员  · 2021-04-19 08:05

正文

请到「今天看啥」查看全文


  • 对象的初始化会导致资源的初始化

  • 对象的释放会导致资源的释放

这里有两重保障:对象创建成功一定意味着资源获取成功;而对象释放成功则资源一定得到释放。所以使用 RAII 的话,我们只需要保证内存安全(没有内存泄漏),就能够保证资源安全(没有资源泄露)。

从这里我们可以看到 RAII 是一个多么奇怪的名字 —— 它字面上只包含了上面的第一层功能(对象的初始化会导致资源的初始化),直接忽略了第二层功能,而被忽略的第二层功能其实是 RAII 真正需要保障的。

RAII 是一种资源释放的思路,这种思路被应用在各种语言之中(尽管具体采用的方法不同),比如:

  • 在 Python 中,我们可以使用 with 来确保资源在退出某个 scope 时一定会被释放

  • 在 Golang 中,我们可以使用 defer 让资源获取的代码和资源释放的代码尽可能靠近,这样让程序容易理解。

  • 在 Rust 中,RAII 的思维被深深地嵌入到语言之中:所有权模型保证了当前 scope 所拥有的对象在退出 scope 时必然会被释放,而 Drop trait 保证了释放时,其相关的操作系统资源也得到释放。







请到「今天看啥」查看全文