当前位置: 首页 > news >正文

2505d,d的一些疑问

:1.函数声明没有,因此无法检查函数体.
没有的原型必须总是信任声明.你必须简单地假设上有'域'断定调用者不会保存该参数,且调用者也可依赖它;即,使用temp/stack内存来分配参数.
是,当然,这就是dip1000工作原理.

:2.检查所有表明编译速度会减慢很多.
:如果不想逃逸分析,就不要写'域';关键是,为什么你需要把两个属性写在一起,才能使自身是完全可选第一个属性生效
需要'域'来表示传递的指针不会逃逸.需要'中'来指示允许通过函数的逃逸.

:3.当在函数调用流图有循环时,推导属性出现先有鸡还是先有蛋的问题
我不关注.
F调用G调用H调用F.
你不能推导f的属性,因为它依赖f.你不能推导g的属性,因为它依赖依赖gf.等等.要解决它,需要构造数据流方程,然后通过迭代收敛唯一的解求解这些方程.

这就是链接到gflow.d中的代码的作用.它在注释中.
可惜,构建和解决DFE的速度很慢.因此优化后的构建比未优化的构建慢得多.因此使用简单的DFA而不是DFA推导属性,因为想要快速的非优化构建.
:是不是;接收但没有显式声明'域'的模板只是花时间试推导'域',因为该模板的调用者可能依赖该属性推导.
当然.

:是,但我仍不明白;如果你不想逃逸分析,请不要编写'域'.
是,然后你不能用域指针调用该函数.

:如果你真写了它,你已显式地表明你确实想要逃逸分析,所以它应该.
我看不出有任何理由需要第二个无关属性来使第一个属性``正常工作,你编写'域'认为它会有效,然后因为不写(或忘记写)另一个属性,你的代码现在就在骗你.
除非被你试阻止逃逸漏洞咬伤,否则你不会知道它;使情况实际上比无用更糟糕,因为当你追踪你的漏洞时,你看着属性并继续找其他地方.
'域'应该在你编写它时工作.如果说写'域'推导出另一个属性,则不管怎样…,但这不好,即'域'默默地闲着,并混淆或误导作者.

当你编写它时,它确实有效.“第二个无关属性”(我假设是"中"属性)指示域'指针是否返回.
没有'中'属性表明无法编写以下代码:

int* = foo(scope int* a) { return a; }//错误:`'A'`正在通过`中`逃逸!
scope int* p = ...;
scope int* q = foo(p);

好吧,则为什么'域'需要’@safe'?

不是.不过,它需要-dip1000.

int* foo(scope int* q) { return q; }
./cc -c x.d -dip1000

x.d(1):错误:可能无法返回"q"域参数.

int* foo(scope int* q) { return q; }^

:好吧,则为什么'域'需要’@safe',它自身就是一个额外的属性;要求有第二个属性,才能使第一个属性生效,价值不大.
当你编写'域'时,'域'就应该可工作.如果你不想域检查,请不要写'域'?

因为在@系统代码中,你可随心所欲.但是,要向调用者,表明它是'域',请在参数列表添加该属性.要靠你来兑现该承诺.

在一个设计合理的程序中应该最小化@系统.这就是默认转为安全的原因.

1.'域'不是类型的一部分.它是一个存储类,而不是类型限定器.唯一的类型限定器immutable,const,shared进出.
编译器处理类型时普遍处理它们.除了借用检查器外,制作一个新的指针类型会是一项巨大的工作.

2.在传递属性方面拥有丰富的经验.因此,使用它们有很多阻力.看看所有对'nogc'是传递的抱怨就知道了.就我个人而言,我发现'常'传递性的,严重阻碍了在dmd源码中使用'常'.

问题是它不适合访问者模式.有几种情况丢弃了'常'.

3.我很清楚,最好,如果@活是传递性的,那会更响亮.我98%确定,如果@活传递性的,它将立即毫无用处,因为没人愿意让现有程序或库通过借用检查器.

