编译器运行有某种顺序吗?

Is there some sort of sequence in which the compiler operates?

我正在用 Rust 重写一个 C++ 程序,有一件事让我情绪激动。在第一次迭代时,它给了我,比如说 50 个错误,然后我一个一个地解决它们,就在我解决最后一个错误时,编译器给我 60 个新错误,然后我解决它们并得到另外几十个错误。

最后一组(至今)错误似乎是由借用检查器专门产生的。那么为什么会这样呢?编译过程是否有一些层次或阶段,如果有,它们是什么?

我想知道,因为我喜欢可预测性,不喜欢情绪化的过山车(我也想知道这次冒险什么时候结束)。

是的,有一个订单:

  1. 语法错误,来自解析源代码
  2. 非生命周期类型错误,来自类型检查器
  3. 终身错误,来自借用检查器

前两个是大多数类型化语言所共有的。在检查它们之前,您需要构建某种类型关系的模型,如果语法不正确,这将很快失败。在 Rust 中,一旦基本类型检查通过,后续步骤是验证所有借用是否有效。

您可以在博客中阅读更多内容 post,MIR 简介 .