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一样.
附加给指针没人用,因为要重写整个程序.
