D是Java和C ++的可靠替代品吗?[关闭]


163

D语言是否可以替代Java和C ++?成为可信的替代方案将需要什么?我应该学习吗?它值得传福音吗?

我要问的主要原因是,几乎在这里有了新的C ++标准(c ++ 0x),对于我来说,很明显,对于任何了解它的人,该语言已经远远超过了无回报的地步。我知道C / C ++永远不会消失,但是在某些时候我们需要继续前进。甚至COBOL时代已经到来,Java在许多方面都放弃了C ++。下一个是什么?D会付账吗?


23
COBOL回来了,但是如果它使您喜欢,请继续学习D。阅读茶叶与预测《下一门大语言》一样有很多作用。
Shog9年

5
我不在乎下一种主要语言是什么,我更担心的是,如果我要告诉我的更多雇主,我想在下一个项目中使用D,那么我不会被重视,因为该语言是“还没有
马克·凯格尔

22
应该注意的是,数字火星的“ D vs. C ++”页面与C ++有着很大的区别。很多次他们说“ c ++不能做到”,C ++ 可以做到
Johannes Schaub-litb

23
@Johannes:这不是语言使之成为可能的原因,而是语言使之变得容易的问题。
-Brian

9
@Rahul,同意,但是他们应该这样说。就像“用C ++做到这一点并不容易”,并不是说根本不可能。
Johannes Schaub-litb

Answers:


130

决定用于现实世界软件开发的编程语言的成功与普及的因素仅部分与语言本身的质量有关。作为纯语言,D可以说比C ++和Java具有许多优势。至少在所有其他条件相同的情况下,它是一种可靠的替代语言,可以作为一种纯语言。

但是,软件开发还需要考虑其他方面-几乎不仅仅是语言本身:可移植性(可在多少平台上运行),调试器支持,IDE支持,标准库质量,动态库支持,通用API的绑定,文档,开发人员社区,动力和商业支持,仅举几例。在所有这些方面,D都无可救药地落后于Java,C ++和C#。实际上,在这些方面,我认为它甚至落后于诸如Python,Perl,PHP,Ruby,甚至JavaScript之类的“脚本”语言。

直言不讳,您根本无法使用D来构建大型的跨平台应用程序。使用不成熟的标准库,任何现代IDE(Visual Studio和Xamarin Studio / MonoDevelop都有插件)均不受支持。动态/共享库支持,以及与其他语言的绑定很少,D根本就不是今天的选择。

如果您喜欢D的所有内容,请学习它-如果您已经了解Java和C ++,就不需要很长时间。我认为传福音不会有帮助-在这一点上,如果D要成功,那么真正需要的是更多的人静静地使用它并解决其主要缺点,例如标准库和IDE支持。

最后,对于C ++,尽管大多数人都认为该语言太复杂了,但成千上万的公司通过只允许使用较小的,定义明确的语言子集,成功地将C ++用作健康的多种语言的一部分。当同时需要原始性能和较小的内存使用时,仍然很难击败C ++。


8
称其“在任何现代IDE中均不支持”的说法有点夸大其词。在Eclipse中有支持。它不是一等班,但是在那里并且还在不断进步。
BCS

46
缺乏证据并不意味着缺乏证据。
FeepingCreature

29
如果有人做出肯定的断言,例如“有粉红色的独角兽”,则必须在合理接受之前提供证据。当然,这并不意味着没有@FeepingCreature所说的粉红独角兽,而是简单地指出这不是一个令人信服或有效的论点。
JoshD

8
@Feeping:这是一个可爱的说法,詹姆斯·兰迪(James Randi)喜欢乱扔,但事实并非如此。如果您的测试有合理的证据支持该测试应该找到某些东西,但是没有,那是缺席的证据。
GManNickG 2011年

9
我想补充一点,我们确实使用D1和Tango构建了大型应用程序。好的,我们不是跨平台的,而只是Linux。我们的整个基础设施是用d,我们每小时处理超过30K请求的大DHT后端也被写入D.
Marenz

