我正在构建一个带有垃圾回收器的解释器。我想要一个线程本地的幼儿园区域和一个共享的老年区域。我在设置幼儿园时遇到了问题。我已经有:
const NurserySize : usize = 25000;
#[thread_local]
static mut NurseryMemory : [usize;NurserySize] = [0;NurserySize];
thread_local! {
static Nursery: AllocableRegion = AllocableRegion::makeLocal(unsafe{&mut NurseryMemory});
}
#[cfg(test)]
mod testMemory {
use super::*;
#[test]
fn test1() {
Nursery.with(|n| n.allocObject(10));
}
}
第一个问题是为什么需要使用unsafe - NurseryMemory是线程本地的,因此无法进行不安全的访问?
第二个问题是如何实际使用它?代码位于 playground,但它不能编译,并且我尝试修复它的尝试似乎使情况更糟。
let foo: Foo; let r1: = &mut foo; let r2 = &mut foo;
有什么区别?我认为除了这是借用检查器的限制之外,没有其他好的理由,这个问题应该在某个时候得到解决。 - Josu Goñi