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在这里没用.

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