108

只是为了添加我自己的经验:

大约一年前,我从事了一个为期3个月的小型游戏项目(3个编码器),在该项目中,我们以D作为主要语言。我们选择它作为实验的一部分,部分是因为它已经具有对SDL和我们正在使用的其他工具的绑定,并且主要是因为它似乎比C ++具有更多的好处。

我们喜欢使用它。它学习迅速且易于编写。它的许多功能被证明是无价的,我想念它们回到了C ++。

但是,以下几点使我们的生活更加困难:

  1. 当时没有好的IDE,这是一个主要问题。我们最终通过自定义Scite制作了自己的游戏。这行得通,但并不理想。
  2. 当时没有调试器。我们设法使WINDBG在失败的基础上工作,但这并不可靠。没有调试器的情况下调试代码有时会使生活变得井井有条。
  3. 当时有2个标准库可供选择(Tango和Phobos)。我们从一个开始,切换到另一个,确实需要同时使用两者的功能(Tangobos!)。这引起了麻烦,并重写了一些代码。
  4. 与其他工具的绑定不可用。最后,我们不得不切换到DirectX(出于我不愿讨论的原因)。没有可用的DirectX绑定,因此我们不得不用C ++编写自己的代码,将其构建为.dll并绑定到该文件。这是相当讨厌的工作,需要一些时间。

总体而言,我们喜欢编写D。它使编写代码的实际过程变得容易并且学习迅速。我已经提到的问题呼应了这个问题的答案-它是D中需要解决的“额外”位,其核心是坚实的。


4
很酷的输入...现在有一个调试器!:)
bbqchickenrobot

13
我不明白为什么DirectX是个问题。我不是D程序员,但我以为D可以理解C?DirectX有C API吗?

使用带有本机D接口的DirectX相对容易,因此除某些特殊情况外,无需在c ++中编写包装器
Quonux

@Quonux:那是我们在08年的经历。毫无疑问,自那时以来,事情发展了很多。我再也回想不到血腥的细节了。
xan 2015年

1
2019年更新:D编程语言已显着扩展。现在,您可以将GDB与Dlang一起使用。DPP让您直接在Dlang中包含任何C标头。Calypso让您使用Dlang中的任何C ++库,包括Qt -它有一些bug,但是可以正常工作。
noɥʇʎԀʎzɐɹƆ

60

我同意C ++正在成为一种死胡同的语言-在过去的17年中使用它后,让我很难受。

我认为D是C ++的合理继承者。从语言的角度来看,它“做所有正确的事情”(即使我不同意每分钟的决定)。我认为随着C和C ++的下降,没有任何其他系统级语言可以真正完成它们的工作,同时在D语言中占据了主导地位!D不仅扮演这个角色-而且擅长于此!看看D1.x应该足以使您相信这一点-但是当您查看D2.0时,会让您大跌眼镜。我认为,当今没有其他语言能够像D2.0一样在命令式和函数式编程范式之间架起桥梁,这在未来几年中将变得越来越重要。

缺乏主流接受-甚至知名度-以及大型,成熟的图书馆- 当然都是障碍。但是,我认为您不能因此而将其注销。我坚信D 在未来几年内发展成为最重要的语言之一,而那些现在正在认真对待的语言将有能力在那个时候到来。

我认为,这种差异将在很大程度上归因于Andrei Alexandrescu的参与。这绝不以任何方式抹煞沃尔特·布赖特(Walter Bright)的魅力,后者在将D推向世界上所做的重要工作。但是Alexandrescu在C ++社区中确实是一个重要且引人注目的人物-而且那里是大多数潜在的D切换器的来源。他还为D2.0对函数式编程的支持做出了重要贡献。

仍然可能会发现D注定是系统级语言的Betamax-但是我的钱是在接下来的两年内实现这一目标。


20
对于系统级编程,C并没有下降。Linux的,Windows和OS X在C.所有发达国家同样,许多微控制器和操作系统的微控制器使用C.编程的
凯文-

