把库可实现的功能放进语言是个坏主意.
是的.但是目前该语言缺乏良好方式完成它的工具.需要它:
template FOO(T) {
alias FOO = T;
}
pragma(msg, FOO!int); //`FOO`降级成`int`
template BAR(alias T) {
enum BAR = T;
}
pragma(msg, BAR!42); //`BAR`降级为`42`
//提议的新功能:自动串插件
template BAZ(string T) {
mixin BAZ = T;
}
pragma(sg, BAZ!"42, 42");
//`BAZ`应该降级成`pragma(msg,mixin("42,42"));`
//注意:`mixin("42,42")`目前不管用.
//所以变成`pragma(msg, 42, 42);`
这是否可在编译器中实现?
没错,但如下可作为库功能实现吗?考虑:
void test {
int x = 78;
func("x = $x");
}
为了使其正常工作,必须在"测试"环境中分析"x"的语义.但它错误的在"func"的环境中求值.
在"test"环境中求值,要求"func"返回串,然后应用mixin.
因此,它必须写成:
mixin(func("x = $x");
DIP1027提供了语法糖.