相关疑难解决方法(0)

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

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

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

rust

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

初始化传递给异步代码(例如 tokio 和 hyper)的 Rust 变量

我有一个无法在编译时计算的值。它需要在任何应用程序代码运行之前进行计算,然后它只会在应用程序的整个生命周期中被读取。它还需要传递给执行者,例如处理程序tokiohyper处理程序。

我怎样才能安全、惯用地创造这样的价值,并且不会造成不必要的性能损失?

  • 如果我在 中 创建它main并将其传递给hyper,它的寿命就不够长。
  • 如果我使用 创建它lazy_static!,则仅在首次访问时才计算它。如果无法计算,那么我也不想运行应用程序的其余部分。我宁愿知道在启动应用程序时无法连接到数据库,而不是在客户端发出请求时无法连接到数据库。
  • 如果我将其设为 a static mut,那么我就无法在安全代码中使用它。

理想情况下,我想做类似的事情:

#[tokio::main]
pub async fn main() {
    let db = init_db();

    // This uses a hyper server, passes db around
    // to tokio and hyper handlers, etc.
    run_app(&db);
}
Run Code Online (Sandbox Code Playgroud)

asynchronous rust hyper rust-tokio

2
推荐指数
1
解决办法
2021
查看次数

标签 统计

rust ×2

asynchronous ×1

hyper ×1

rust-tokio ×1