我正在设计一种高级语言,我希望它具有 C++ 的速度(它将使用 LLVM),但要像 C# 一样安全和高级。垃圾回收很慢,new/delete 不安全。我决定尝试使用“基于区域的内存管理”(网上有几篇关于它的论文,主要是针对函数式语言)。唯一使用它的“有用”语言是 Cyclone,但它也有 GC。基本上,对象是在词法堆栈上分配的,并在块关闭时被释放。对象只能引用同一区域或更高区域中的其他对象,以防止悬空引用。为了使这更灵活,我添加了可以在堆栈上上下移动的并行区域,并通过循环保留。在大多数情况下,类型系统将能够验证分配,
前任:
region(A) {
Foo@A x=new Foo(); //x is deleted when this region closes.
region(B,C) while(x.Y) {
Bar@B n=new Bar();
n.D=x; //OK, n is in lower region than x.
//x.D=n; would cause error: x is in higher region than n.
n.DoSomething();
Bar@C m=new Bar();
//m.D=n; would cause error: m and n are parallel.
if(m.Y)
retain(C); //On the next iteration, m is retained.
}
}
这看起来实用吗?我需要添加非词法范围的引用计数区域吗?我是否需要添加可以引用任何对象但检查区域删除的弱变量?您能想到任何算法很难与该系统一起使用或会泄漏吗?