12
我不认为D“做所有正确的事情”。正确的做法是从头开始,而不是尝试制作更好的C ++。我认为,需要更多的根本性改变来证明从C ++大规模转型。
jalf

9
凯文:Windows和OS X不是用C语言开发的。内核的块当然是,但是Windows使用的是C ++堆,而OS X是Obj-C。Linux是我所知道的唯一将C提升到一种真实语言状态的操作系统,并且没有使用其他任何操作系统。
jalf

16
不错的预测。距此职位已过去2年了,D与主流采用者之间的距离也越来越近。
mikerobi 2010年

18
@mikeobi哈哈!两年从您阅读该句子的时间开始;-)
philsquared 2010年

20

我喜欢D是一个天才的作品,主要是一个头脑-Walter Bright,他的Zortech编译器在当时是很棒的。

相反,即使Bjarne产生了影响,C ++还是由委员会过多设计。太多的附加功能和奇怪的新语法。这种差异体现在学习的便利性和日常使用的便利性以及更少的错误中。

更加一致的语言可带来更高的生产率和程序员的乐趣-但这是主观的和有争议的!(我想我应该把我自己的答案否决)


9
现在还有另一个天才正在研究它-Andrei Alexandrescu。恕我直言,他对D2.0所做的事情至少与沃尔特对D1.x所做的一样惊人。在他们两个之间(不打折众多其他贡献者),D正在成为一种不容忽视的语言。观看此空间
philsquared

5
使这3个(或更多)该死的优秀程序员:Bartosz Milewski
BCS

