Rust 中的静态对象

Static objects in rust

通常在嵌入式设置中我们需要声明静态结构(驱动程序等)以便 它们的内存是已知的,并在编译时分配。 有什么方法可以实现类似的生锈效果吗? 比如我想要一个uart驱动struct

struct DriverUart{
...
}

和关联的 impl 块。 现在,我想避免使用名为 new() 的函数,相反,我想先在某处分配此内存(或者有一个 new 函数,我可以在外部静态调用该函数 任何代码块)。 在 C 中,我会简单地将此结构的实例化放在某个头文件中,它将被静态分配并全局可用。 我还没有发现任何类似的东西生锈。 如果不可能,那为什么呢?为什么我们可以实现类似的最好的东西是什么?

谢谢!

Now, I want to avoid having a function named new(), and instead, I want to somewhere allocate this memory a-priori (or to have a new function that I can call statically outside any code block). In C I would simply put an instantiation of this struct in some header file and it will be statically allocated and globally available. I haven't found any thing similar in rust. If it is not possible then why? and what is the best why we can achieve something similar?

https://doc.rust-lang.org/std/keyword.static.html

你可以在 Rust 中做同样的事情,没有 header,只要所有元素都是 const:

struct DriverUart {
    whatever: u32
}

static thing: DriverUart = DriverUart { whatever: 5 };

如果你需要计算 non-const 表达式,那显然是行不通的,你需要使用类似 lazy_staticonce_cell 的东西来实例化 simili-statics .

当然,如果不通过 thread-safe interior-mutability 容器(例如原子或 Mutex 虽然这些目前是 non-const,并且不清楚它们是否可以是其他方式),静态被认为总是在线程之间共享。