d放松不变2
他们认为__metadata
字段不能从外部访问
实现引用计数
的对象.这样,强纯
函数不会改变__metadata
字段,因此可基于纯
来优化(除了释放函数).
析构器
在限定符
上遇到与postblits
相同问题
.如果可调用不变
析构器,我会感到惊讶.加上不能重载
析构器,这更糟.
然而,为了支持不变
分配器,确实要考虑如何分配和释放
.
这里问题是把高级
(纯
)与低级
(分配/释放
)混为一谈了.后一类
本质上不是纯
的,因为它修改了操作系统的数据结构
,可按系统|而不是不安全
对待它们,且因为需要操作系统
帮助.
现在,该函数即使签名是强纯
,最多应是弱纯
的(这就是可变
函数).
一种方法是无论签名
如何,把@系统/@trusted
纯函数视为弱纯
函数.构造器/析构器
最多是弱纯
.如果函数是@safe
且纯
的,则应分析签名
来确定是强纯还是弱纯
.此外,从另一语言
调用函数
最多为@trusted
.这样,@trusted
充当优化阻止
程序.
在开发分配器时.我在思考映射内存
是否应按纯
对待.
最终认为,已按纯定义new
形式的映射内存
.我不同意这样,但它一直是
.
因此,我把映射内存
归类为一组"神
"功能.因此,修改执行环境
但不修改执行逻辑
,可当作纯
的.
:他们认为__metadata
字段不能从外部访问
实现引用计数
的对象
不是真的,如,只是公开
它的指针.不必有可见性
规则.
注意
,引用计数
不是唯一用例.如懒初化
等.
:强纯
函数不会改变__metadata
字段.
并不真地.
:因此可基于纯
来优化(除了释放函数).
那是倒退.基于纯
优化决定了可对__metadata
字段做什么.因为不应在那干活,所以它应是@系统
,应由程序员
而不是编译器
保证.这是低级
特征.
:(除了释放函数)
注意,必须专门标记
从析构器
中使用的函数.
:析构器
在限定符
上遇到与postblits
相同问题
.如果可调用不变
析构器,我会感到惊讶.加上不能重载
析构器,这更糟.
好吧,如果破坏不变
对象会怎样.需要有语言规则
允许内存暂时不变
,否则引用计数
方案对不变
内存不适用.
:这里问题是把高级
(纯
)与低级
(分配/释放
)混为一谈了.后一类
本质上不是纯
的,因为它修改了操作系统的数据结构
,可按系统|而不是不安全
对待它们,且因为需要操作系统
帮助.
这并不是混淆
,而是你在低级
操作中实现了高级概念
.这没问题,总是这样工作的.
它们是不安全的,因为需要按某种方式
表现才能将它们视为"纯
".
我认为与弱纯和强纯
没太大关系.这是不同领域.
@trusted
或@系统
并不阻止优化
.这是正交
语言设计.
:在开发分配器时.我在思考映射内存
是否应按纯
对待.
:最终认为,已按纯定义new
形式的映射内存
.我不同意这样,但它一直是
.
那只是错误
的抽象级别
.显然,创建新值
应是纯的,可在基本上所有纯函数式编程语言
中创建任意树结构
.它一般是此类代码
运行方式的核心.
D
中"纯
"的理由是可与此类语言竞争
.
分配/映射内存
自身是否应是"纯
"是有争议的.如果分配失败
不是致命的,或返回
可访问的未初化内存
,则当然不是"纯
"的.
然而,new
(映射内存+初化+构造
)并未为此设置先例
,它更高级.
:因此,我把映射内存
归类为一组"神
"功能.因此,修改执行环境
但不修改执行逻辑
,可当作纯
的.
只要不泄漏分配器状态
到可观察的行为
中,分配加构造
就没有问题.(如,窥探指针位
应是不纯
的).始终要特殊对待释放
.
令我震惊的是,该DIP
与正在最后审查的DIP1035@系统
中描述的变量
类似.完全可以合并__metadata
描述特征与DIP
中的@系统
变量特征.
效果是,除了不能在@safe
代码中访问它们,可对@系统
变量做任何事情,这正是重点.可违反
类型系统.你有完全
的自由.就是这样.
我想缺点
是你可能不希望
拥有所有自由.但是我正在考虑希望@系统
变量不变
.@系统|__metadata
这两个DIP
的全部意义在于@系统|__meta
数据是可变
的.(对DIP1035
,可变性
很危险,必须标记为@系统
.__metadata
整个要点是强制可变性
绕过类型系统
.)
:上行.
不完全正确.DIP1035
还指定按@系统
推导在@safe
代码中禁止
初始值的变量,对可变
和不变
变量同样适用.
所以,指向未定义
内存已经够危险
了,但它仍然需要不变
保护的,因为一些@系统
程序员可能希望它指向别的,我们禁止这样,因为禁止@系统
程序员这样做吗?
即,如果@系统
一开始就足够危险
,那么使它可变
,会增加了多少额外的危险?
并不增加
额外危险,但是在类型
系统中,让变量@系统
属性像如此交互
是不明显的特例.如DIP1035
目前提及,不变
,与他们相互独立
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现