该代码是从The Rust Programming Language 的清单 19-10 中复制的。它旨在说明可变静态变量的使用,但这不是我在这里关心的问题。尽管这可能被称为“玩具示例”,但在一本介绍 Rust 的书中,它提出了我认为是严重的问题。
的所有代码add_to_count都在一个unsafe块中。与制作函数本身相比,这有什么好处unsafe?照原样,函数的签名没有给出任何线索——本质上如果不是 Rust 的说法——是不安全的。我想知道为什么编译器甚至允许这样做。“好处”是,如下所示,可以在unsafe块外调用该函数。为什么 Rust 的介绍性文本会展示如何规避安全的编程实践?
static mut COUNTER: u32 = 0;
fn add_to_count(inc: u32) {
unsafe {
COUNTER += inc;
}
}
fn main() {
add_to_count(3);
unsafe {
println!("COUNTER: {}", COUNTER);
}
}
Run Code Online (Sandbox Code Playgroud)
如果一个函数被标记为unsafe意味着调用者负责维护一些条件,否则可能会引入未定义的行为。
如果一个函数没有被标记为unsafe但包含不安全的代码,那么这意味着该函数保证没有选择的参数会导致不安全的行为。在实践中,这通常意味着该函数将检查某些条件,如果不满足条件,则发生恐慌。
通过没有像unsafe您的示例中那样标记该函数,作者断言通过将 a 改变static mut u32一些调用者定义的数量不会出错。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |