d的@安全和dip1000
原文
我想知道他们@安全和dip1000
的目标
.确保整个程序的内存安全?
多字变量
更新中的数据竞争怎么样?
@safe
是的,但并不简单,因为main
不是唯一可能的入口点,而且存在@trusted
.
D目前:
必须标记共享数据为"shared"
.@safe
代码无法访问shared
数据(仅用-preview=nosharedaccess
确保).如果想处理shared
数据,要编写@system/@trusted
代码并自己确保
线程安全.
注意DIP1000
不会使@safe
更安全.它允许以前的@system
代码成为@safe
.如果写过这种代码,则DIP1000
很不错.如果没有,DIP1000
也不影响你.
如下,不用-dip1000或-ftransition=dip1000
可编译,但不安全:
int[] global;
@safe
void f0(int[] val) {
global = val;
}
@safe
void f1() {
int[3] local = [1, 2, 3];
f0(local);
}
DIP 1000
会拒绝.
是的,八哥
很多.如果八哥
未通过-preview=dip1000
表现出来,那么更不可能骂它.因为DIP1000
最终将成为默认
,问题就会消失.
反之亦然:-preview=dip1000
有漏洞
,没有开关就没有
.但这些更可能得到修复
,因为有人确实关心完成DIP1000
.
d作者:尽管@safe
不提供完全内存安全,但@live
弥补了其他部分.
程序员可手动用锁
来避免多字变量
中的数据竞争.
pb:
嗯?我理解是即使没有@live
,模编译器
错误和错误使用@trusted,@safe
代码应该是100%
内存安全的.
添加所有权/借用
系统所做的(或应做
的),像DIP1000
一样,可在@safe
代码中,干以前需要在@system/@trusted
中事情,比如手动释放内存
.
今天实施的@safe
的问题在按黑名单
实现它.
我说"应该"和"模编译器错误"
是有道理
的.
但是,即使用白名单
实现,仍有不应进而进
白名单的错误.例如,最近几个修复-preview=dip1000
的,正是针对这种类型
错误.
是的,错误使用@trusted
,@live
仅在@系统/@安全
中作为检查
工具有点用.
@live
未做所有权/借贷
系统应做的事.我已经指出来,但大多数人似乎仍然假定如此.我不明白为什么.提议设计已公开了很久,很明显在@safe
代码中几乎无用,因为@live
就是个函数注解
.
@live
相比所有权/借贷
,很肤浅,因而用处不大.
借用/检查
系统和所有权
是两件事.借用/检查器
确保一次只一个可变访问
或多个不变
访问.
所有权
与管理内存
是相关
的但完全不同
的主题.Rust
中臭名远扬
的所有权
系统因为移动语义
,一次只允许一个所有权
.
D中的借用/检查器
,我还没完全理解
它应解决什么问题.
我认为,在@safe
中允许原始指针
是基本错误.在@safe
代码中,类似于C#/Java/其他
,应完全不透明
的管理内存
.这样更容易,而D
搞复杂了.
@live
对编写@safe@nogc
代码毫无帮助.
为了让@safe
或@trusted
代码依赖@live
的所有权不变量
,(例如,“非域
指针拥有指向内存
”),@safe
代码不能违反这些不变量
.由于@live
的不变量只在@live
函数中强制执行,并且允许@safe
代码调用非@live
函数,结果是,允许@safe
代码违反@live
不变量,因此@safe
或@trusted
代码不能依赖这些不变量
.
要解决此问题,必须引入新规则,例如:
1,所有@safe
函数也必须是@live
.
2,@safe
函数不能调用非@live
函数.
当然,添加这样规则实际上会破坏每个现有D项目中的每个@safe
函数,实践中完全不可行,这就是当前@live
设计是死胡同的原因.
没有@live
,就无法防止两次释放
.
@live
一次只允许一个
所有权,且与移动语义
关联.
如果编写@safe
代码,已受到保护
.不必再有@live
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现