30

假设您有一家运行大量 C/C++ 的公司,并且您想开始计划迁移到新技术,这样您就不会像 15 年前的 COBOL 公司那样结束。

目前,C/C++ 运行良好,市场上有大量的开发人员。

但是您现在想开始考虑它,因为考虑到庞大的运行代码库和数据敏感性,您觉得可能需要 5 到 10 年才能进入下一步而不会使预算和开发团队超载。

你听说过D,开始相当成熟,还有Go,承诺会很受欢迎。

你的选择是什么,为什么?

4

14 回答 14

40

D 和 Go 可能会像今天的 Python 和 Ruby 一样流行。它们每个都填补了一个利基,即使 D 被认为是 C++ 的完全替代品,它可能永远不会获得足够的质量来推动 C++。更不用说它们都不够稳定/成熟,对于当时的硬件和操作系统,你是否会在 10 到 20 年内支持这些语言也是未知数。考虑到 C/C++ 几乎是一种编译语言,并且在绝大多数操作系统和本机代码应用程序中使用,它在可预见的未来不太可能消失。

于 2009-11-29T14:13:57.667 回答
36

对于本机/非托管/“低级”语言,C 和 C++ 几乎是无与伦比的组合。

不是因为它们是最好的语言,远非如此,而是因为它们在那里,它们完成了工作,并且足够好。例如,毫无疑问,D 在大多数方面都优于 C++。但它在最重要的一个方面失败了:与所有现有 C++ 代码的兼容性。如果没有这个要求,无论如何,大多数代码今天都会用托管语言编写。今天有这么多代码库使用 C++ 的唯一原因是因为他们去年使用了它,而切换到其他代码库太痛苦了。但是当他们切换,他们通常不会切换到 D。他们会切换到 C#、Java 或 Python。

D 语言和其他“即将到来的”语言竞争相同的利基市场的问题在于,虽然它们更好,但它们还不足以激发人们真正转向它们。

因此,C 和 C++ 将继续存在。C不太可能进一步发展。它就是这样,它必须填补的利基之一是“简单性,即使对于编译器编写者也是如此”。没有其他语言可能在该领域击败它,即使他们再也不会修改标准。

随着 C++0x 越来越近,C++ 的发展更加显着,而且他们已经拥有了大量以后想要做的功能。C++ 在任何方面都不是死胡同。

两种语言都将继续存在。也许在 50 年后其他语言会取代它们,但这十年不会发生。

于 2009-11-29T14:55:33.193 回答
24

我目前经常使用 D。我不会向编写生产代码的人推荐它,因为它太前沿了。我侥幸逃脱,因为我的大部分代码都是生物信息学的研究原型。但是,语言开始稳定下来。Andrei Alexandrescu 将于明年 3 月出版一本名为“The D Programming Language”的书,目前正在推动稳定该语言版本 2 的规范,以便及时出版该书。

虽然 D 不是 C 的正式超集,但我称之为惯用超集,只是缺少预处理器。换句话说,任何用 C 编写的代码(忽略预处理器)都可以在不重新设计的情况下轻松转换为 D,因为诸如指针和内联 ASM 之类的 C 概念就在那里,并且在 D 中的工作方式与在 C 中相同。D 还支持直接链接到 C 代码和 D 标准库包括整个 C 标准库。

