5

很长一段时间以来,我一直想设计一种将可扩展性与效率(以及安全性、易用性等)结合起来的编程语言。我最近重新发现了 D,我想知道 D 2.0 是不是我想自己制作的语言. 我最喜欢的是元编程的潜力;理论上,D 的特征系统可以在编译时启用以下功能吗?

  1. 运行时反射:编译时反射特性是否足以构建像 Java/.NET 那样的运行时反射系统?

  2. 代码转换:使用元程序,创建 C#/C++/等。每次编译 D 程序时的版本(如果可以传播 doc 注释,则加分)。

  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
    
4

1 回答 1

7

运行时反射:编译时反射特性是否足以构建像 Java/.NET 那样的运行时反射系统?

是的。您可以使用__traits在编译时获取所需的所有信息,并生成运行时反射所需的运行时数据结构。

代码转换:使用元程序,创建 C#/C++/等。每次编译 D 程序时的版本(如果可以传播 doc 注释,则加分)。

不,无论D多么强大,这根本不可能。有些功能根本不会转移。例如,D 有一个内联汇编器,它 100% 不可能转换为 C#。没有一种语言可以无损地转换为所有其他语言。

性状。我不是指 D 中内置的元编程特征,我指的是用于类组合的面向对象的特征。AD 程序将指示要组合的一组特征,而元程序将组合它们。

您可以为此使用模板混合,尽管它们不提供方法排除。

单位推理引擎:给定一些可选地指示单位的符号,例如单位(值),D 元程序是否可以检查以下代码,推断正确的单位,并在最后一行发出错误消息?(我为 boo 写了这样一个东西,所以我可以向你保证,这通常是可能的,在整个程序范围内):

是的,这在 D 中很简单。至少已经有一种实现了。

于 2012-06-09T17:07:20.520 回答