我们最近经常会遇到并听到它们,我想在stackoverflow上对它们进行一些很好的比较。链接,参考和文章也没关系。
答案 0 :(得分:12)
C ++ 0x肯定更像D而不是C ++ 98或03,但它们仍然是绝对不同的语言。从刻板印象来看,D被认为是一个更好的C ++,它更像是C ++而不是任何其他语言,但它仍然是它自己的野兽。在这种情况下,我能想到的唯一一个C ++具有D绝对缺乏的功能是多重继承,但考虑到多重继承的所有问题,几乎C ++之后的所有语言都决定反对它。相反,D引入了许多其他功能,例如alias this
和mixins,以允许实现继承(在具有C#和Java之类的接口之上),因此您通常仍然可以获得多重继承的好处,而无需全部头痛。可能还有一些其他的东西,C ++没有,但D你可能不得不为它们努力搜索。
D通常可以做C ++可以做的任何事情,但它可以比C ++做得更多,并且它通常可以做得更好。 D的弱点主要在于其相对年轻的编译器实现(这可能意味着编译器在处理更新的功能时存在错误)以及其标准库非常重要的事实(虽然很多内容很棒,并且它仍在继续改善和成长)。但是,给定时间,这些问题显然会消失。如果有的话,我会说D比C ++强大得多。在D中完成一系列编程之后,我不得不用C ++编程,这让人感到很沮丧。当涉及到模板时,这是特别真实的(D的模板在功能和可用性方面将C ++的模板从水中清除掉)。一般来说,D更简单,更容易出错。它确实存在的问题是实施问题,这些问题是完全暂时的,并且正在稳步修复。
现在,对于C ++ 0x,它为C ++添加了许多新功能,这些功能肯定会改进它。其中一些功能已经在D中。其中一些例子是lambdas,foreach循环和auto
(我特别期待auto
。我对于它有多大感到非常惊讶改变游戏规则的是D)。因此,D在C ++ 98/03上改进的一些东西将在C ++ 0x中。但显然不是所有人都会这样,而且C ++绝对是一种与D不同的语言。它不是D.它不能是D.它不应该是D.虽然它们在核心非常相似,但它们是绝对不同的语言。
如果你真的想了解更多关于D的信息,你应该查看Andrei Alexandrescu的The D Programming Language,这是关于D的权威书籍,也是我读过的最好的编程书籍之一。另外,正如另一个答案所指出的,有一个相当不错的各种语言的比较网格here。当然,还有official site。
答案 1 :(得分:11)
我曾经是一名C#程序员(我也熟悉C ++和Java),但在学习D之后,我会说它是有史以来最好的语言,只要它的编译器没有bug。看看这些页面:
D没有流行的主要原因有两个:
编译器不是没有错误的(例如,前向引用错误非常烦人且难以解决)(编辑:它的改进很多!)。
没有可移植的方式与传统的C ++代码交互几乎任何其他语言,包括D.因此大多数人只是被迫继续使用C ++来使用他们的旧代码。
< / LI>虽然使用GC并非“必需”,但标准库会广泛使用它,因此如果您使用的是Phobos,则非常不得不使用它。我认为有计划解决这个问题,但只要是这种情况,那些想要手动内存管理的人可能会避免使用D.
如果这些问题得到解决,我会说D很可能会很快发现。
答案 2 :(得分:10)
我的经验主要是C ++ 0x调整了C ++的某些方面,但实际上,它是相同的语言,只是更清晰,更灵活。但是,C ++ 0x中存在很多主要问题,比如#include,常规函数的自动类型推导代码在某种程度上还远远不够。我喜欢C ++ 0x,这是一个很大的改进,但它是朝着正确方向的小步骤。
D,我发现是,好吧。我不知道。我不喜欢D.我觉得它没有解决需要在C ++中修复的问题,并且几乎按照自己的方式进行。我的意思是,语言无论它想成为什么都没有错,但它并没有让我觉得D在C ++上真正进化过,它只是一个C ++ / C#混合体,它只是C#的演变。例如,它具有相同的单根对象层次结构,强制GC等。我觉得D可能是C#,其中一些功能如泛型和RTCG只是转移到编译时而不是运行时。C ++ 0x远远不够,D在一边走进C#和Java已经存在的领域。作为C ++的继任者,我肯定还在其他市场上。
答案 3 :(得分:5)
D是一种不同的语言,据说是为解决C ++的许多问题而发明的。我从未尝试过,因为我从未被C ++的“问题”所困扰。
C ++ 0x是C ++的新标准,它增加了许多非常需要的功能(不幸的是,不幸的是我们不希望这样做)。要查看C ++ 0x添加的内容,请查看其上的wiki条目:
答案 4 :(得分:4)
C ++ 0x是C ++的下一个标准(前一个是在2003年设置的)。这两种语言是一种语言。
D是另一种语言。您可能最好问一下C ++和D之间的共性。我对D的经验几乎没有,所以我不能告诉你我对它的看法,但我对C ++有相当多的经验。我听说D解决的C ++中最重要的(假定的)问题之一是垃圾收集:C ++没有垃圾收集器,而D确实有垃圾收集器。
我个人更喜欢C ++的方式。我对垃圾收集器知之甚少,但是上次我检查时没有有效的垃圾收集器,它确保了正确和确定的内存清理,关于GC何时突然进入并完成它的东西。当然,C ++中的动态分配可能会失败,但是有一些方法可以将所有程序的内存分配失败分组到一个点(内存池),这样您就可以在编译时告诉您一旦通过该点就不会有operator new
失败。这种技术还为您提供了近乎即时的动态分配:分配然后是程序内部的,只是一个指针游戏。
此外,垃圾收集器仅适用于内存,而不适用于其他资源。
答案 5 :(得分:2)
只是想提供一个简单的总结答案:
<强> C ++ 强> 是一种命令式,多范式的编程语言。直到最近,C ++还没有为并发提供原语,程序员很大程度上依赖于库支持。 C ++支持复杂的多重继承。 C ++标准包括一个广泛的标准库。
<强>的C ++ 0x 强> 撰写时(2011年1月2日)C ++ 0x是C ++的最新草案标准。它增加了许多新功能,有助于使其与其他现代语言一致。一些更值得注意的功能包括:并发和线程功能,lambda表达式和扩展现有的元编程支持。
D 是一种受C ++影响很大的独立语言。它借用了Java和Eiffel的概念。 D实现垃圾收集。 D已经用接口和混合支持取代了C ++多重继承。
C ++和D具有完全不同的标准库实现。 C ++已经获得了广泛的行业认可,并且经常被使用。 D未能以同样的程度渗透到这个行业。