Rust花了巨大的努力来说服人们他们必须丢弃现有代码并从头开始重新编码才能使用借用检查器.将不得不丢弃许多现有代码.
制作完美的借用检查器是制作实用的检查器的敌人.

4.使dip1000变成传递性,在现有代码中会不实用.
5.dip1000使得给多个间接赋值指针是一个错误(因为不是类型限定器).

6.当一个@活函数调用另一个函数时,"域"参数是借用,非域参数转移物主.

7.因为DFA,编译@活函数的速度很慢.使其有传递性将使整个程序编译速度Rust一样慢.

:D自身已有3种不同类型的指针:引用,指针,数组/切片.
加上'this',lazy,闭包,关联数组和类引用.
它们是D最初设计的一部分,该语言围绕着他们成长起来.

他们还使dip1000的实现非常复杂.
试在新的指针类型中折叠是个巨大的变化.
如果我要为D重新做一次,我会努力考虑丢弃其中的一半.几年前,我试摆脱lazy,但遭到了很多阻力.
微软的管理C++有用不同语法区分的普通指针gc指针.但在市场上失败了.
:不承认语言的缺点,很多人必须一遍遍地说明.你还不承认.
我已多次承认了它,并说明了所提出的方法有的问题(传递性,新的指针类型).
Rust是一个一切围绕着借用检查器单一语言.这不适合多彩的D语言.借用检查器必须与语言的其余部分相适应.
当然,即妥协.妥协不表明它毫无用处.

:还有''中 引用''''中''的混乱,可写成''中 域''''域 中''.
这是因为有'引用'.考虑'引用 整*p'.如何建模引用的和指针的?

:这两个人都有相同逃逸集,只是关系强度不同.
强度?

:这当然是D社区实现过的最糟糕的设计决定之一,所有相关方都感到非常遗憾!😃
它背后的概念运作良好.问题是所有指针构造复杂性,比如不可见的使用'本'引用.

:记住DIP1000只理解不逃逸,在返回值本指针逃逸.
这足以避免栈的逃逸指针.它相当扎实.如果你不同意,请提交一个代码片来说明它.

:不支持多个输出,这严重限制了它的能力.
它不会严重限制它.甚至Rust手册也说这很少见.这是一个可重构掉的小小的不便.

http://www.xdnf.cn/news/396127.html

相关文章:

  • all-in-one方式安装kubersphere时报端口连接失败
  • C++.变量与数据类型
  • 单片机调用printf概率性跑飞解决方法
  • Go语言实现分布式锁:从原理到实践的全面指南
  • 网络编程(一)网络编程入门
  • LLMs之Mistral Medium 3:Mistral Medium 3的简介、安装和使用方法、案例应用之详细攻略
  • 使用 Java 反射打印和操作类信息
  • Typora输入文字卡顿的问题(原因过长上万字)
  • Spyglass:默认配置文件
  • VMware安装CentOS Stream10
  • ArtStation APP:全球艺术家的创作与交流平台
  • 九、STM32入门学习之WIFI模块(ESP32C3)
  • 轻量级高性能推理引擎MNN 学习笔记 01.初识MNN
  • 跟我学c++高级篇——模板元编程之十三处理逻辑
  • E+H流量计profibus协议如何转换成profinet协议
  • C语言_函数调用栈的汇编分析
  • 【AI论文】作为评判者的感知代理:评估大型语言模型中的高阶社会认知
  • 二分查找的理解
  • Object类
  • wordpress自学笔记 第三节 独立站产品和类目的三种展示方式
  • RabbitMQ的工作队列模式和路由模式有什么区别?
  • 2. cef 及 cefcapi
  • 全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷七及详细答案解析
  • Qt开发经验 --- 避坑指南(13)
  • 梦熊联盟:202505基础语法-题解
  • 沐言智语开源Muyan-TTS模型,词错率、语音质量评分都处于开源模型的一线水平,推理速度相当快~
  • Go语言运算符详解
  • No module named ‘xxx’报错原因及解决方式
  • DedeCMS-Develop-5.8.1.13-referer命令注入研究分析 CVE-2024-0002
  • css背景相关