最长一段时间我想设计一种结合可扩展性和效率(安全性,易用性等)的编程语言,我最近重新发现了D,我想知道D 2.0是否几乎是我想要的语言让自己。我最喜欢的是元编程的潜力;从理论上讲,D&#39 {}系统能否在编译时启用以下功能?
运行时反射:编译时反射功能是否足以构建Java / .NET的运行时反射系统?
代码转换:使用元程序,创建C#/ C ++ / etc.每次编译时你的D程序版本(如果可以传播文档注释,则可以获得奖励点)。
性状。我不是指D中内置的traits,我的意思是metaprogramming traits。 D程序会指出要编写的一组特征,并且元程序会组成它们。
单位推理引擎:给出一些可选指示单位的符号,例如: 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
答案 0 :(得分:7)
运行时反射:编译时反射功能是否足以构建Java / .NET的运行时反射系统?
是。您可以使用__traits在编译时获得所需的所有信息,并生成运行时反射所需的运行时数据结构。
代码转换:使用元程序,创建C#/ C ++ /等。每次编译时你的D程序的版本(如果可以传播文档注释,则可以获得奖励点)。
不,无论D有多强大,都不可能。有些功能根本无法转移。例如,D有一个内联汇编程序,100%无法转换为C#。没有语言可以无损地转换为所有其他语言。
性状。我并不是指D中内置的元编程特征,我指的是类组合的面向对象特征。 D程序将指示要构成的一组特征,并且元程序将构成它们。
您可以使用template mixins,但不提供方法排除。
单位推理引擎:给出一些可选指示单位的表示法,例如:单位(值),D元程序可以检查以下代码,推断出正确的单位,并在最后一行发出错误信息吗? (我为boo写了这样的东西,所以我可以向你保证,这在整个程序范围内是可行的):
是的,这在D中很简单。已经有at least one implementation。