D 和 Go 可能会像 Python 和 Ruby 今天一样受到欢迎。它们各自填补了一些领域,尽管 D 原本被认为是 C++ 的全面替代品,但它可能永远无法获得足够的用户支持来取代 C++。更不用说这两种语言都还不够稳定/成熟,而且未知未来 10-20 年的硬件和操作系统是否会支持它们。考虑到 C/C++ 几乎是编译型语言中唯一的代表,并被广泛应用于大多数操作系统和本地代码应用程序中,因此在可预见的未来中,它很可能不会被淘汰。
C和C++组合在本地/非托管/“低级”语言方面几乎是无与伦比的。
这不是因为它们是最好的语言,恰恰相反,而是因为它们已经存在,能够胜任工作,并且"足够好"。毫无疑问,例如D,在大多数方面都优于C++。但是它在最重要的方面失败了:与所有现有的C++代码兼容性。如果没有这个要求,今天大部分代码将以托管语言编写。今天许多代码库之所以使用C++,仅仅是因为他们去年在使用它,转换到其他语言将是一件麻烦的事情。但是如果他们转换,通常不会转向D,而是选择C#,Java或Python。
D和其他“正在崛起”的语言争夺同样的领域时存在问题,尽管它们更好,但它们不足以激励人们真正切换到它们。
因此,C和C++会继续存在。 C不太可能进一步发展。它就是那样,其中一个填补的领域是"即使对于编译器编写者也很简单"。即使他们再也不修订标准,也没有其他语言可能在这个领域击败它。
C++的演变非常引人注目,C++0x即将到来,他们已经有了一个巨大的功能列表,想在之后实现。C++在任何方面都不是死路。
这两种语言会继续存在。也许在50年后,其他语言会取代它们,但这不会发生在本十年。
我目前经常使用D语言。但由于它处于太过尖端的阶段,我不建议那些写生产代码的人使用它。我可以用它来进行生物信息学研究原型程序的编写,这是因为我的许多代码都是研究性质的。然而,该语言正在开始稳定下来。Andrei Alexandrescu将在明年三月份出版名为“D程序设计语言”的书籍,并且现在正在推动将第二版语言规范稳定下来,以便赶上这本书的出版。
D虽然不是C语言的正式超集,但除了没有预处理器之外,我认为它是一个习惯性的超集。换句话说,任何用C语言编写的代码(忽略预处理器),都可以轻松地转换为D语言而无需重新设计,因为D语言中存在指针和内联ASM等C语言概念,并且在D语言中与C语言相同。此外,D还支持直接链接到C代码,并且D标准库包括整个C标准库。
尽管由于D语言仍然处于尖端阶段而缺少库,但它是库编写者的梦想,因为它具有元编程能力。如果它获得成功,它可能会有一些非常出色的库。要预览此功能,请参见D2标准库(Phobos)中的std.range或std.algorithm。作为另一个示例,我在D语言中作为纯库实现了类似于OpenMP的并行模型(并行foreach、并行map、并行reduce和futures),而没有任何特殊的编译器支持。(请参阅http://cis.jhu.edu/~dsimcha/parallelFuture.html)
考虑到你主要关注长期利益,我建议先给D语言六个月的时间来稳定下来(鉴于Andrei的书以及当前推动将该语言规范稳定下来,第二版应该会稳定下来),然后再好好研究它。
编辑:现在,由于核心语言规范相对稳定,重点已转向工具链和库的开发,我可以推荐使用D语言进行小型生产项目,除非您处于非常保守的环境中。但是,必须具备良好的工具链和库支持的大型项目仍然需要等待。
坚持使用C和C++。我看不到它会走COBOL的路线,它与其他语言一样运行良好,并且你会很容易找到编写C和C++代码的人。
C++
-- 它相对较年轻并经常更新... 它有许多编译器供应商,并且不断得到改进。
C
-- 它将在很长一段时间内填补汇编语言和高级语言之间的空白。它也是非常简单和易于实现的语言,因此它将保持第一个适用于各种“奇怪”架构的语言,如嵌入式或全新的架构。
D
很有前途,但仍然具有非常新和不稳定的规范和库。
Go
几周前才诞生... 不要在大型重要项目中使用版本 0 的任何东西。另外,它比 C++
或者 D
受限制得多。
2019年更新: C ++将在未来的10年里继续存在......(如果不是,当这个答案不再相关时,我会更正它....)
公司今天使用COBOL的原因是因为他们已经编写了数百万行的COBOL代码。如果他们可以扔掉它,他们会一次性地这样做,另一方面,公司使用C / C ++作为其需求的一部分,并使用这种语言开发新项目,因为他们不能/不想使用Java / C#或其他基于框架的语言 - 因此COBOL不是这里的比喻。
目前有大量机器正在运行C++软件,我并未看到它们全部同时关闭。如果C++将走向COBOL的道路,那么应用程序迁移市场将会很大。届时将会开发专门的工具来将C++应用程序转换为当下流行的语言(例如Z++?)。
所以我的建议是:踏入这个领域时再做决定。