Rustc Driver 和 Rustc Interface
rustc_driver
本质上是 rustc
的 main()
函数。它使用 rustc_interface
crate 中定义的接口,按正确顺序执行编译器各个阶段。
rustc_interface
crate 为外部用户提供了一个(不稳定的)API,用于在编译过程中的特定时间运行代码,从而允许第三方有效地使用 rustc
的内部代码作为库来分析 crate 或在进程中模拟编译器(例如 RLS 或 rustdoc )。
对于那些将 rustc
作为库使用的用户,rustc_interface::run_compiler()
函数是编译器的主要入口点。它接受一个编译器配置参数,以及一个接受 Compiler
参数的闭包。run_compiler
从配置中创建一个 Compiler
并将其传递给闭包。在闭包内部,您可以使用 Compiler
来驱动查询以编译 crate 并获取结果。这也是 rustc_driver
所做的。您可以在这里看到有关如何使用 rustc_interface
的最小示例。
您可以通过 rustdocs 查看 Compiler
当前可用的查询。您可以通过查看 rustc_driver
的实现,特别是 rustc_driver::run_compiler
函数(不要与 rustc_interface::run_compiler
混淆)来查看如何使用它们的示例。rustc_driver::run_compiler
函数接受一堆命令行参数和一些其他配置,并推动编译完成。
rustc_driver::run_compiler
还接受一个 Callbacks
,它是一个允许自定义编译器配置以及允许一些自定义代码在编译的不同阶段之后运行的 trait 。
警告: 本质来说,编译器内部 API 总是不稳定的,但是我们会尽力避免不必要的破坏。