d的dip1000与live
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();
}
注意,不需要"break"
.
如,DIP1000
甚至不支持在同一个结构
的不同字段
中存储具有不同生命期
对象.
是的.DIP1000
根本不跟踪生命期
.它只跟踪域内
生命期.跟踪
需要分析
数据流,这在@live
的活.
根本问题是DIP1000
缺乏模块化
方法来跟踪
不同生命期.
DIP1000
非常喜欢合并
不同生命期
,并选择短的.
放松
安全性是@信任
的工作,类似Rust
的不安全
,因为Rust
的表达能力也是有限的.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现