d为何不变需要引用计数
原文
是的,读取不存在
数据是错误.
不变
数据也有生命期
.
import std.stdio;
struct S {
int i;
this(int i) {
this.i = i;
writeln(i, "好");
}
~this() {
writeln(i, "坏");
}
}
void main() {
foreach (i; 0 .. 3) {
immutable s = S(i);
}
}
模块级
不变和"静态常量
"的寿命更长
,但也有生命期
.然而,今天,不能在不变
对象上析构
,所以用cast()
删除了限定符,应是未定义行为
(今天?).
immutable(S) moduleS;
shared static this() {
moduleS = S(42);
}
shared static ~this() {
destroy(cast()moduleS);
}
void main() {
}
同样,认为模块级"不变
"和"静态常量
"数据符合你说的与程序寿命相同
.
符合D的GC
数据(包括不变
数据).当无引用
时,结束生命期.
另一个示例
是使用std.concurrency
在线程间传递
不变消息时:该数据
是运行时,只要接收端
需要就保持数据活动
.
不变
与生命期
语义无关.
只是说在它生命期
中不会修改这片内存
.
,真正的问题在常
.可变和不变
都可自动转变成常
.
像immutable/const/shared
这样存储类
不依赖内存管理策略
.也没有规定内存寿命
.
它仅指示引用
它时如何交互
.
引用计数需要"尾常"/"尾不变"
的概念,以便限定符
的传递性
不影响,引用计数
的数据
(计数
字段),而只影响被引用
数据.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现