Rust 在安全锈蚀中是否可能存在未定义的行为?

Rust 在安全锈蚀中是否可能存在未定义的行为?,rust,undefined-behavior,unsafe,standard-library,Rust,Undefined Behavior,Unsafe,Standard Library,是否有任何方法可以在不使用不安全的情况下实现锈蚀中未定义的行为 当然,这样的行为可以由第三方库包装在“安全”函数中,所以我们假设我们只使用标准库。绝对如此,但是 我最喜欢的例子是,这实际上是由于Rust和LLVM语义的交互不好造成的: pub fn oops() { (|| loop { drop(42) })() } 通过Rust 1.49.0上的优化编译,将生成以下程序集: 操场::哎呀: ud2 这样的行为可以由第三方库包装在“安全”函数中,因此假设我们

是否有任何方法可以在不使用
不安全
的情况下实现锈蚀中未定义的行为

当然,这样的行为可以由第三方库包装在“安全”函数中,所以我们假设我们只使用标准库。

绝对如此,但是

我最喜欢的例子是,这实际上是由于Rust和LLVM语义的交互不好造成的:

pub fn oops() {
    (|| loop {
        drop(42)
    })()
}
通过Rust 1.49.0上的优化编译,将生成以下程序集:

操场::哎呀:
ud2
这样的行为可以由第三方库包装在“安全”函数中,因此假设我们只使用标准库


标准库是一个“第三方库”,所以我不明白它的区别。

我的意思是std库类似于“不包含bug”。正如我所看到的,答案是“否”。@passing_through该特定的一个是固定的,但是您可以通过搜索标记为I-unsound的问题来找到其他更新的示例。这是否意味着“任何此类情况都是库中的一个bug”(不是在其用户代码中)?@passing_through澄清了。@supercat这是一个折衷。对于Rust来说,LLVM非常擅长优化,因此语义上的(相当小的)差异非常值得在运行时性能上获得收益。