You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取未通过Rust借用检查器的代码的MIR?

获取未通过借用检查的Rust代码的MIR方法

正常情况下,通过Rust借用检查的代码可以用以下命令生成MIR:

rustc filename --emit=mir

但未通过借用检查的代码直接用这个命令会失败,比如下面这段示例代码:

fn last_or_push<'a>(vec: &'a mut Vec<String>) -> &'a String {
    if let Some(s) = vec.last() { // 借用vec
        // 返回s会强制vec被借用至函数结束,尽管逻辑上没必要
        return s; 
    }
    
    // 由于vec仍被标记为借用状态,此处调用vec.push会触发错误
    vec.push("".to_string()); // 错误
    vec.last().unwrap()
}

你不需要深度修改Rust编译器,只需调整编译参数,让编译器在执行借用检查前就输出MIR。具体可以用以下两种方式:

方式一:指定编译流程终止于MIR生成阶段

rustc filename.rs --emit=mir -Z stop-after=mir

这个参数会让编译器在生成MIR后立刻停止后续步骤(包括借用检查和代码生成),不管代码是否有借用错误,都能输出对应的MIR。

方式二:结合借用检查器参数(可选)

如果你想确保使用基于MIR的借用检查器(新版本Rust默认已启用),可以加上额外参数:

rustc filename.rs --emit=mir -Z borrowck=mir -Z no-codegen

-Z no-codegen 会跳过代码生成环节,同样能保留MIR输出。

如果需要查看带调试信息的详细MIR,还可以追加参数:

rustc filename.rs --emit=mir -Z stop-after=mir -Z mir-emit-debuginfo

内容的提问来源于stack exchange,提问作者Aimer_zz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:20:42