Репост из: Rust 视界
首届 Rusty Day 线上大会散记: 深入借用检查器
分享者:Nell Shamrell-Harrington ,Mozilla员工
该Topic议程分为两部分: Rust编译器概述 和 深入借用检查器
Rust 编译器概述:
介绍了编译阶段:词法、解析、语义分析、优化、代码生成
Token -> AST -> HIR -> MIR -> LLVM IR
在 AST 阶段主要做的工作:宏展开、去糖、处理各种模块导入
HIR的数据结构: Crate(CrateNum) < Definition(DeId) < Node (HirId) > >
MIR 的数据结构: Control Flow Graph < bb0(statement -> statement -> terminator ) -> bb1(statement -> terminator ) -> bb2 ((statement > terminator )... >
详细内容可以参阅 : https://rustc-dev-guide.rust-lang.org/
优化主要在 MIR 和 LLVM IR 阶段完成,最终由 LLVM IR 通过 LLVM 生成机器码。
深入借用检查:
借用检查器的工作:
1. 跟踪变量的初始化和move
2. 生命周期推导(Lifetime inference)
a. 变量的生命周期
b. 引用的生命周期。如果引用一个值,则该引用的生命周期不能超过该值的作用域。
3. 还有很多其他功能,继续参阅rustc dev guide。 (比如 检查不可变和可变借用等)。 https://rustc-dev-guide.rust-lang.org/borrow_check.html
(看完后发现,好像也没有很深入)
视频:https://www.youtube.com/watch?v=XFhrb-qLX_8&list=PLf3u8NhoEikhTC5radGrmmqdkOK-xMDoZ&index=2&t=0s 注意这个Topic 在 2小时以后
分享者:Nell Shamrell-Harrington ,Mozilla员工
该Topic议程分为两部分: Rust编译器概述 和 深入借用检查器
Rust 编译器概述:
介绍了编译阶段:词法、解析、语义分析、优化、代码生成
Token -> AST -> HIR -> MIR -> LLVM IR
在 AST 阶段主要做的工作:宏展开、去糖、处理各种模块导入
HIR的数据结构: Crate(CrateNum) < Definition(DeId) < Node (HirId) > >
MIR 的数据结构: Control Flow Graph < bb0(statement -> statement -> terminator ) -> bb1(statement -> terminator ) -> bb2 ((statement > terminator )... >
详细内容可以参阅 : https://rustc-dev-guide.rust-lang.org/
优化主要在 MIR 和 LLVM IR 阶段完成,最终由 LLVM IR 通过 LLVM 生成机器码。
深入借用检查:
借用检查器的工作:
1. 跟踪变量的初始化和move
2. 生命周期推导(Lifetime inference)
a. 变量的生命周期
b. 引用的生命周期。如果引用一个值,则该引用的生命周期不能超过该值的作用域。
3. 还有很多其他功能,继续参阅rustc dev guide。 (比如 检查不可变和可变借用等)。 https://rustc-dev-guide.rust-lang.org/borrow_check.html
(看完后发现,好像也没有很深入)
视频:https://www.youtube.com/watch?v=XFhrb-qLX_8&list=PLf3u8NhoEikhTC5radGrmmqdkOK-xMDoZ&index=2&t=0s 注意这个Topic 在 2小时以后