164

D 语言是Java 和 C++ 的可靠替代品吗?成为可靠的替代品需要什么?我应该费心学习吗?它值得传福音吗?

我问的主要原因是,随着新的 C++ 标准 (c++0x) 几乎就在这里,我很清楚,对于任何理解它的人来说,该语言已经远远超过了不归路。我知道 C/C++ 永远不会消亡,但在某些时候我们需要继续前进。甚至 COBOL 也有它的日子,而 Java 在许多方面都取代了 C++。下一个是什么?D 填单吗?

4

13 回答 13

128

决定一种编程语言在实际软件开发中的成功和流行度仅部分与语言本身的质量有关。作为一门纯语言,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++。

于 2008-09-28T22:20:34.920 回答
109

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

大约一年前,我在一个持续 3 个月的小型游戏项目(3 个程序员)上工作,我们使用 D 作为我们的主要语言。我们选择它的部分原因是作为一个实验,部分原因是它已经绑定了 SDL 和我们正在使用的其他一些工具,而且主要是因为它的好处似乎超过了 C++。

我们喜欢使用它。它学起来很快,而且很容易写。它的许多特性被证明是无价的,我很想念它们回到 C++。

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

  1. 当时没有好的 IDE,这是一个主要问题。我们最终通过定制 Scite 制作了自己的作品。这工作正常,但并不理想。
  2. 当时没有调试器。我们设法让 WINDBG 以偶然的方式工作,但它不可靠。在没有调试器的情况下调试代码有时会让生活变得糟糕透顶。
  3. 当时有 2 个标准库可供选择(Tango 和 Phobos)。我们从一个开始,然后切换到另一个,并且确实需要两者的混合功能(Tangobos!)。这引起了头痛和一些代码重写。
  4. 无法绑定到其他工具。最后,我们不得不切换到 DirectX(出于我不会深入讨论的原因)。没有可用的 DirectX 绑定,因此我们必须用 C++ 编写自己的绑定,将其构建为 .dll 并绑定到它。这是相当讨厌的工作,需要一些时间。

总的来说,我们喜欢写 D。它使实际编写代码变得容易,而且学起来很快。我提到的问题呼应了这个问题已被接受的答案——这是需要在 D 中解决的“额外”位,它的核心是坚实的。

于 2008-11-07T13:17:16.323 回答
61

我同意 C++ 正在成为一种死胡同——在过去 17 年使用它之后,这么说让我很痛苦。

我认为 D 是 C++ 的正确继承者。从语言的角度来看,它“做所有正确的事情”(即使我不同意每分钟的决定)。我认为随着 C 和 C++ 的衰落,没有其他系统级语言可以真正做到它们所做的事情,同时在现代语言的世界中屹立不倒——除了 D!D 不仅担任这个角色 - 它擅长这个角色!看看 D1.x 应该足以让您相信这一点 - 但当您查看 D2.0 时,它会让您大吃一惊。我认为,在连接命令式和函数式编程范式方面,当今没有其他语言能像 D2.0 一样工作——这只会在未来几年变得更加重要。

缺乏主流接受度——甚至知名度——以及大规模、成熟的图书馆——当然一个障碍。但是,我认为您不能因此而将其注销。我相信 D在未来几年内成长为最重要的语言之一——那些现在认真对待它的人将在那个时候处于领先地位。

我认为差异将在很大程度上归功于 Andrei Alexandrescu 的参与。这并不是要以任何方式诋毁沃尔特·布莱特,他在将 D 带入世界方面做了重要的工作。但 Alexandrescu 无疑是 C++ 社区中一个重要且引人注目的人物 - 大多数潜在的 D 切换器将来自那里。他还在 D2.0 对函数式编程的支持方面做出了重大而重要的贡献。

事实可能仍然证明,D 注定要成为系统级语言的 Betamax ——但我的钱将在未来两年内转向它。

于 2008-10-30T15:30:48.463 回答
21

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

相比之下,C++ 太多是由委员会设计的,即使 Bjarne 是一个影响者。太多的附加功能和奇怪的新语法。这种差异体现在易于学习和易于日常使用,错误更少。

更连贯的语言会带来更好的生产力和程序员的乐趣——但这是主观的和有争议的!(我想我应该投票给我自己的答案)

于 2008-09-29T04:56:44.640 回答
15

D 是一门很好的语言并且相当流行,但像所有语言一样,它只是另一种工具。使用哪种工具取决于你是什么样的人,你的想法,你工作的环境,应用程序的语言限制,最重要的是,程序本身。如果你有时间,我肯定会推荐学习 D。最坏的情况下,你永远不会使用它。您更有可能了解您最喜欢它的哪些方面,以及在什么条件下它最闪耀,并在制作新程序时利用这些优势。

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

于 2008-09-28T22:10:13.463 回答
10

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

  • D vs 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++ 完全相同,而编码它提醒我正在做真正现代的 C/C++,称为 D

D语言有很多更好的理由,没有理由低估任何语言,它始终是用户的选择。

于 2011-04-05T20:47:19.347 回答
7

这实际上取决于您的需求 - 用 D 编写的大型商业应用程序确实存在于服务器端,因此 D(通常使用 Tango/Mango)非常适合,您可能能够满足更多请求与任何其他语言/平台相比。

对于协议和交互性方面的更专业的解决方案(很多都是),您将在查找所需库时遇到更多问题,并且缺乏工具可能会对您产生更大的影响。

于 2008-09-30T12:19:20.450 回答
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(得到 Google 支持的更简单的替代方案)之间有多少喘息的空间。

更新:我刚刚发现Andrei 的书中我最喜欢的章节,关于并发的章节,可以在线免费获得。绝对值得一读!

这是关于 Go 和 D 的相对优点/目标/方法的长期讨论

于 2010-10-01T22:57:48.070 回答
4

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

于 2008-11-18T12:50:15.773 回答
4

看起来这个问题已经回答了。与 C++ 相比,D 是更好的语言。

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

简而言之,如果它们都是全新的语言,没有任何支持,那么 D 是更好的语言,因此它是更好的语言。

于 2011-04-05T01:01:08.217 回答
3

非常适合我自己的宠物项目。我会将它用于雇主的项目,但不知道在我离开后他们很难找到人来接管源。至少在受支持的平台上,没有技术原因可以避免它。(敲木头)

于 2008-09-29T04:48:01.400 回答
3

它看起来像是一门设计得很好的语言;比 C - C++ - 目标 C 好得多。我可以在没有 IDE 或调试器的情况下生活一段时间,但不能没有一个好的、文档化的 D 2.0 库。

我会在 6 个月后复查...

于 2009-01-28T04:15:14.177 回答
3

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

于 2009-03-08T07:59:15.653 回答