d实例化模板应跳过生成代码
在D中,经常使用助手
来生成串插件
等代码:
public string ctfeHelper()(string a)
{
return "int " ~ a ~ " = 42;";
}
extern(C) int main() @nogc
{
mixin(ctfeHelper("a"));
return a;
}
使用-betterC
时,此代码
当前会失败,并显示以下消息:需要GC
,而-betterC
不提供该GC
.
但是,在仅支持CTFE
即GC
在概念
上总是可用的环境中,专门用该代码.
注意,如果ctfe助手
是普通函数,因为它是公共
的且可从外部
代码调用,必须发出运行时代码
.因此,此时,错误
是正确
的.
对该示例,'ctfe助手'
是个模板,可认为只使用CTFE
的实例化
,应该与运行时实例化
区别开:如果在CTFE
环境中,应可以
不为模板
生成代码:运行时
调用ctfe助手
的应再次
实例化模板,因此,可在那里生成代码
.在运行时
环境中实例化
模板时,用户应该在那里
得到错误.
考虑下面代码,它已可同-betterC
工作:
string ctfeHelper()(string a)
{
return "int " ~ a ~ " = 42;";
}
extern(C) int main() @nogc
{
return __traits(compiles, ctfeHelper("a"));
}
这里,
__traits(compiles,...)
是需要的线索,谢谢!
决定在哪"只编译"
的代码是一团糟
.花了一段时间才弄清楚该转动
哪个旋钮.
对@nogc
,在CTFE
中,可更多的利用GC
.对大多数CTFE
,已关闭了检查GC
.只是对该特例,是在代码生成器
中检查betterC
的nogc
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现