内存模型与生命周期(规划为主)
当前实现
new:在堆上分配对象(统一分配器),调用类的constructor(...)方法完成初始化。delete obj;:仅在对象恰好位于堆顶时回退 brk(保守行为),否则忽略;未来将改为可回收。- 字符串/内置分配:使用同一分配器。
- 取址/解引用:
addrof(expr)获取地址(i64);objof(addr)将整数视作泛型引用,as T做解引用。
计划中的改进
- 可回收分配器:引入 free-list 取代线性分配,
delete将真正释放块。 - 析构链:约定
destructor方法,delete或自动释放前调用,完成资源清理。 - 静态引用计数/逃逸分析:
- 编译期可确定的路径自动插入 retain/release。
- 无法确定的路径给出警告,提示开发者显式
delete或手动管理。
- 更细粒度的内存布局/对齐策略,减少碎片。
指针与系统调用
- 语言不暴露裸指针,但允许地址整数:
- 取地址:
let addr: i64 = addrof(buf); - 作为指针参数:
syscall(1, 1, (objof(addr)) as i64, len);
- 取地址:
- 解引用:
(objof(addr) as T)视作T*并加载。