相关疑难解决方法(0)

在D中编译时间码生成

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

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

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

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

compiler-construction reflection code-generation d

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

如何在D中编译时枚举结构或类中的名称和类型?

如何在编译时枚举结构或类中的名称和类型?

即执行以下操作:

struct Foo {
  int x;
  int y;
}

string serialise!(A)(A a) {
  ...magic...
}

auto f = Foo(1,2);
serialise(f); -> "x:1, y:2"
Run Code Online (Sandbox Code Playgroud)

谢谢,

克里斯.

reflection d compile-time

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

D对于这些功能是否足够强大?

在最长的时间里,我想设计一种结合了可扩展性和效率(安全性,易用性等)的编程语言,我最近重新发现了D,我想知道D 2.0是否几乎是我想让自己做的语言.我最喜欢的是元编程的潜力; 理论上,D的特征系统能否在编译时启用以下功能?

  1. 运行时反射:编译时反射功能是否足以构建Java/.NET的运行时反射系统?

  2. 代码转换:使用元程序,创建C#/ C++ /等.每次编译时都会显示D程序的版本(如果可以传播文档注释,则可以获得奖励积分).

  3. 性状.我并不是指D中内置的元编程特征,我指的是类组合的面向对象特征.AD程序将指示要组成的一组特征,并且元程序将组成它们.

  4. 单位推理引擎:给出一些可选指示单位的表示法,例如unit(value),D元程序可以检查以下代码,推断出正确的单位,并在最后一行发出错误信息吗?(我为boo编写了这样的东西,所以我可以向你保证,这在整个程序范围内是可行的):

    auto mass = kg(2.0);
    auto accel = 1.0;                      // units are strictly optional
    auto force = mass*accel;
    accel += metresPerSecondSquared(9.81); // units of 'force' and 'accel' are now known
    force += pounds(3.0);                  // unit mismatch detected
    
    Run Code Online (Sandbox Code Playgroud)

d metaprogramming

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