Rust 语言架构

1,475 阅读2分钟

Rust 语言概念层次结构

image.png

  • Rust 底层是安全内存管理层,盖层主要是设计内存管理相关的概念
  • 类型系统层,是一个承上启下的层级,类型系统承载了上层的所有全系统语义和混合编程范式,赋予了 Rust 语言高级的抽象表达能力和安全性。同时保留了对底层代码执行、数据表示和内存分配等操作的控制能力。

对于一般开发者而言,只需掌握类型系统、所有权系统和混合式编程范式即可,不需要操心底层内存是否安全,因为有编译器和类型系统帮忙处理。 人和编译器共用同一套”心智模型“, 这样可以极大地保证系统的安全和健壮性。

Rust 代码如何执行

Rust 作为跨平台语言,可以一次编译,导出运行,这得益于 LLVM。 Rust 的编译器是一个 LLVM 编译前端,他将代码便以为 LLVM IR,然后经过 LLVM 编译为相应的平台目标。

  • Rust 经过分词和解析,生成 AST (抽象语法树)。
  • 然后把 AST 进一步简化处理为 HIR(Hight-level IR),目的是让编译器更方便的做类型检查。
  • HIR 会进一步便以为 MIR (Middle-level IR),这是一种中间表示,在 Rust 1.12 中被引入,主要用于
    • 缩短编译时间。 MIR 可以帮助实现增量编译,当你修改完代码重新编译时,编译器只计算更改过的部分,从而缩短编译时间
    • 缩短执行时间。MIR 可以在 LLVM 编译之前实现更细粒度的优化,因为单纯依赖 LLVM 的优化粒度太粗,而且 Rust 无法控制,引入 MIR 可以增加更多优化空间。
    • 更精确的类型检查。 MIR 将帮助实现更加灵活的借用检查,从而可以提升 Rust 使用体验。
  • 最终 MIR 会被翻译为 LLVM-IR, 然后被 LLVM 的处理便以为能在各个平台上运行的目标机器码