下一代低级语言是迁移代码库的最佳选择?

e-s*_*tis 30 c++ d go low-level

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

目前,C/C++运行得非常好,市场上有很多开发者.

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

你听说过D,开始变得非常成熟,Go,承诺会很受欢迎.

你会选择什么?为什么?

Vla*_*eev 40

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

  • 不幸的是,他们必须非常幸运地成为像python和ruby这样的主流. (4认同)

jal*_*alf 36

当涉及到本机/非托管/"低级"语言时,C和C++是一个非常无与伦比的组合.

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

D和其他"即将来临"的语言竞争相同的利基的问题在于,虽然它们更好,但它们并不足以激励人们真正切换到它们.

所以C和C++就在这里.C不太可能进一步发展.它就是这样,它必须填补的一个优势是"简单,即使对于编译器编写者".没有其他语言可能在这个利基市场上击败它,即使他们再也没有修改过这个标准.

C++是更为显着不断变化的,用C++ 0x中越来越近了,他们已经有了一个巨大的,他们想要做的功能列表之后.C++在任何方面都不是死路一条.

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

  • "这十年不会发生" - 很容易在十年的最后一个月说:-) (35认同)
  • 大声笑,你知道我的意思...;)虽然给你+1;) (4认同)
  • Rust 是一个很大的改进:整数基元类型具有 popcnt、查找第一个/最后一个集合、旋转、位反转、饱和或包装操作、算术与逻辑右移等方法。https://doc.rust-lang.org/std/primitive.i32.html。在具有本机支持的 ​​CPU 上,您可以获得高效的代码,而编译器不必将整个循环识别为 popcnt 的习惯用法。在其他目标上,您可以获得编译器编写者为对该目标进行有效模拟而提出的任何内容。 (2认同)

dsi*_*cha 24

我现在经常使用D. 我不建议人们编写生产代码,因为它太过于前沿.我侥幸成功,因为我的大部分代码都是生物信息学的研究原型.然而,语言开始趋​​于稳定.Andrei Alexandrescu将于明年3月发行一本名为"The D Programming Language"的书,现在正在努力为该书及时稳定该语言版本2的规范.

虽然D不是C的正式超集,但除了没有预处理器之外,它就是我所谓的惯用超集.换句话说,任何用C本身编写的代码(忽略预处理器)都可以简单地转换为D而无需重新设计,因为C指针和内联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为小型生产项目,除非你是在一个非常厌恶风险的环境.但绝对必须拥有良好工具链和库支持的大型项目仍应等待.


JRL*_*JRL 15

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

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

  • 这个原则似乎很好.我希望我过去经常考虑过这个问题. (2认同)

Ewa*_*odd 14

坚持使用C和C++.我不认为它会像COBOL一样运行,它运行得和任何东西一样,并且你可以毫无困难地找到用C和C++编写代码的人.


Art*_*yom 14

C++ - 它相对年轻且更新......它拥有大量的编译器供应商,并且一直在不断改进.

C - 它将长期存在填补汇编程序和更高级语言之间的空白.它也非常简单易用,因此它仍然是各种"奇怪"架构的第一语言,如嵌入式或极其新的架构.

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

Go几个星期前出生...从不使用版本0的任何重要项目.还有一点很显著越限C++D.


Dan*_*ani 10

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

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


pon*_*nce 7

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

Go是博客上市的,这对我来说似乎是一个笑话.调度接口方法并不简单,实际上比调度常规单继承方法慢.

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


Cyb*_*die 6

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

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