小编deb*_*bio的帖子

在D中编译时间码生成

我目前正在学习D,我想知道的一件事是D是否有办法复制JVM语言的代码生成功能.

这是一个场景:我有一个对象,我想基于该对象生成一个字符串,该字符串给出了它的名称及其所有字段.在Java/Scala中,我可以使用反射,但假设速度是一个问题.我可以使用字节码生成库来动态生成和编译一个没有反射的类.实现将分解为迭代对象的字段并通过递归获取其名称,并使用该信息动态生成直接访问字段的Java(或字节码).

如果您不喜欢这种情况,因为它很弱和/或不现实,另一个可能更现实的是优化对象序列化.

我已经看过D编译时评估和/或模板元编程用于编译时预先计算斐波那契序列和其他递归算法的例子,但有没有办法用这种语言和编译器做这样的事情,或者你需要开发一个单独的代码生成器并在编译器之前运行它以获得这种功能?

compiler-construction reflection code-generation d

10
推荐指数
2
解决办法
1447
查看次数

书籍示例的问题

它只是我,还是"D编程语言"第68页有问题?在这个页面上,作者讨论了D的if-else语句的语法以及它们如何嵌套.他首先介绍了这个例子:

if(a == b)
    if(b == c)
        writeln("all are equal!");
    else
        writeln("a is different from b. Or is that so?");
Run Code Online (Sandbox Code Playgroud)

然后他指出,否则将绑定到第二个if.然后他说,为了让其他人绑定到第一个if,应该使用这样的大括号:

if(a == b) {
    if(b == c)
        writeln("all are equal!");
    else
        writeln("a is different from b. Or is that so?");
}
Run Code Online (Sandbox Code Playgroud)

我完全忽略了这一点,还是你必须这样做:

if(a == b) {
    if(b == c)
        writeln("all are equal!");
}
else
    writeln("a is different from b. Or is that so?");
Run Code Online (Sandbox Code Playgroud)

d

5
推荐指数
1
解决办法
195
查看次数