#static #lazy-evaluation #global #macro #init

无std sls_static

无缝Rust静态初始化:轻松且高效

6个稳定版本

1.0.5 2024年4月5日
1.0.3 2024年2月23日

#1647Rust模式

Download history 6/week @ 2024-07-06 1/week @ 2024-07-13

每月394次下载

MIT 协议

5KB

sls静态

无缝Rust静态初始化:轻松且高效

这是什么?

这个crate允许您在main函数内轻松(自动)初始化静态变量。

它是如何工作的?

使用linkme crate收集所有静态变量并在main函数中初始化它们。它利用ctor的一些代码来初始化静态变量。

警告

它使用不安全代码来初始化静态变量,但除非您对其进行一些奇怪的魔术操作,否则它是安全的。

我说它是安全的,因为所有静态变量都在main函数中初始化,因此无法在初始化之前访问它们。

示例

use sly_static::sly_static;
use sly_static::sly_main;

#[sly_static]
static MY_STATIC: String = String::from("Hello, World!");

#[sly_main]
fn main() {
    println!("{}", *MY_STATIC);
}

许可证:MIT


lib.rs:

无缝Rust静态初始化:轻松且高效

这是什么?

这个crate允许您在main函数内轻松(自动)初始化静态变量。

它是如何工作的?

使用linkme crate收集所有静态变量并在main函数中初始化它们。

它利用ctor的一些代码来初始化静态变量。

警告

它使用不安全代码来初始化静态变量,但除非您对其进行一些奇怪的魔术操作,否则它是安全的。

我说它是安全的,因为所有静态变量都在main函数中初始化,因此无法在初始化之前访问它们。

示例

use sly_static::sly_static;
use sly_static::sly_main;

#[sly_static]
static MY_STATIC: String = String::from("Hello, World!");

#[sly_main]
fn main() {
    println!("{}", *MY_STATIC);
}

依赖关系

~290–740KB
~17K SLoC