相关疑难解决方法(0)

如何创建一个全局的,可变的单例?

在系统中只创建一个实例的结构创建和使用的最佳方法是什么?是的,这是必要的,它是OpenGL子系统,制作多个副本并将其传递到各处会增加混乱,而不是减轻它.

单身人士需要尽可能高效.似乎不可能在静态区域上存储任意对象,因为它包含Vec带有析构函数的对象.第二个选项是在静态区域存储(不安全)指针,指向堆分配单例.什么是最方便和最安全的方法,同时保持语法简洁.

rust

97
推荐指数
3
解决办法
3万
查看次数

你怎么能在Rust中制作一个安全的静态单例?

这是一个有争议的话题,所以让我先解释一下我的用例,然后再谈谈实际问题.

我发现对于一堆不安全的东西,确保你不泄漏记忆是很重要的; 如果你开始使用transmute()和,这实际上很容易做到forget().例如,将盒装实例传递给C代码一段任意时间,然后将其取回并使用"恢复它" transmute.

想象一下,我有这种API的安全包装:

trait Foo {}
struct CBox;

impl CBox {
    /// Stores value in a bound C api, forget(value)
    fn set<T: Foo>(value: T) {
        // ...
    }

    /// Periodically call this and maybe get a callback invoked
    fn poll(_: Box<Fn<(EventType, Foo), ()> + Send>) {
        // ...
    }
}

impl Drop for CBox {
    fn drop(&mut self) {
        // Safely load all saved Foo's here and discard them, preventing memory leaks
    } …
Run Code Online (Sandbox Code Playgroud)

rust

24
推荐指数
2
解决办法
9781
查看次数

是否可以在编译时填充一个大集合?

我们有“删除我的所有数据”功能。我想从许多网络日志文件中删除一组 IP。

目前在运行时,我打开一个包含要删除的 IP 地址的 CSV,将其转换为一个集合,扫描文件,并在日志 IP 匹配时执行删除逻辑。

有什么方法可以加载 CSV 并在编译时将其转换为一组?我们正在尝试将内容迁移到 AWS lambda,并且只部署一个没有依赖项的静态二进制文件非常棒。

rust

6
推荐指数
1
解决办法
1048
查看次数

标签 统计

rust ×3