[][src]Function tao_of_rust::ch05::nll::mir_explain

pub fn mir_explain()

MIR 介绍

Base usage: 用于生成MIR

fn main(){
    let a = "hello".to_string();
    let s = " world";
    a.to_string() + s;
}Run

Base usage: 生成的MIR

// MIR 解释
fn main() -> (){
    let mut _0: ();         // 返回值
    scope 1 {              // 第一个变量产生的顶级作用域,会包裹其他变量
    }
    scope 2 {             // a自己的作用域
        let _1: i32;
    }
    let mut _2: i32;        // 临时值
    let mut _3: i32;
    let mut _4: (i32, bool);

    bb0: {                 // 基础块
        StorageLive(_1);   // 语句,代表活跃,给LLVM用来分配栈空间
        _1 = const 1i32;  // 赋值

        StorageLive(_3);
        _3 = _1;        // 使用临时变量
        // 执行Add操作,具有防溢出检查,
        // 其中move代表move语义,编译器会自己判断是不是Copy
        _4 = CheckedAdd(move _3, const 2i32);
        // 断言,溢出时抛出错误,并且流向bb1块,此为终止句
        assert(!move (_4.1: bool), "attempt to add with overflow") -> bb1;
    }

    bb1: {            // 基础块
        _2 = move (_4.0: i32);     // 赋值,move为右值默认语义
        StorageDead(_3);    // 语句,代表不活跃,给LLVM用来分配栈空间
        StorageDead(_1);
        return;             // 返回
    }
}Run