这里

消除​​引用 中 域​​歧义.

推导​​std.typecons.Tuple.opBinary!"~"​​时,应为​​return scope​​,推导为了​​return ref​​.

需要正确修复这个问题.

1,把​​return-ref​​变成了​​return-scope​​.

2,除非​​return-scope​​,总是​​ref-return,里scope​​.

推导属性前,​​escape.d​​修改了​​TypeFunction​​,在​​FuncDecl​​的语义尾会替换掉,有​​复制存储类​​.而有些复制函数忘记了​​returnScope​​.

现在,可解锁12689了.

必须要改​​visit(CallExpe)​​.新规则才能正常工作.你引入了​​STC.returnScope_和buildScopeRef​​,我使用它.按​​scope return​​重写​​return scope​​.

问题是有3种表示​​dip1000​​位的方法:

​存储类,函数标志,域引用​​.

这向​​funcflags​​添加了​​isreturnscope​​来按​​存储类​​模仿​​returnScope​​行为.我还要考虑一下

简单引入​​isreturnscope​​,在​​FuncFlags​​中正确设置.

用​​isreturnscope​​在​​存储类​​中为​​本​​参设置​​returnScope​​参数.

在​​逃逸分析​​函数中为​​本​​参使用​​ScopeRef​​.

则可很好修复错误.

推导问题


纯函数可通过异常逃逸

对抛的强纯函数,不加域是有意义的.


除非使用​​-revert=dip1000​​,打印弃用消息

这里

因为如果只是​​强迫​​使用​​-preview=dip1000​​,那么简单的一行​​mars.d​​就可以了,但是如果是类似​​DIP25​​(我希望这样),那么也许"默认打开​​DIP1000"​​将是更准确描述.

但是,​​DIP1000​​仍然存在(多个)错误呢?

目的​​确实​​​是做对​​DIP25​​​所做的.我不认为"打开​​DIP1000"​​​是准确的.目标是先用​​弃用​​​消息来惹恼​​用户​​​并强迫他们使用​​-revert​​​让他们离开.一旦到位,实际上可​​默认​​打开它.

此​​PR​​是用户收到没有意义的弃用警告

​-revert​​解决它.

​-preview​​​设计重点是​​降低​​​编译器中代码的​​进入门槛​​​,可淘汰并在野外尝试.如果在设计​​实际解决​​​之前就开始将​​DIP1000​​​设为默认值,那么我们既在​​-preview​​​失败了,也接受了​​不安全​​代码,两种失败

​-revert​​​是​​有选择地​​​禁用可能对​​某些用户​​​具有​​侵入性​​​的有效​​弃用类别​​​的方法.不是​​启用不完整预览开关​​借口.

我们"只"必须修复错误.

​DIP1000​​确实存在​​错误​​,但是,​​每个功能​​都存在.当我们可放心地说"现在是默认启用​​dip1000​​的时候了"时,安全何在?是否有任何​​需要​​先修复的明显​​漏洞​​?如果没有,我认为可以继续合并这个​​PR​​.

大问题​,与这里

DIP1000​允许实现既定目标:​​@safe​​引用计数.

我同意这是拦截器.​​DIP1000​​由于​​漏洞​​无法​​捕获​​的​​所有内存安全​​错误是一回事,而编译不是​​内存安全​​代码是另一件事.

还有这个

我懂了.我开始以为"如果用户不使用DIP1000​,则打印弃用​消息",而不是"用-preview=dip1000"​开始弃用​会出错构造.

dmd​修复不难(#12989)​,这里​,难的是不破坏火卫一(dlang/phobos#8214)​,这里​.事实证明,修复区间中scope​错误很麻烦​.不能显式标记​每个参数为scope​,因为它是通用​代码,因此希望依赖推导​.如果没有纯和不抛​,则很难推导域​(问题20674​,并且错误消息也没用:

如果用@safe​注解放/干放​,那么会导致__traits(compiles)或is(typeof())测试失败,给出无用错误.

那么合并​​PR​​​时,我担心会发生什么?人们升级到​​dmd2.099​​​后会遇到大量难以理解的​​scope​​​弃用错误,其中许多错误是由于错误​​推导​​​而导致的​​误报​​​.他们想修复它们,但在论坛中询问如何​​修复​​​之后,他们得到答案是"​​没人知道​​​".因而我希望在将​​DIP1000​​​设为默认值之前将其置于​​良好,有据可查​​的状态.


inout不隐含return

​inout​​不应隐含​​return​

带推断​​@safe​​的​​inout​​方法​​逃逸​​本地数据

删除​​return​​,可破坏​​现在​​代码.

意识到​​dip25​​已是默认,使当前不再吸引人,毕竟​​修复错误并保留增强功能​​更容易.