deb*_*bio 10 compiler-construction reflection code-generation d
我目前正在学习D,我想知道的一件事是D是否有办法复制JVM语言的代码生成功能.
这是一个场景:我有一个对象,我想基于该对象生成一个字符串,该字符串给出了它的名称及其所有字段.在Java/Scala中,我可以使用反射,但假设速度是一个问题.我可以使用字节码生成库来动态生成和编译一个没有反射的类.实现将分解为迭代对象的字段并通过递归获取其名称,并使用该信息动态生成直接访问字段的Java(或字节码).
如果您不喜欢这种情况,因为它很弱和/或不现实,另一个可能更现实的是优化对象序列化.
我已经看过D编译时评估和/或模板元编程用于编译时预先计算斐波那契序列和其他递归算法的例子,但有没有办法用这种语言和编译器做这样的事情,或者你需要开发一个单独的代码生成器并在编译器之前运行它以获得这种功能?
这不仅可以完成,而且在D2中实际上已经完成了.您只需要一个小的混合来将这些从编译时功能转换为运行时功能.
对于类名,您需要做的就是typeof(this).stringof在类的范围内进行求值.
有关所有字段的列表,请尝试__traits(allMembers, typeof(this))过滤掉不是字段的内容(std.traits此处将非常有用).
String mixins可以访问它们混合到的命名空间.这包括this.tupleof,可用于迭代类的字段.序列化模板可能会利用它,或以其他方式强制用户指定要手动序列化的字段; 即.class Class : ISerializable { int foo; Forble bar; mixin(genSerialize("foo, bar")); ... }
| 归档时间: |
|
| 查看次数: |
1447 次 |
| 最近记录: |