8 个不稳定版本 (3 个破坏性更新)
0.4.0 | 2023年11月9日 |
---|---|
0.3.4 | 2023年7月30日 |
0.2.1 | 2023年11月6日 |
0.2.0 | 2023年5月31日 |
0.1.0 | 2023年3月21日 |
#570 in Unix APIs
用于 azur
120KB
3.5K SLoC
一个 Rust no_std 库,用于使用用户空间 Linux ABI,旨在没有开销,但尽可能利用 Rust 的类型系统保证安全性。
代码必须精心组织,以便尚未阅读的人可以快速猜测文件对应的内容,或实现的位置以及其工作原理:它必须在不需要大量上下文的情况下可修改。
这意味着代码风格必须在代码库中保持一致,以使组织可预测。
必须避免代码重复,但只有当重复的代码作为一个整体有意义,并且有一个合适的描述性名称时。
lib.rs
:
一个 no_std
接口,用于用户空间 Linux ABI,旨在没有开销,但尽可能利用 Rust 的类型系统保证安全性。
结果开销
虽然类型如 Result<i32>>
有时被用来代替较小的 i32
,它可以表示错误和成功,但函数内联可以减少内存开销或寄存器压力,因为在实践中函数是内联的。
为了验证这一点,当启用优化时,尝试查看由代码生成的汇编代码。
extern "C" {
fn fallible() -> i32;
fn test_succeeded();
fn test_failed(err: i32);
}
fn fallible_safe() -> Result<(), i32> {
let ret = unsafe { fallible() };
if ret < 0 {
return Err(ret);
}
Ok(())
}
pub fn test() {
if let Err(e) = fallible_safe() {
unsafe { test_failed(e) };
return;
}
unsafe { test_succeeded() };
}