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

目前,C/C++ 运行得非常好,并且市场上有大量的开发人员。

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

你听说过 D, ,开始相当成熟,并且 , ,有望相当受欢迎。

您会选择什么?为什么?

有帮助吗?

解决方案

D和Go可能会变得像Python和Ruby一样受欢迎。他们每个都填补了一席之地,尽管D应该是C ++的完全替代品,但它可能永远不会获得足够的质量来推动C ++。更不用说它们都不够稳定/成熟,并且不知道你是否会在10到20年内为当时的硬件和操作系统提供这些语言的支持。考虑到C / C ++几乎是 编译语言,并且在绝大多数操作系统和本机代码应用程序中使用,它在可预见的未来它不太可能消失。

其他提示

当涉及到native / unmanaged /“lowlevel”时,C和C ++是一个非常无与伦比的组合。语言。

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

D和其他“即将来临”的问题竞争相同利基的语言是,虽然它们更好,但它们并不足以激励人们切换到它们。

所以C和C ++就在这里。 C不太可能进一步发展。它就是这样,它必须填补的其中一个特点是“简单,即使对于编译器编写者来说也是如此”。没有其他语言可能会在这个利基市场上击败它,即使他们再也不会修改标准。

随着C ++ 0x越来越近,C ++的发展变得越来越激烈,而且他们已经拥有了一大堆他们想要做的功能之后。 C ++在任何方面都不是死路一条。

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

我目前经常使用 D。我还不会向编写生产代码的人推荐它,因为它太前沿了。我侥幸逃脱了惩罚,因为我的大部分代码都是生物信息学的研究原型。然而,该语言开始稳定下来。Andrei Alexandrescu 将于明年 3 月发布一本名为“The D 编程语言”的书,目前正在努力在该书发布之前稳定该语言第 2 版的规范。

虽然 D 不是 C 的正式超集,但除了缺少预处理器之外,它是我所说的惯用超集。换句话说,任何用 C 语言编写的代码(忽略预处理器)都可以轻松地转换为 D,而无需重新设计,因为像指针和内联 ASM 这样的 C 概念都存在,并且在 D 中的工作方式与在 C 中的工作方式相同。D 还支持直接链接到 C 代码,并且 D 标准库包含整个 C 标准库。

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

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

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

如果您相信精益生产原则,您应该努力“尽可能晚地做出决定”。这一刻应该是最后一个负责任的时刻,这意味着未能作出决定的那一刻消除了一个重要的选择。

我认为这个原则可以适用于你的情况。现在你应该保持你的选择,而不是现在使用一种语言(你甚至不知道将在10年左右)。也许重构一些代码,使它更通用一些,或者建立在更多抽象的基础之上,这样当确实需要迁移时,这个过程会更容易。

坚持使用C和C ++。我不认为它会像COBOL一样运行,它运行得和其他任何东西一样,你可以毫无疑问找到用C和C ++编写代码的人。

C ++ - 它相对年轻且更新......它有大量的编译器供应商并且得到了 一直在改进。

C - 它将长期存在,填补了汇编语言和更高级语言之间的空白。它也非常简单易用,因此它仍然可以实现 各种“奇怪”的第一语言嵌入式或极端新的架构。

D 很有前景,但仍然是非常新的和不稳定的规范和库。

几周前

Go 诞生了......永远不要使用版本0的任何重要项目。它也明显受限于 C ++ D

2019更新: C ++将在未来10年保持不变......(如果没有,我将更正此答案,当它不再相关时......)

公司今天使用COBOL的原因是b / c他们已经编写了数百万个COBOL代码。如果可以扔掉它 - 他们会立刻做到这一点 - 另一方面 - 公司使用C / C ++作为他们需求的一部分和使用这种语言的新项目b / c他们不能/不想使用java / c#任何其他基于框架的语言 - 所以COBOL不是这里的类比。

与dsimcha一样,D方式目前存在风险。然而,语言具有巨大的潜力,它是低级别的,并且我使用D(而不是C ++)经历了显着更好的生产力。也许是人们对动态语言的感受。

Go是博客推销的对我而言似乎是一个笑话。 调度接口方法并不简单,实际上比调度常规单继承方法慢。

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

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

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

有无数的机器运行C ++软件,我不认为它们会立即关闭。如果C ++会妨碍COBOL,那么应用程序迁移将会有巨大的市场。将开发专门的工具来将C ++应用程序翻译成当时流行的语言(Z ++ ???)。

所以我想最好的建议就是当你来到这座桥时过马路。

如果你是英特尔®Cilk++软件开发套件,请查看希望激发您对C ++ / Multi-Core开发的兴趣。我不认为C或C ++很快就会消失。

将 C* 与 Cobol 进行比较是值得怀疑的

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

在我最慈善的一天,我会用“不错的尝试".

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

另外,请考虑 C/C++ 的主要负面问题是缺乏内存安全性。随着代码的成熟,这往往不再是一个问题。这意味着不会有真正的理由更换旧代码。

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

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

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

我们不知道Go是否会获得认可。仅仅是谷歌可能还不够。

d?好吧,关于它的一些不错的事情,但它也不会起飞。没有用户群可言。 D在 TIOBE索引中受欢迎程度为#20 ,并快速下降。

您可能会说,语言的受欢迎程度与其适合您公司工作的程度无关。但这与找到有资格在其中进行编程的人员是多么容易有很大关系。

Java 排在首位,如果它在未来20年内走得很远,我会感到惊讶。它不被认为是一种系统编程语言,但表现得很好,以至于你在C ++中用Java完成的任务很少。当然,如今没有人愿意让人类程序员完成垃圾收集器完成的工作(完美且经常更有效)。我认为Java在编程有效性方面是C ++的重要一步。

我对 Ruby 印象深刻。它是一种优雅,富有表现力的语言:你可以用不太多的代码完成很多工作,但代码仍然是最清晰的。 Ruby的一个主要原则是保持一致,不会给开发人员带来惊喜。这是一个非常好的想法,IMO,并提高生产力。在大型Rails炒作(可能仍在进行)的时候,我围绕Ruby做了大量工作,因为它的参考实现非常缓慢。然而,Sun的 JRuby 人员在JVM上的速度非常快,所以现在绝对值得考虑一下。 Ruby提供了闭包和一些功能编程功能(请参阅下面的重要原因),尽管它并不是真正的FP语言。 TIOBE指数:10并且正在上升。

未来需要考虑的事情是CPU制造商已经遇到了物理所强加的性能限制。与过去一样,每个圣诞节的CPU流量再也不会快30%。所以现在要获得更多性能,您需要更多内核。软件开发需要在支持多核并发编程时获得的所有帮助。 C ++让你大部分都独自一人,Java的解决方案在现代标准下是可怕的。

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

Scala是由学者开发的,并且表明了这一点:对于数据类型来说,它是复杂且彻底的迂腐;它试图成为编程语言的瑞士军刀。我相信很多中等程度的程序员都无法掌握Scala。 Ruby不是FP,并且在并发性方面做得不多,但它实用,有趣且易于完成。还有,在JVM上运行,Java库中有大量代码可供使用,Ruby可以与...接口。所以:

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

Java的。对于大多数低级别的东西,Java现在很好。为什么选择D / Go等C / C ++的部分解决方案,当你可以像Java一样安全且易于开发时?如果您正在寻找实时解决方案,D和Go肯定它,更不用说它们可能比Java支持更少。


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

你正在编程什么?具有1KB RAM的8位微控制器?在这种情况下,使用除该平台的汇编程序以外的任何东西都是毫无意义的......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top