哪种语言-D,Go或Rust更有可能取代C,为什么?

尽管我是D的创建者之一,而且地位明显,但我会坦率地回答。 我沿着Go and Rust的路走,我绝对知道D脏衣服在哪里洗。我鼓励Rust和Go社区中处于类似位置的人们分享他们的观点。 所以在这里。

对于初学者,问题中的某个位置应显示C ++。 是否应将其替换为C,还是将其替换为C的候选者之一,但无论如何,C ++是方程式的关键要素。 这是最接近C的语言,并且是向前迈出的明显一步。 考虑到C ++的时代,我在这件事上进一步假设C ++和C是替换的目标。

每种语言都有许多基本优势(我称它们为“数量级优势”,以下称“ 10倍奖金”,因为它们在典型方法上在美国大联盟中有资格)和许多问题。 这些语言的未来以及它们在淘汰C语言方面的成功取决于他们如何策略性地部署10倍奖金以及如何克服问题。

让我先摆脱D


显然,这是我自己家的演示,因此,我知道该去哪里以仅正确显示需要的东西并隐藏肮脏的地方。 我也可以比其他人谈论更多关于D的问题,原因很简单,因为我对他的了解要多得多。 说得很直白,D的主要问题是:

  • 名义上存在多年后,公众的反感。 社区中的长肝人士可能会批评这样的说法(D的当前形式相对较年轻,受欢迎程度正在上升,等等)。 但是,这种态度持续存在并影响着人气的进一步增长,这是事实。 结果,经理和工程师对推广已经长期失败的语言持怀疑态度。 而且,时间对D不利,直到流行度没有明显增加。
  • D的悲伤故事与垃圾回收(GC)有关。 GC是一个伟大的发明,但是决定在D中使用它的决定立即将其与主要目标受众(C和C ++程序员)隔离开来。 对于他们来说,聚会的台词看起来像是“不想要GC? 没问题! 您也可以将D与RAII或手动控制一起使用!” 尽管事实上这是正确的,但由于缺乏对这种标准库的支持,因此该方法实际上是无用的,这意味着将目标用户简而言之,并从创建基本基础结构开始。 即使对于那些不介意GC的人,其实施的质量也相当不起眼。 通常,我们可以说D弥补了GC的所有缺点,但没有利用。
  • 历史上普遍缺乏远见者。 在缺乏公司支持的情况下,D带领社区前进,在该社区中,找到一位精明的工程师比项目经理或一位有魅力的领导者容易得多。 随着时间的流逝,D在提升和自我提升方面的努力取得了成功,但结果却是负面的。 第一份计划文档的日期为2015年1月1日, 下一个版本(Vision / 2015H2-D Wiki)比计划晚了四个月发布,这是在计划方面自我讽刺的一个很好的例子

当然,还有其他麻烦,但是它们要么是上述情况的结果,要么是后果要小得多。

