int* foo(return scope int* x)@safe{
auto y=x;
int t;
auto z=&t;
return y; // 可,但不返回z
}
它并不
跟踪
生命期,它只是从x复制属性到
y
.因为它是用
栈变量
地址初化的,所以
z
取
scope
属性.
@live
的目的是为了防止:
1
.
释放
后使用
2
.多
释放
3
.无
释放
更进一步,需要用户构建
封装
的
容器
,并可能包括一些部分
Rust``@trusted
功能
如果没有上面的
1,2,3
,
DIP1000
就不是完整
方法
,这是正确的.但
dip1000
是实现
1,2,3
的必要前提.
默认,
直降
在很多年前就从
D
中删除了.
第二个难题是,可在
嵌套
域中放
case
语句.
最好还是让
switch
保持
原样
,开发新
模式匹配
构造,以适应
现代人
感受.
,每个
case
都引入了
新域
.
int main(){
int x;
switch(x){
case 0:
int y;
break;
case 1:
int y;
break;
default:
int y;
break;
}
return 0;
}
在
C
和
D
间切换搞混了.
另一个问题是
switch case
没有顺序,应该是不
相交
的.但是对
模式匹配
,
语义
一般是
按顺序
每个可
覆盖
,且应把
更具体
模式放在
前面
的模式.
switch
语法也是
老式
的,
更现代
语法是:
match (x){
0 => foo();
3 => bar();
}