鉴于我试图以表达式树的形式创建的库的元数据,我希望能够将其转换为某种特定于Rust的语法树,可以将其提供给Rust编译器。
我找到了related question,但它已经过时了。
答案 0 :(得分:4)
是的。 Rust编译器本身。整个编译器都是一个库,而rustc
只是一个调用编译器的小包。作为一个例子,有stupid-stats
箱子。它运行rust编译器以生成有关代码的一些统计信息。
您只需要导入rustc
和rustc_driver
包(使用extern crate
)并为类型实现rustc_driver::CompilerCalls
特征(让我们称之为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
env var并构建您的命令。