【发布时间】:2015-11-18 05:33:45
【问题描述】:
鉴于我试图以表达式树的形式创建的库的元数据,我希望能够将其转换为某种特定于 Rust 的语法树,可以提供给 Rust 编译器。
我找到了related question,但它已经过时了。
【问题讨论】:
标签: rust
鉴于我试图以表达式树的形式创建的库的元数据,我希望能够将其转换为某种特定于 Rust 的语法树,可以提供给 Rust 编译器。
我找到了related question,但它已经过时了。
【问题讨论】:
标签: rust
是的,有。 Rust 编译器本身。整个编译器是一个库,rustc 只是一个调用编译器的小 crate。例如,stupid-stats 板条箱。它运行 rust 编译器以生成有关代码的一些统计信息。
您只需要导入rustc 和rustc_driver crates(带有extern crate)并为一个类型实现rustc_driver::CompilerCalls trait(我们称之为MyDriver)。然后你可以像这样运行 rustc:
let args: Vec<_> = std::env::args().collect();
let mut my_driver = MyDriver::new();
rustc_driver::run_compiler(&args, &mut my_driver);
您需要确保传递标准库和核心库的路径。就我而言,我添加了
"-L $HOME/.multirust/toolchains/nightly/lib/rustlib/x86_64-unknown-linux-gnu/lib"
到命令行。您不能简单地将其添加到 args 向量中,因为此处未解析 $HOME。因此,您需要更多代码来提取 $HOME 环境变量并构建您的命令。
【讨论】:
librustc*,看看 rustc 二进制文件是如何创建的。