此外,尽管 D 缺乏库,因为它仍然是一种前沿语言,但由于它的元编程能力,它是库作者的梦想。如果它起飞,它可能会有一些非常令人印象深刻的库。有关此内容的预览,请参阅 D2 标准库 (Phobos) 中的 std.range 或 std.algorithm。作为另一个例子,我在 D 中实现了一个类似 OpenMP 的并行模型(并行 foreach、并行映射、并行化简、期货)作为纯库,没有任何特殊的编译器支持。(见http://cis.jhu.edu/~dsimcha/parallelFuture.html

鉴于您最感兴趣的是长期,我会说给 D 6 个月的时间来稳定(鉴于 Andrei 的书和目前稳定语言的努力,到那时版本 2 应该是稳定的)然后仔细研究它。

编辑:既然核心语言规范相对稳定,并且重点已经转向工具链和库开发,我建议D 用于小型生产项目,除非您处于非常规避风险的环境中。不过,绝对必须具有良好工具链和库支持的大型项目仍应等待。

于 2009-11-29T15:56:51.757 回答
15

如果你相信精益制造原则,你应该努力“越晚做决定”。这个时刻应该是最后一个负责任的时刻,这意味着无法做出决定的时刻会消除一个重要的选择。

我认为这个原则可以适用于你的情况。与其现在就选择一种语言(你甚至不知道它会在 10 年后出现),不如让你的选择保持开放。也许重构您的一些代码,使其更通用或建立在更多抽象之上,这样当确实需要迁移时,过程会更容易。

于 2009-11-29T14:18:07.687 回答
14

坚持使用 C 和 C++。我不认为它会像 COBOL 那样发展,它运行得和任何东西一样好,而且你可以毫不费力地找到用 C 和 C++ 编写代码的人。

于 2009-11-29T14:04:49.060 回答
14

C++——它相对年轻且更新……它有大量的编译器供应商,并且一直在改进。

C-- 它将长期存在,填补汇编语言和高级语言之间的空白。它也是非常简单且易于实现的语言,因此它将仍然是各种“奇怪”架构(如嵌入式或非常新的架构)的第一语言。

D很有希望,但仍然非常新且不稳定的规范和库。

Go几周前出生......永远不要将版本 0 的任何东西用于大型重要项目。此外,它明显更受限制C++or D

于 2009-11-29T14:19:28.400 回答
10

2019 年更新: C++ 将在未来 10 年内继续存在......(如果没有,我会更正这个答案,当它不再相关时......)

今天公司与 COBOL 合作的原因是 b/c 他们已经编写了数百万个 COBOL 代码。另一方面,如果可以抛出它-他们会立即进行-公司将C / C ++作为其需求的一部分,并且使用这种语言b / c的新项目他们不能/不想使用java /c# 任何其他基于框架的语言 - 所以 COBOL 不是这里的类比。

于 2009-11-29T14:06:10.943 回答
7

就像 dsimcha 所说,D 方式目前是有风险的。然而,该语言具有巨大的潜力,它是低级的,我使用 D(而不是 C++)体验到了显着提高的生产力。也许人们对动态语言的感受。

Go 被博客推销得太多了,这对我来说似乎是个笑话。分派一个接口方法并不简单,实际上比分派一个常规的单继承方法要慢。

如果你有一个庞大的代码库,那么这个决定当然会更加困难,我建议只切换新项目,而不是现有项目。

于 2009-12-01T12:25:55.567 回答
6

我不会专注于一种语言,而是更多地关注它周围的库。C++ 与 boost 库相结合是一个很好的选择。用 C++ 开发的人往往对计算有更好的理解,我自己是从 Java 开始的,它隐藏了很多基础知识,让我的生活更轻松,这很好,但是我只有在学习 C/后才真正开始理解编程C++(指针等)。

我确实认识到 C++ 可能很难(例如内存管理),所以我认为最好有一种“附加”语言,其中性能不是必需的并且可读性(==可维护性)得分很高:我推荐使用 Python。

于 2009-11-29T15:33:43.390 回答
3

有无数机器运行 C++ 软件,我没有看到它们一次全部关闭。如果 C++ 走在 COBOL 的道路上,那么应用程序迁移将有巨大的市场。将开发专门的工具来将 C++ 应用程序翻译成当时流行的语言(Z++ ???)。

所以我想最好的建议是当你来到它时越过那座桥。

于 2009-11-29T14:16:49.093 回答
2

如果您想激发您对 C++/多核开发的兴趣,请查看英特尔® Cilk++ 软件开发套件。我也不认为 C 或 C++ 会很快消失。

于 2009-11-29T14:18:08.480 回答
1

将 C* 与 Cobol 进行比较是有问题的

将 C* 与 Cobol 进行比较可能会导致错误的结论。C 在它的时代是完美的,它的引入是一个巨大的飞跃,它今天仍然可以完成工作。

我会用“不错的尝试”来总结 Cobol 在我最慈善的一天。

C 和 C++ 将长期存在,因为它们非常适合实现语言。这永远不会真正改变。

此外,考虑到 C/C++ 的主要负面问题是缺乏内存安全性。随着代码的成熟,这往往会成为越来越少的问题。这意味着不会有严重的理由来替换旧代码。

我预计软件系统将从 C 向外扩展。看看今天的层次结构:

  • 在 Rails 等框架中编写的应用程序
  • 用 Ruby、PHP、Python、C# 等编写的应用程序后端
  • Ruby、PHP、Python 或 C# 运行时实现(用 C* 编写)
  • 操作系统内核(用 C89 编写)

我不认为旧的层会消失,而且我认为用 C 和 C++ 编写的旧的更高层将在无限期以这种方式得到支持,最终将被淘汰,以取代它们用 Ruby、Python、C# 编写的替代品,或者未来的发展。

于 2009-11-29T20:29:37.620 回答
0

我们不知道 Go 是否会被接受。仅仅靠谷歌可能还不够。

D? 好吧,有人在谈论它,但它也不会起飞。没有用户群可言。D 在TIOBE 指数中排名第 20 ,并且迅速下降。

您可能会说一种语言的流行程度与它是否适合您公司的工作没有多大关系。但这与找到有资格在其中编程的人的难易程度有很大关系。

Java处于领先地位,如果它在接下来的 20 年里走得更远,我会感到惊讶。它不被认为是一种系统编程语言,但性能足够好,以至于您在 C++ 中完成的任务很少在 Java 中无法完成。当然,现在没有人愿意让人类程序员完成垃圾收集器完成的工作(完美无瑕且通常更有效)。就编程效率而言,我认为 Java 是 C++ 的一大进步。

我对Ruby印象深刻。它是一种优雅的、富有表现力的语言:你可以用不多的代码完成很多事情,但这些代码仍然大部分都清晰易读。Ruby 的主要原则之一是保持一致并且不会让开发人员感到意外。这是一个非常好的主意,IMO,并提高了生产力。在 Rails 大肆宣传(可能仍在进行中)的时候,我对 Ruby 进行了广泛的讨论,因为它的参考实现非常缓慢。但是,Sun 的JRuby人员已经在 J​​VM 上实现了极快的速度,所以现在绝对值得考虑。Ruby 提供了闭包和大量函数式编程功能(请参阅下文了解为什么这很重要),尽管它并不是真正的 FP 语言。TIOBE 指数:10 并且还在上升。

未来需要考虑的一点是,CPU 制造商已经遇到了物理强加的性能限制。不再像过去那样在每个圣诞节都有 30% 更快的 CPU 可用。因此,现在要获得更高的性能,您需要更多的内核。软件开发需要在支持多核并发编程方面获得所有帮助。C++ 让您几乎独自一人,而 Java 的解决方案按照现代标准来说是可怕的。

鉴于此,函数式编程(消除了与并发相关的大部分麻烦)以及具有更好并发支持的语言存在一定的趋势。Erlang是专门为此而编写的,并且能够在正在运行的程序中交换代码(爱立信想要令人难以置信的正常运行时间)。Scala类似于 Java,但对函数式编程和并发性的支持要强得多。Clojure,同上,但它是一个 Lisp,它甚至不在前 50 名中(还没有!!)。

Scala 是学术界发展起来的,并表明它:它对数据类型非常复杂和彻头彻尾的迂腐;它试图成为编程语言的瑞士军刀。我相信很多中等聪明的程序员在掌握 Scala 时会遇到困难。Ruby 的 FP 较少,并且在并发方面做的不多,但它实用、有趣且易于完成工作。此外,运行在 JVM 上,Java 库中有大量可用的代码,其中 Ruby可以与。所以:

我的赌注是 Ruby,外部机会是 Scala。但是有很多选择!

于 2009-11-29T14:26:33.907 回答
-7

爪哇。对于大多数低级的事情,Java 现在都很好。当您可以拥有像 Java 一样安全且易于开发的东西时,为什么还要选择 C/C++ 的部分解决方案,例如 D 或 Go?如果您正在寻找实时解决方案,D 和 Go 绝对不是它,更不用说它们的支持可能比 Java 还要少。


Java 现在是一种系统编程语言。我看不出您如何考虑具有不安全构造的任何事物,例如指针“下一代”。那些不安全的结构曾经存在的唯一原因是因为它是构建图灵完备语言的实用方法。不用担心用离散对象表示内存,因为他们只是想构建一些有用的东西。Java 中已经有硬件和软件实时应用程序、各种硬件字节码处理器以及超过 20 亿台运行 Java 的移动设备。您最多需要做的就是添加一些与设备互操作的结构,这不会是那么多代码;即使在 C/C++ 中,您仍然必须添加这些结构......

你在编程什么?具有 1KB 内存的 8 位微控制器?在那种情况下,为该平台使用除汇编程序之外的任何东西都是没有意义的......

于 2009-12-08T00:42:21.800 回答