d的@安全

为什么不?给定:

int fun(string s) pure nothrow;

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

int fun(string s) pure;

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

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

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


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

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