gpt4 book ai didi

static - 我可以避免在没有 `static mut` 的情况下重新编译我的平台层吗?

转载 作者:行者123 更新时间:2023-11-29 08:12:04 26 4
gpt4 key购买 nike

<分区>

我有一个库“业务逻辑”包,我希望能够为其编写多个二进制包“前端”或“平台层”。这些平台层倾向于使用调用平台 API 的库,这往往意味着较长的编译时间。我希望能够在不需要重新编译平台层的情况下迭代业务逻辑 crate 。但是,我希望能够将项目编译为适用于每个平台的单个二进制文件,如果没有必要,我宁愿不乱用共享对象文件/DLL。

我有办法使用 fn 来做到这一点指针和 static mut , 但有 this rust-lang/rust issue about potentially removing it ,所以我想知道是否有一种方法可以在不使用它的情况下获得我想要的结果。

作为引用,我的工作方式是这样的:

use platform_types::{Input, Output};

fn update_and_render(input: Input) -> Output {
static mut STATE: logic::State = logic::new();
let state: &mut logic::State = unsafe { &mut STATE };

logic::update_and_render(state, input)
}

fn main() {
platform_layer::run(update_and_render);
}

上面的代码在主包中,logic是业务逻辑箱,platform_layer是平台层 crate ,platform_types包含其他三个 crate 之间的通用类型。

我尝试使用 RefCelltry_borrow_mut我收到错误 std::cell::RefCell<State> cannot be shared between threads safely并提到Sync未针对 std::cell::RefCell<State> 实现如果我尝试为 State 实现同步,错误并没有消失实验性地。然后我尝试了 Mutex , 但据我所知我不能把一个放在 static 中.

编辑:如果它有所作为,我实际上并不期望需要从多个线程调用函数指针,尽管我知道隐式地分发一个函数指针允许这样做。如果我曾经(不小心?)从多个线程调用函数指针,一个失败的 debug_assert!或类似的显然比 UB 更可取。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com