为什么 ceilf32 和 sqrtf32 不安全?

Pio*_*_11 3 rust

我对 Rust 还很陌生,一直在研究一些数学问题。对于这些问题之一,我需要ceilf32sqrtf32。我惊讶地发现这些功能是unsafe;两者都是相当简单的数学函数,我的理解是,不安全的 Rust 仅在必要时使用,以解决编译器的保守性或允许本质上不安全的操作系统操作。我看不出任何一个函数会遇到任何问题,因此我不明白什么会阻止它们以内存安全的方式实现。

有人可以启发我吗?

Sil*_*olo 8

您正在查看的函数位于 中core::intrinsics,它们是低级编译器指令。我没有看到任何关于为什么将它们标记为 的官方unsafe文档,但我的猜测是,所有编译器内在函数通常都以这种方式标记,因为它们比大多数 Rust 的级别要低。

无论如何,对于正常操作,您正在寻找固有的方法f32::ceilf32::sqrt. 这些是 Rust 标准库实现,大概[1]调用内部函数作为一个操作过程,并且这些方法没有标记unsafe

f32由于它们是固有方法,因此您可以在对象 ( )上调用它们my_number.sqrt(),也可以直接使用命名空间 ( f32::sqrt(my_number)) 调用它们。


[1]事实上,查看当前实现的 代码unsafe表明,这两种方法都只是委托给其内在对应部分,将其包装在一个块中以保证安全。