2505d,d的借用检查器
void func(scope ref int*) {}unique(int*) a = ...;
assert(a !is null);unique(int*) b = a;
assert(a is null);
assert(b !is null);func(b); // ok
用@live
作为检查器,不必有断定
了.
int* a = ...;
int* b = a; // 所有权转至b
*a = 3; // 不能再用a.
编译器保证约束指针.
@live
不需要新语法,他是额外检测层.
DIP1000
理念很好,避免栈指针漏洞
.问题是适配
D的高级构造,需要属性
通知函数
接口的参数状态
.
借用检查器对标有@live
的函数都工作.就像只针对@safe
函数检查一样.
@live
不能为传递性
,就像人们要求不传递性
的@nogc
一样.
附加
给指针没人用,因为要重写整个程序
.