d的dip1000,2
@safe
存在根本性设计
缺陷,而DIP1000
用来解决它.这不仅是为了新模型
,而是要修复
现有模型漏洞
.如下在无DIP
时编译,但DIP1000
可检测到:
@safe ref int oops1()
{ int[5] arr;
int[] slice = arr[];
return slice[2];
}
@safe ref int oops2()
{ struct AnInt
{ int here;
int* myAddress()
{ auto result = &here;
return result;
}
}
AnInt myInt;
return *myInt.myAddress;
}
如果反对DIP1000
,你必须:
1,应该放弃@safe
从程序
中消除未定义行为
.我讨厌它.
2,假设简单禁止切片静态数组
,并在@safe
代码中,从成员函数引用
结构成员地址
.这会破坏
很多代码,并迫使@safe
代码放弃相当多性能.我也讨厌.
3,想出更好的检查
方法.我不能.
我想提下,处理栈中
数据时,只需要域
.一般在堆上
分配东西更实用
,这样就不必与检查域
作斗争.
仅传递
给域
参数的变量,可在栈
上,而不是堆
上分配,
void f(scope T);
T v = new T; // 可在栈上分配.
f(v);
是的,但在栈上
分配是优化
.因此,对@safe
代码,只需让编译器
管理所有内存
,并在需要优化内存
的地方添加提示
.然后让编译器
决定并报告布局
是什么及为什么.
最后,域
允许在@nogc
函数中使用new
.并且支持优化分配
,因此域
不仅适合静态分析器
这不是有效
优化,因为DIP1000
无法跟踪间接.因此,我可在子图中有与v
相互连接的对象
.
可优化时,LDC
已经可以做到.DIP1000
在这里没用.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现