为什么这个 Rust 程序不会崩溃?

Why doesn't this Rust program crash?

考虑这个 Rust 程序:

fn main() {
    let mut z : Vec<Vec<(bool,f64)>> = Vec::with_capacity(10);
    unsafe { z.set_len(10); }
    z[0] = vec!((true,1.));
    println!("{:?}", z[0]);
}

https://play.rust-lang.org/?gist=ccf387ed66a0d8b832ed&version=stable

Rust 应该在我们设置它时尝试删除 z[0],并且由于 z[0] 未初始化,它应该使程序崩溃。但是,它运行良好。为什么?

虽然 Vec 的堆分配中的内存未初始化,但它最常被零填充,零 Vec 是空的 VecStringVec 具有廉价的构造函数,因为它们不会为空数组分配内存)。因此没有分配给 free,因此在这种特殊情况下它不会崩溃。非常轻微的修改,或者 运行 在具有稍微不同的未初始化内存语义的机器上,很容易导致它崩溃(这将是一件好事——崩溃通常比细微的错误更容易调试)。

This diagnosis can be seen to be the case.