dip10003

不能在类上引用计数,至少是安全的,因为没有逃逸分析.
想法是编写不暴露字段的类.成员函数控制所有访问.
如下编译:

@safe @nogc:

class C {
    C g() => this;
}

//C f(C c); // 错误
C f(scope C c); // OK
//C f(scope C c) { return c.g; } // 错误

void main()
{
    scope c = new C(); // 栈上分配,要求`域`字.
    f(c);
}

已用简单规则区别ref return scope.
大的可用性问题是scope使用ref参数的方式.
你真的需要借用和物主语义.按借用,用新的类型限定符表物主.
"ref return scope"只能跟踪栈.

class D{
    C c;
}
class C {
    D d;
    int x=3;
    this(D d)@safe @nogc{
//标记它为`域`确实会检测到该错误.
        d.c=this;
        this.d=d;
    }
}
C foo(D d)@nogc @safe{
    scope c = new C(d); // 删域不崩溃.
    return c.d.c; // c逃逸
}
void main(){
    import std.stdio;
    writeln(foo(new D)); // 段错误.
}

加入漏洞大全.
如果以通过示例使其失败,请发布到bugzilla.
这就是@live添加的内容,不仅跟踪栈.

:尚未学习DIP1000规则的D程序员通常期望以下两个函数声明是等价的:

void foo(scope int** p);
void bar(scope ref int* p);

幸运的是,"域"只是减法,只是限制你.因此,编译器会检测到使用中错误.

posted @   zjh6  阅读(16)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示