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

时间:2012-06-09 16:14:39

标签: metaprogramming d

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

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

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

  3. 性状。我不是指D中内置的traits,我的意思是metaprogramming traits。 D程序会指出要编写的一组特征,并且元程序会组成它们。

  4. 单位推理引擎:给出一些可选指示单位的符号,例如: unit(value),D元程序是否可以检查以下代码,推断出正确的单位,并在最后一行发出错误消息? (我为object-oriented traits for class composition写了这样的话,所以我可以向你保证,这在整个程序范围内是可行的:

    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
    

1 个答案:

答案 0 :(得分:7)

  

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

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

  

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

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

  

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

您可以使用template mixins,但不提供方法排除。

  

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

是的,这在D中很简单。已经有at least one implementation