#no-std #static #once #cases #lazy-static #spin #sync

nightly no-std lateinit

静态变量的不安全延迟初始化

4 个版本

使用旧的 Rust 2015

新版本 0.2.1 2024 年 8 月 1 日
0.2.0 2018 年 5 月 2 日
0.1.1 2018 年 4 月 30 日
0.1.0 2018 年 4 月 30 日

2#lazy-static

Download history 7/week @ 2024-07-22 110/week @ 2024-07-29

每月下载 117

MIT 许可证

10KB
167 行代码(不包括注释)

lateinit

Docs Latest

免责声明:此软件包破坏了 Rust 的安全保证。我强烈建议在几乎所有情况下都使用 static_cell 代替。如果这不符合您的需求,请考虑使用 spin::Oncestd::sync::Oncelazy_static

[dependencies]
lateinit = "0.2"

示例用法

static SOMETHING: LateInit<String> = LateInit::new();

fn main() {
    let environment_value = std::env::var("ENV_VALUE").unwrap();
    unsafe { SOMETHING.init(environment_value); }

    println!("{}", SOMETHING);
}

设计

LateInit 类型提供了一个不安全接口,用于在运行时初始化静态变量。此软件包的设计目标是提供检查的、一次性初始化和之后的无检查、零成本的访问。目的是在不只需要一次修改用于初始化的情况下,消除对 static mut 的需求。

由于这些设计目标的范围较窄,不支持 is_initializedinit_once 或类似方法。如果您需要检查 LateInit 是否已初始化,您使用它是错误的。

应谨慎且少量地使用此软件包——它破坏了安全性,因为访问实际上是 unsafe 的,尽管没有标记为这样,因为 lateinit 在使用之前没有对值是否已初始化提供任何保证。这是您(程序员)的责任来维护此不变性。如果您不这样做,会发生不好的事情™。强烈建议仅在明显划分的设置代码区域中进行初始化。

功能

#[no_std] 支持。

在特质的实现中有 debug_assert(尤其是在 Deref 中),用于在测试期间捕获错误。如果您对性能有顾虑,可以使用 debug_unchecked 功能标志来关闭 debug_assert

没有运行时依赖项

功能