rust - 为什么 ceilf32 和 sqrtf32 不安全?

标签 rust

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

有人能告诉我吗?

最佳答案

您正在查看的函数位于 core::intrinsics ,它们是低级编译器指令。我没有看到任何官方文档说明为什么它们被标记为unsafe,但我的猜测是所有编译器内在函数都被标记为规则,因为它们'比大多数 Rust 本身都低级。

无论如何,对于正常操作,您正在寻找固有方法f32::ceilf32::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/

相关文章:

rust - 使用 flat_map 将 Vec<u8> 转换为 Vec<char>

rust - 具有包含异步 block 的闭包的异步方法无法推断适当的生存期

rust - Rust:如何将Entry API与拥有的数据结合起来?

regex - 如何在恒定时间内不使用额外空间替换字符串中的单个字符?

rust - 创建具有无限参数的宏

rust - 借用检查器尝试将函数指针作为参数传递的问题

generics - 使用泛型参数对特征进行 Rust 动态调度

rust - 如何实现 `apply_n_times` 函数?

performance - 为什么删除未使用的 `if` 子句会将执行时间从 12 毫秒减少到 4 毫秒?

function - 我可以将参数作为数组传递吗?