d推导域容易混淆
按期望编译:
int* f()(int* p)
{
static int g;
g = 0;
return new int;
}
int* g() @safe
{
int x;
return f(&x);
}
如下不是,但应该:
int* f()(int* p)
{
static int g;
g = 0;
auto p2 = p; /*唯一差别*/
return new int;
}
int* g() @safe
{
int x;
return f(&x);/*错误:调用test.f!().f时赋值,`x`引用给`p`非域参数*/
}
要这样,需要,分析数据流,可以做到,但会大大增加实现复杂性和编译时间
.
可这样,来工作:
int* f()(int* p)
{
static int g;
g = 0;
scope p2 = p; /*唯一区别*/
return new int;
}
int* g() @safe
{
int x;
return f(&x); /* 好 */
}
这让我很困惑.示例
不包含单个分支或循环
.当然,可在此推导域
而无需创建控制流图
,对吗?此外,虽然我不知道当前推理是如何工作
的(无记录),但它已经有个非常复杂的循环
.
目前,为了推导p的域
,只需检查p的每个用法
是否符合域
.
为了使示例
(和其他类似示例
)正常工作,需要递归检查
可能赋值
给"p"
的变量(及自身递归赋值)的每次使用(如"p2"
).
这是图形搜索
问题.
问题是,一旦开始搞DFA
,人们就想要真正的DFA
.前端执行DFA
会显著减慢
它的速度.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现