我对 Rust 还很陌生,并且一直在研究一些数学问题。对于其中一个问题,我需要 ceilf32
和 sqrtf32
。我惊讶地发现这些函数是 unsafe
;两者都是相当简单的数学函数,我的理解是,不安全的 Rust 仅在必要时用于解决编译器的保守性或允许固有的不安全操作系统操作。我看不出任何一个函数会遇到任何一个问题的任何原因,因此我不明白是什么会阻止它们在内存安全的情况下实现。
有人能告诉我吗?
最佳答案
您正在查看的函数位于 core::intrinsics
,它们是低级编译器指令。我没有看到任何官方文档说明为什么它们被标记为unsafe
,但我的猜测是所有编译器内在函数都被标记为规则,因为它们'比大多数 Rust 本身都低级。
无论如何,对于正常操作,您正在寻找固有方法f32::ceil
和 f32::sqrt
.这些是 Rust 标准库实现,大概[1] 调用内在函数作为一个行动过程,这些 方法没有标记为 unsafe
。
由于它们是固有方法,您可以在 f32
对象 (my_number.sqrt()
) 或直接使用命名空间 (f32: :sqrt(my_number)
).
[1] 其实看看source code对于当前的实现,表明这两个都只是简单地委托(delegate)给它们的内在对应物,将其包装在 unsafe
block 中以保证安全。
关于rust - 为什么 ceilf32 和 sqrtf32 不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73913908/