9 个稳定版本 (3 个主要版本)

4.1.1 2021 年 11 月 25 日
4.0.0 2021 年 11 月 25 日
3.0.0 2021 年 11 月 24 日
2.0.0 2021 年 11 月 21 日
1.2.1 2021 年 11 月 21 日

#320内存管理

Download history 92/week @ 2024-03-13 113/week @ 2024-03-20 51/week @ 2024-03-27 63/week @ 2024-04-03 10/week @ 2024-04-10 15/week @ 2024-04-17 11/week @ 2024-04-24 3/week @ 2024-05-01 15/week @ 2024-05-08 21/week @ 2024-05-15 23/week @ 2024-05-22 15/week @ 2024-05-29 94/week @ 2024-06-05 19/week @ 2024-06-12

每月下载量 115

MIT 许可证

26KB
426

Singlyton

在 Rust 中实现安全、单线程的全局状态。

存在调试断言以确保

  • 借用检查(参见 RefCell
  • 线程安全(两个线程不能访问相同的单例)
  • 未初始化内存的安全使用

为什么?

在 Rust 中,单线程全局状态有点像是一个幽灵

  • static mut 因其易于通过 别名 导致未定义行为而被强烈不建议使用。
  • 线程局部变量 在性能关键的环境中可能很慢,在单线程环境中使用毫无意义,并且可能不是所有平台上都可用
  • 在单线程环境中绕过 Rust 的线程安全机制可能很丑陋、令人烦恼且不必要

使用方法

首先,将 singlyton 添加到你的 Cargo.toml 文件中作为项目的依赖项

[dependencies]
singlyton = "*"

单例

use singlyton::Singleton;

static SINGLETON: Singleton<&'static str> = Singleton::new("Hello");
debug_assert_eq!(*SINGLETON.get(), "Hello");

SINGLETON.replace("Test");
debug_assert_eq!(*SINGLETON.get(), "Test");

*SINGLETON.get_mut() = "Test 2";
debug_assert_eq!(*SINGLETON.get(), "Test 2");

SingletonUninit

use singlyton::SingletonUninit;

static SINGLETON: SingletonUninit<String> = SingletonUninit::uninit();

SINGLETON.init("Hello".to_string());
debug_assert_eq!(SINGLETON.get().as_str(), "Hello");

SINGLETON.replace("Test".to_string());
debug_assert_eq!(SINGLETON.get().as_str(), "Test");

*SINGLETON.get_mut() = "Test 2".to_string();
debug_assert_eq!(SINGLETON.get().as_str(), "Test 2");

依赖项

~20KB