我认为D的10倍奖金如下(再次,当我说10次时,这是口头上的“按顺序更好”):

  • 在10倍速下,可比代码的编译速度比C ++快。 这个漏洞根本无法用C ++来解决,在任何其他语言中跳转都非常困难。 (Go的编译速度比D快,但生成的代码速度较慢)使用如此快速地编译为快速代码的系统语言的经验是对旧方法的改造,并且很有希望。 结合D中的抽象功能,从本质上讲,这使得D是编写高度优化的代码的不错选择,原因很简单,原因是实验很便宜。
  • 比具有类似功能的脚本语言快10倍。 D非常适合于方便地编写日常任务脚本。 编译/启动周期保持一样快,并且速度方面的好处是巨大的。 同样,“遇到极限”也没有问题-如果脚本变大,D中将始终有足够的语言工具和模块化。 当然,美中不足的是,例如,在Python中,有更多现成的库。 但是10倍的奖励在这里是基本的-系统语言没有太多的语法糖,脚本语言的速度无可救药。
  • 10x比其他任何语言都更容易与C和C ++集成。 D在内存中使用与C和C ++相同的结构; 并以它们为基础,但是在速度方面,读取底层仍然是自由的。 完全可以访问标准C库,而没有任何代价-既不提高速度,也不降低语法,并且尽管为实现C ++库的简单性而需要进行一些改进,但许多C库已经可用(https://github.com/D-编程...)。 从字面上可以说没有其他语言可以达到这种集成水平。
  • 在泛型和元编程方面,它是任何其他系统语言的10倍。 在D语言中,静态自省,编译时计算(CTFE)和基于混合的(代码混合)代码生成构成了Molotov鸡尾酒,很难用其他语言(无论是新语言还是幸存者)正确地进行混合。 在这个游戏中,Go太疯狂了,它甚至都没有斩获任何筹码; C ++ 17毫无希望地迷失在一片黑暗的森林中; 而Rust只是试图to。

去吧


我必须强调,这仅是我的观点,但是仍值得您注意。 Go的问题如下:

  • 间接调用和垃圾收集器(GC)导致的根本速度下降。 不使用间接调用和GC(这是中心功能),几乎无法编写任何重要的Go应用程序。 这些是Go核心性能的主要障碍。 Go的反应主要是战术性的-例如,提高GC的性能。 但是,不可能在战术上赢得取代C的挑战。
  • 政治。 Go上的政党路线在许多大小不一的问题上都异常强大。 一个大问题的例子是,使用泛型的方法是如此无意义和残酷,以至于使泛型成为带有字母“ G”的单词; 整个话题变成了流血的眼泪,阻碍了任何建立建设性对话的企图。 我认为,从长远来看,将技术问题政治化是一种极其有害的模式,我希望Go能够找到解决此问题的方法。
  • 简单性比盗窃更糟糕。 走是非常简单的(双关语,走-走路,记笔记)-甚至还有关于它的笑话。 但是,随着时间的流逝,这将成为问题。 Go代码毫无希望地成为行人-Go编码人员发现自己从蚂蚁的角度一遍又一遍地编写相同的东西,因为Go甚至无法抽象出最简单的概念或算法。 集成库尚未实现的概念很难实现。 使用Go进行一个项目并且不再希望再次使用它的程序员会产生负面反应。 如果Go能够为普通客户带来更好的生活,那就太好了。

在我看来,获得10倍的奖金如下:

  • 技能策略提高10倍。 在将Go定位为系统语言的短暂时间之后,决定将其定位为网络服务。 利用Go团队(世界上一些最好的网络服务工程师)的力量,这是一次伟大的营销举措。 这是一个非常炙手可热的市场,而Go刚刚为世界注入了新鲜空气,它以前被Java EE的繁文tape节和缓慢的脚本语言所支配。 现在围棋是该区域的主要角色,将很难移动。
  • 工程技能的10倍。 Go拥有强大的工程师团队,这是影响语言(尤其是网络库和工具集)质量的主要因素。 到目前为止,良好的工程技术已完全弥补了该语言的弱点。
  • 品牌烙印能力提高10倍。 我们许多人已经准备好承认使用Go的主要动机是它与Google的联系。 这赋予了他专业,优质和稳定的权威。 当然,品牌并不是万能的,但它已经使Go成为了一种值得的语言。 他不应该太出色了。 品牌将做剩下的事情。

最后但并非最不重要的是Rust


让我再次提醒您,这只是我的意见。 我认为Rust面临一些有趣的问题:
  • 人格不和谐。 在阅读了一定数量的Rust代码后,出现了一些轶事,例如“ Dude错过了腿摆动的日子”,并通过漫画与躯干和双腿交叉的人进行了说明 (大约翻译。俄语,“巨脚巨像”,但不准确),Rust放置准确而安全的内存管理是第一位的,它代表着世界的中心。 突然,这很少是一个问题领域,这导致了这样一个事实,即大部分的计划和编码实际上都用于文书工作(带有GC的语言无需查找即可自动执行)。 安全,预定义的内存重用是一项艰巨的任务,但不是程序中唯一或至少不是最重要的任务。 结果,Rust为此花费了不成比例的语言设计资源。 看到Rust如何在语言的其他方面膨胀会很有趣。 唯一的选择是扩展语言,但问题是多少抽象可以帮助满足所有级别的资源控制需求。
  • 外来语法。 Rust的语法[完全不同],但是在这种异国情调中并没有明显的优势。 这使来自Algol家族语言的人感到恼火,他们除了必须手动管理所有使用资源进行记帐之外,还必须处理根本不同的语法。

Rust的10倍奖金是:

  • 最佳理论家的10倍。 在这三种语言中,只有Rust具有开发编码语言的世界级理论家。 从语言的技术描述的准确性和技术方法的深度可以看出这一点。
  • 安全性是其他系统语言的10倍。 当然,应该在这里,我们只能争论这种方法的成本。
  • 最佳PR的10倍(PR,广告,大约为Per。) 。在相当长的一段时间内,Rust是社区的最爱,这不能误解:对于任何问题,Rust都有解决方案,或者必须在1.0版本中获得它。 1.0发行的现实打断了这个蜜月,并且(根据我的估计和预期),尽管这些因素趋向于延长,但总体利益的急剧下降是其标志。 另外,最后,Rust是一种表现出色的体面语言,可以很好地将这种长期的炒作变成一个稳定的市场。

简要地


这些语言中的一种是否能够逐渐替换现有软件系统中的C,C ++或这两种语言,以及这些语言是否将成为当今默认选择C或C ++的项目的优先级,这完全取决于这些语言使用的能力。他们的优势并找到各自问题的创造性解决方案。

笔记翻译器。
对不起,这篇老文章是我在可靠编程系列的最后看到的,似乎很有趣。 但是,在RuNet中,找不到翻译,甚至没有完整的讨论。

Source: https://habr.com/ru/post/zh-CN460989/


All Articles