gpt4 book ai didi

reflection - D 中的编译时代码生成

转载 作者:行者123 更新时间:2023-12-03 00:02:19 25 4
gpt4 key购买 nike

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

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

如果您不喜欢这种场景,因为它很弱和/或不切实际,另一种可能更现实的场景是优化对象序列化。

我见过 D 的编译时评估和/或模板元编程用于在编译时预先计算斐波那契序列和其他递归算法之类的示例,但是有没有一种方法可以仅使用语言和编译器,或者您是否需要开发一个单独的代码生成器并在编译器之前运行它以获得此类功能?

最佳答案

这不仅可以做到,而且在 D2 中实际上已为您完成。您所需要的只是一个小型 mixin,将这些功能从编译时功能转换为运行时功能。

  • 对于类名,您所需要做的就是在类的作用域内评估 typeof(this).stringof

  • 要获取所有字段的列表,请尝试 __traits(allMembers, typeof(this)),然后过滤掉非字段的内容 (std.traits) > 在这里很有用)。

关于reflection - D 中的编译时代码生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3682620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com