7
因此,C ++最初是由一个真正聪明的人创建的,现在由一个真正聪明的人的委员会控制,而D最初是由一个真正的聪明的人创建的,现在由...一个真正聪明的人控制。是的,我知道这是如何使D脱颖而出的。;)(提示:C ++的丑陋与委员会无关。这是该语言的设计目标的结果。它的意图是(几乎)是C的一个子集。D不是,并且也不意图如此。 ,这意味着它可以避免很多疣(以同时避免其带来的知名度为代价)
Jalf

4
@jalf,您说对了,C ++的“丑陋”不是由委员会设计的。不过,它发展缓慢。
philsquared

15

D是一门很好的语言相当受欢迎,但是与所有语言一样,它只是另一种工具。使用哪种工具取决于您的类型,思维方式,工作环境,程序所受语言的限制,最重要的是程序本身。如果有时间,我绝对会建议您学习D。最坏的情况是,您永远不会使用它。您更有可能会了解到您最喜欢它的哪些方面,以及在什么条件下它最亮,并在制作新程序时加以利用。

我建议您查看D比较表,以了解该语言的功能,并查看它是否适合您。


10

D语言是现代的。没有一种语言是完美的,对此毫无疑问。但是语言的诞生是为了让生活更轻松。就复杂性而言,D语言与C ++相比具有许多优良特性。涉及许多其他语言组合专业,通过其他语言引入的TOP功能,可以帮助编码人员更快地编码。另请参阅: 有关D和其他语言的更多详细信息

  • D与C ++的兼容性是涉及大量C ++语言并要求与D兼容的兼容性。D已允许与C达到100%兼容性,这仍然是一个好选择。

  • D vs C ++,C ++是我认为非常好的语言,但是它的难于编写代码和耗时,需要越来越多的经验来获得成功,但是D允许简单地做到这一点

  • D vs C ++,我不确定C ++是否可以,但是D不允许使用“ auto”进行类型限制变量赋值,这可以使变量动态化,这在需要时可以使用严格类型

  • D vs C ++,如果您有其他语言经验,则可以直接开始使用,它具有易于学习的路线图,并且由经验丰富的团队和公司支持进行设计

  • D vs C ++是我发现的D的一个很好的方面,它是代码样式,它的外观和感觉与C / C ++完全相同,而编码使我想起了我正在做的叫D的现代C / C ++

对于D语言,还有许多更好的理由,没有理由低估任何一种语言,它始终是用户的选择。


7

这实际上取决于您的需求-用D编写的大规模商业应用程序确实存在于服务器端,并且对于D(通常使用Tango / Mango)是否合适,您很可能可以满足更多请求比使用任何其他语言/平台。

对于协议和交互性(很多)而言更专业的解决方案,您在找到所需的库时会遇到更多问题,缺少工具可能会给您带来更多影响。


1
你能提供一个这样的商业应用程序的例子吗?
亚历山大·马拉霍夫

1
// @亚历山大·马拉霍夫(Alexander Malakhov):一个...嗯...好问题....我很高兴你问是否存在商业应用程序....经过深思熟虑的问题...肯定.....我很钦佩... ...这是我们应该问的那种问题.....显示您的才智..... hmm ...让我搜索... D中的商业应用程序... hmm ....... 。等等...我知道但是....只是想不起来...肯定有....只是坚持...我还在搜索...坚持下去!
简单的研究员,

7

D令人印象深刻,Andrei的书也写得很好。但是正如其他人所说,您需要工具和平台支持。随着时间的流逝,GDC可能是两者的答案。

你见过这个吗?

“ GNU调试器添加了D语言支持”:http : //www.linux.com/news/enterprise/biz-enterprise/358956-gnu-debugger-adds-d-language-support

另外,digitalmars网站上有一些页面讨论与C和C ++的接口(对于那些您不能没有的库)。我不知道在给定C头文件的情况下,是否有任何工具可以阻止编写D原型。

就我个人而言,此时我不会推动在D中进行大型项目,但我会将 D用于内部工具,获得有关它的经验并向其他人介绍它。

最初的问题是D是否是Java和C ++的可靠替代品。我不认为D和Java实际上在竞争中会竞争太多。D与C ++竞争,现在与Go竞争。其他问题解决了D和Go之间的区别,但是通常认为Go更易于使用。因此,我怀疑D的未来很大程度上取决于它在C ++(当前的山丘之王)和Go(拥有谷歌支持的更容易的替代方案)之间有多少空间。

更新:我刚刚发现,安德烈(Andrei)的书中我最喜欢的一章,即并发性,可以免费在线获得。绝对值得一读!

这是关于Go和D的相对优缺点/目的/方法的简短讨论


我对Rust不太了解;我正在等待它达到1.0。但是您是对的,它绝对值得一看,并且似乎可以在相同的空间中播放。
AmigoNico 2012年

1
我对D唯一不满意的是类型系统。好老 OO层次结构是侵入性的。我不喜欢将其作为起点。锈在这方面更好。
赫尔曼DIAGO

4

看来问题已得到解答。与C ++相比,D是更好的语言。

出于实用目的,D是否具有更好的基础设施的问题是次要的。

简而言之,如果它们都是全新的语言,并且周围没有任何支持,那么D是更好的语言,ergo是更好的语言。


4

作为一种语言,我一直觉得D比C ++更接近C#。不是在功能和库中,而是在“感觉”中。它比C ++更干净,更有趣。恕我直言,成为可靠替代方案的最大障碍是工具,IDE和调试器。如果D克服了广泛使用/采用的一些障碍,那么将会出现更多的工具和库。(如果有可用的IDE和调试器,我本人将返回D。)


那mono-d插件呢?:mono-d.alexanderbothe.com
user1284631 2013年

3

非常适合我自己的宠物项目。我将它用于雇主的项目,但是却不知道在我继续前进后,找到某人来接管工作对他们来说会有多困难。至少在受支持的平台上,没有技术上的原因可以避免它。(敲木头)


3

一种方法是搜索您所在地区的工作。找到您想做的工作,看看他们要求什么技能。如果他们要求C ++或Ruby或Oracle或D,那么这是主要用来帮助您获得所需工作的技能。


3

它看起来像是一种精心设计的语言;比C-C ++-目标C更好。我可以在没有IDE或调试器的情况下生活一段时间,但要拥有一个没有文档的D 2.0好的库,我就可以生存。

我会在6个月后再检查一次...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.