为什么不?给定:

int fun(string s) pure nothrow;

签名,可假定s,因为无逃逸通道,返回值无指针,函数不能访问全局变量,无其它赋值参数.
而签名为

int fun(string s) pure;

时,可赋值s异常,如何避免/检测它?

域推导需要100%,pure nothrow不会破坏,只有异常的pure函数,才会失去免费域推导.
给用户加任意限制外,完全禁止pure throw导致严格破坏超集.

只有在不纯函数中抓异常时,才会打印异常的跟踪栈.此时,副作用在,不使抛异常的函数(应该不纯,却未不纯)不纯的地方.
函数中也可异常,抓块中处理异常,与返回而不是抛异常是一样的.
还有个问题:仍可赋值非异常可抛,并抛出.如果函数实现是@safe,编译器会因为自动加而错误地避免了抛异常(应抛未抛).考虑了它,即禁止断定按消息用s.允许则更差,可能断言成功后访问过期内存.
这是讨厌的疏忽.我希望不必完全取消基于scope推导的pure.由于每个程序只抛一次错误,因此可以使断言程序消息串,这样想要回溯时强制复制,但抛自定义可抛类时,很难强制.


:可按返回值建模异常.这是严格的局部重写.因此,与写入传入指针内存相比,并未违反纯度.
它们可返回到比调用函数更高.将破坏调用者帧中栈内存.@safe禁止它.指的是通过可抛逃逸的而不是从纯函数中抛出推导域参数.