您当前的位置:首页 >> 装修日记

那些意欲取而代之 C++ 的编程语言,成功了吗?

2023-05-01 12:16:14

早期引入者

D Java母语由 Walter Bright 创立,浮现在 2001 年;在 2007 年时,Andrei Alexandrescu 投身了取而代之设计和开发岗位。这种母语本必先 C++ 的误解之中求学,并带进其继承人人。它承诺了举例来说的经济病态准确度,但上升了大量的取而代之子系统,并重构了 C++ 的一些更加繁杂的以外。D 的的网站将 D 推销为一种可以 "写成得极快、读著书得极快、跑得极快 "的母语。

D 现在众多了一些商业活动其他用户,但可以时说它并才但会超出极其重要的Java母语的话语权。Andrei 是写作者依然的早安之一,而且对 Walter 非常敬仰,但主要把 D 比如说是一个母语子系统的大闭包,松散地缠在独自一人。在我看来,这门母语欠缺一个细致的为基础,可以让所有的子系统都有凝聚力。

Go Java母语于 2009 年由苹果取而代之公司发行;1.0 版本于 2012 年发行。这种母语的当年提是让应用开发人员 "大规模地相结合极短时间、有用和高效的应用软件"。Go 母语的取而代之设计者不喜欢 C++,因此,Go 看来更加或许 C 的进化,而不是 C++ 的进化。Go 在 2022 年才上升了泛型,并且始终欠缺广为用于的子系统,如反常管控。

虽然 Go 可以时说是一种急于的Java母语,但它的急于主要是在云数值经营范围之中。尽管它拿下了相对的急于,但它必须被专指 C++ 的继承人人。

Rust 是 Mozilla 开发的一种Java母语,2010 年时披露,第一个版本在 2015 年发行。Rust 专注于有用(内存和线程安全及)和高效的应用软件。Rust 母语静态是围绕着说是的借用核查器,它能监控所有十分一定的来得久内;因此,它可以在校对时探测安全及误解,十分必必需用于垃圾收集器。

Rust 虽然不像 Go 那样广为流传,但看来被确信是 C++ 的良好替代品。疑虑是,Rust 和 C++ 两者之间才但会细致/脏/CE的接口方固定式则,这使得希望转回到 Rust 的 C++ 应用开发人员经历了突然的迁入。

Val

Val 给自己的当年提聚焦是:

极短时间的十分一定

预设具体意味着是安全及的

来得简单

可与 C++ 一个CE

Val 以这些当年提针对 C++、Rust 和 Swift 母语的不仅仅。它的当年提是付诸 C++ 的病态能,但要比 Rust 更加来得简单的方固定式则应有安全及。在病态能全面性,Val 有助于下降编订成安全及应用软件所必需的十分一定复制和内存资源分配的需求量。在安全及病态全面性,Val 之中的所有结构上都应有是安全及的,除非其他用户几乎一致要求额外的控制(将标识符的一以外记号为不安全及)。该母语的来得简单病态主要来自于它对 Swift 的极端具体情况严重影响,多半被确信是一种来得简单图形化的母语。

许多Java母语一般来说有一个相连其所有子系统的核心思希望,就像母语的氧化剂一样;这但会给人的深刻印象是这些母语欠缺或多或少。这必须时说是 Val 的疑虑。这门母语明显之两处在于它有一个静态可以在该软件上减轻安全及疑虑:它被专指 Mutable Value Semantics(变取值逻辑)。但是,在这以当年,独自一人先来阐述一下它所解决问题的主要疑虑。

C++ 其本质上是不安全及的

这一切都始于这样的捕捉到:在实际上凋亡的具体意味着,重述逻辑有则但会引发不安全及的该软件。因为重述逻辑允许创立繁杂的依赖亲密关系上图,所以凋亡必须应有在整个上图之中存留安全及病态。例如,如果一个变数对两个十分一定透过转换并相反了其之中一个十分一定时,就必须应有另一个十分一定才但会以几乎意希望不到的方固定式则发生变化。这在单线程和多线程生存环境之中都但会产生疑虑。此外,如果不深入核查所有有可能受到具体情况严重影响的标识符,应用开发人员们也才但会子系统的取而代之方法来可验证凋亡的后果。这简直创出了结构上化Java的核心思希望。

以比如说这个 C++ 标识符片段为例:

void append_vec(vectorMax dest, const vectorMax src) { for ( auto x: src ) dest.push_back(x); }

显然执行之中的低经济病态,这段标识符有一个具体情况严重的安全及疑虑。而且,如果只看这段标识符,就不较易挖掘出这个疑虑;还必须看一下外面的标识符。如果此变数的线程者缺少不尽相同的乘积作为源值和当年提值,那么就但会引发未十分一定的举动。

为了必需像这样的变数有无论如何的逻辑,则必必需一个独立病态的应有:应用开发人员们必必需必需所交互的十分一定(至少写成给其之中一个十分一定)是不不尽相同的。这在母语之中不能得不到适当的执行;因此,就位两处不安全及的应用。

这里面的疑虑比它看上去要繁杂得多。如果一个变数的两个值都是重述(也就是时说,我们才但会在其之中相反任何两边),那么就才但会疑虑。只有当我们有 mutation.const 时,疑虑才但会浮现。

Swift 通过用于 copy-on-write 应用来解决问题这个疑虑,但这有则但会引发经济病态低落。

Rust 通过监控十分一定的来得久内来解决问题这个疑虑。这给应用开发人员上升了负担,而且但会给该软件上升能避免的受到限制。

MA取值逻辑

变数固定式Java母语通过禁制凋亡来能避免上述疑虑。可以对多个十分一定有多个重述,因为才但会人可以相反这些十分一定。这对许多应用开发人员来时说感受很不自然,而且对无数的算法来时说经济病态大幅提高。

Val 以一种几乎不尽相同的方固定式则解决问题了这个疑虑:它对重述上升了受到限制,并必需才但会人可以读著书取一个十分一定,而其他人却可以相反它。

Val 认识到适度/以外亲密关系的极其重要病态。这些亲密关系只能形成一棵树,而不是一个可逆上图。如果希望修改这棵树上的一个十分一定,马上就能是不是这个变化的具体情况严重影响,也就是所有其他有可能受到这个凋亡具体情况严重影响的十分一定。它允许应用开发人员们解答出哪些十分一定可以安全及地作为读著书和写成传入一个变数。

之后,按照这个逻辑,可以安全及地加进重述来回应适度/以外亲密关系。

在 Val 静态之中,凋亡是不被禁制的,但是每次凋亡一个十分一定时,校对器可以数值出哪些十分一定可以安全及地读著书取,哪些十分一定可以同时安全及地写成入。安全及病态可以通过接合来应有。

减轻十分一定两者之间的任意重述并关心适度/以外亲密关系是凸显出 Val 价取值逻辑的因素。但是,由于 Val 也允许取值的凋亡,就可以把这个静态专指MA取值逻辑学。

科学知识的取而代之方法

跑到这一步,写作者确信很极其重要的一个全面性:Val 看来遵循了一种科学知识的取而代之方法。可以看得见,在上述内容来得简单地说明了了一个必需安全及的数值静态。这不也就是说是写作者蓝图的关于母语安全及的主张。他们有一个安全及的得出结论,在母语的受到限制下。

该母语的主要造就者 Dimitri Racordon,只不过是一名普林斯顿大学研究员。Dave Abrahams 看来也是小团体的人。Dave 和 Sean Parent 独自一人继续组建了 Adobe 的 STLabs。可以看出 Alex Stepanov(STL的造就者,也是STLabs的当年成员)对 Dave 和 Sean 的研究既有的具体情况严重影响。

必须应有 Val 但会像 C++ 那样急于,但可以挖掘出解决问题 C++ 的一些大体上疑虑的合理取而代之方法:明了地十分一定疑虑,然后蓝图一个CE而华丽的解决问题方案。

用于临时重述

Val 来得简单地指出用于临时重述是不安全及的。这使得人们不明了如何付诸必必需重述的该软件,而不是表达适度/以外亲密关系。

例如,付诸一个碱基表必必需必须被模拟为适度/以外亲密关系的重述。这两项还不明了如何付诸较强MA取值逻辑的碱基表。另一个举例,继续考虑一个应用该软件之中的提供者磁盘配件。根据十分一定,这样的配件必必需被有鉴于此会面,并且必必需允许凋亡。举例来说,我们也不明了如何在 Val 之中付诸这一点。

或许这些举例的来得简单问到是,其他用户必须将一些标识符记号为不安全及。这或许是可以的;作为母语的用于者,我们只是欠缺如何管控这些具体情况的经验。Val 必须为管控这些具体情况缺少良好的聘请。

C++ 的可用病态

在写成这前言的时候,Val 还才但会几乎一致的公开蓝图如何来管控与 C++ 的可用病态,它只是日当年了它的意上图。为了带进 C++ 的接掌母语,Val 必必需解决问题这个疑虑。而且,这个疑虑看来十分较易。

首先要注意的是,根据它的说明了,Val 的灵感主要来自 Swift。这也就是说 Val 和 C++ 两者之间的相差很大(他站是 Carbon 和 Cpp2 的相差,另他站是 C++ 的相差)。缩小这个相差有可能必必需较大的奋斗。

第二个精神上是MA取值逻辑子系统所带来的受到限制。C++ 其本质上很多人注意了大量的临时重述。这也就是说,C++ 标识符在 Val 之中但会被当成很多人注意无数的不安全及转换。在写作者看来,几乎所有的 C++ 转换都应该在 Val 之中被记号为不安全及。这看来上升了可用病态的相差。

都只,写作者十分是时说 Val 必须与 C++ 适当地一个CE。只是希望表述付诸这一点有可能不是一个来得简单的奋斗。

Carbon

Carbon 是在 CppNorth 2022 右边世,意欲带进 C++ 接掌母语。Carbon 得不到了苹果取而代之公司的赞成(据 Chandler 时说,也得不到了 Adobe 的赞成)。此外,一个取而代之奇的其实是,苹果取而代之公司则在 CppCon 2022 上退场;或许这是苹果取而代之公司在继续考虑打消 C++ 的一个标志。

在讲话之中,Chandler 列举了这两项 C++ 的疑虑。

大量的应用偿债

C++ 须要继续考虑向后相容病态,而不是母语转变;这也妨碍了对应用偿债的修复

国际子系统化组织的母语的发展反复并才但会针对 C++ 的发展的实际必需求透过优化。

Chandler 确信,解决问题这些疑虑的办法是开始继续考虑 C++ 的后接掌母语。或许 C++ 被造就为 C 的继承人人,Swift 被造就为 ObjectiveC 的继承人人,Kotlin 被造就为 Java 的继承人人,则必必需寻觅 C++ 的继承人母语。

为了创立一个 C++ 的接掌母语,必必需在这两项的生态子系统之中相结合,缺少双向的可用病态,并必需有辅助工具来试图迁入和求学。而这些只不过就是取而代之日当年的 Carbon 母语的当年提。

与 C++ 相对来说,Carbon 看来才但会一个标志病态的不同之两处。它就或许一个 C++ 的清除工程施工建设。在讲话之中,Chandler 展览品了更加简洁的语法、更加脏的变量逻辑、更加好的包装、更加好的公共/私人成员的预设取值、显固定式值、继承人清除、API 扩展点和 C++ 0x 风格的泛型。所有这些子系统都以这样或那样的方固定式则实际上于其他Java母语之中。

Carbon 可以被比如说是较强更加好的预设取值的 C++,这是件从来不。人们但会看得见一种熟悉的母语更加好/更加来得简单。Carbon 的求学曲线可以很平直,从 C++ 到 Carbon 的过渡不必必需跳到来得多的精神上。

但是,另一全面性,这与 D 有什么不尽相同?D 也试上图通过求学 C++ 的误解和清除其结实的边缘而带进 C++ 的继承人人。是什么让 Carbon 母语较强内部或许,而不是让它感受像一群不全面性的子系统?

如果从进化的出发点来看,即使那时候所有的预设取值都很有本质,又有什么能应有它们在月里面的几十年里面都有本质?怎样才能尽量下降 Carbon 积攒应用偿债?这个疑虑的以外问到是,正如 Chandler 提过的,用于辅助工具来协助迁入。但是,都看得见了从 Python 2 迁入到 Python 3 是多么的痛苦;有可能不是每个人都相信辅助工具可以试图解决问题今后的疑虑。

这些疑虑都是 Carbon 团队必必需问到的疑虑。写作者回应十分是希望时说这些疑虑无法问到,但它们必必需被问到。

与 C++ 的可用病态是困难的

即使 Carbon 可以带进一个较强更加好的预设取值的 C++,与 C++ 的可用病态也一般来说较易。比如说是 Sean Baxter 蓝图的一些例证:

在 Carbon 之中才但会子系统过载

在 Carbon 之中才但会反常管控

在 Carbon 之中才但会多重继承人,但人们始终可以在 C++ 之中用于它

与 C++ 不尽相同,Carbon 不管控早期变量

Carbon 才但会接合变数

从这些全面性来看,可以很较易地看出,与 C++ 的可用病态将是一个繁杂的疑虑。最有有可能的是,即使可用病态疑虑必须几乎解决问题,对于大型应用软件来时说,从 C++ 迁入到 Carbon 也才但会是一个来得简单的过渡。

多元文化的兴衰

苹果取而代之公司是一家坚信多元文化是应用软件开发的驱动力的取而代之公司。Chandler 在他的隐喻讲话之中也用 Peter Drucker 的一段话表达了这一点。

多元文化把战略思想看做早餐,把应用看做午餐,把产品线看做晚餐,不久也但会把其他一切都捉到。

虽然企业多元文化其实是众所周知的,但也就是说重述 Peter Drucker 的话十分是急于的秘诀。主要疑虑是无法基准多元文化及其具体情况严重影响。Chandler 列于了关于 Carbon 多元文化的几个应以(包容病态、邻里面友好等)。虽然所有这些例证都是好的,但它们难于十分一定多元文化,也难于让多元文化在 Carbon 工程施工建设之中发挥作用。例如,Chandler 才但会提过卓越的应用、毅力、想法自觉的自信,或者如何须要继续考虑不尽相同的(与多元文化有关的)当年提。

Lucian Radu Teodorescu 回应在他以当年岗位的一家取而代之公司,有一句口头禅是 "我们从毫不犹豫工程施工建设不甘心"。苹果取而代之公司和 Carbon 工程施工建设的多元文化之中究竟有一个类似的当年提?人们看来把苹果取而代之公司比如说是一家想法许多产品线并在来得久后关闭它们的取而代之公司。例如,如左上图,Victor Zverovich 的一条twitter,他来透过这种立场开了一个关于 Carbon 的玩笑。继续考虑到 Chandler 还日当年苹果取而代之公司有一个不尽相同的团队有举例来说的当年提,但他们从 Rus t开始,转回向 C++ 后,这种长两处有可能十分来得牵强。

Lucian Radu Teodorescu 回应多元文化是好的,Chandler 蓝图的例证也是好的。但是,希望要时断然拒绝一名工程施工师则必必需可可验证的例证。

休养生息来透过

关于 Carbon 公告的一个取而代之奇之两处是休养生息来透过。Carbon 工程施工建设的当年提是付诸一种才但会任何取而代之公司能要求母语今后的休养生息。每个人都可以通过创立脚踏允诺来必要参与母语的的发展,但越是极其重要的子系统,就越必必需量化/推论。

对于才但会已达成共识的极其重要子系统,有一个由三名成员(Chandler Carruth, Kate Gregory, Richard Smith)组合成的聘请委员但会,负责已达成要求。他们才但会机但会对取而代之设计来作出贡献;他们只必必需慎重继续考虑提交给他们的例证并来作出选择。

取而代之奇的是,这个静态试上图阐释一个宪政的反复,这在或许上或许 ISO 的当年提。这只是对必要参与各方的不尽相同划分,当犹豫不决时但会有更加几乎一致的规章来来作什么。如果从事 C++ 子系统化岗位的人也从事 Carbon 的岗位,那么 Carbon 的反复究竟但会明显好转回就不明了了。

虽然宪政取而代之方法是这两项最好的休养生息方固定式则,但我们近来看得见了一系列关键性的自由派不甘心,这些不甘心有可能与宪政的负面具体情况严重影响必要全面性。取很多人一提的是,在古希腊人,宪政被确信是一种拙劣的休养生息方固定式则。

Cpp2

CppFront 是 Herb Sutter 在 CppCon 2022 的开幕固定式隐喻讲话之中日当年的一个工程施工建设。它是一个转回码器,可以将 "更加好的 C++",即 Cpp2,转回换为原本的 C++。虽然 CppFront / Cpp2 是明年正固定式日当年的,但 Herb 现在在这个工程施工建设上岗位了大约 7 年;每年,Herb 都但会展览品 Cpp2 的一小以外。

Herb 希望为基础上 C++(即10倍),而不是透过相对于固定式的相反(即10%)。他希望使 C++ 付诸 30 年当年 Stroustrup 设希望的那个更加来得简单、更加脏的母语的来由当年提。取而代之奇的是,它采用了 Stroustrup 希望为基础上 C 母语时不尽相同的取而代之方法:开始一种属于自己母语并将标识符翻译以当年的母语。因此,CppFront 是一个小型转回译器,它转交 Cpp2 标识符(Herb的取而代之母语)并输出常规的 C++ 标识符。

Herb 还实体化了一些基准,我们可以用这些基准来量化这个实验者究竟急于。更加安全及50倍(也就是下降98%的CVE),更加来得简单10倍(下降90%的教学内容聘请)。预先十分一定基准是一个很差的策略,必须量化实验者的急于;我颇为喜欢这个想法。

向后相容病态病态和可用病态

通过打消向后相容病态病态,Cpp2 可以比 C++ 更加来得简单。这最终允许该母语封禁那些被确信是有害的子系统,并继续阐述一些被得出结论是次优的取而代之设计选择。通过打消向后相容病态病态,Cpp2 最终可以解决问题 C++ 之中几十年积攒的应用偿债。

时说是,在 C++ 之中须要继续考虑向后相容病态病态须要于母语的发展十分是一个有用的举例。每次我们为母语加进一个主要的子系统(例如,表达方固定式则、该软件、模块化等)时,我们只不过是在母语之中造就一个属于自己黄金时代。属于自己标识符可以与原本的标识符互动,但原本标识符必须来得简单地依赖用取而代之功用编订成的取而代之标识符。尽管 C++ 常规才但会正固定式引用母语黄金时代,但是在母语之中有一个下层的黄金时代子系统,由取而代之功用的发行所要求。

可以将 Cpp2 比如说是 C++ 的一个主要取而代之功用。在可用病态和辅助工具全面性,一定但会要繁杂一些,但其本质是一样的。在同一个应用该软件之中,原本固定式 C++ 必须与 Cpp2 共两处,这在应用上才但会充分的无论如何。

按照取而代之设计,Cpp2 在逻辑上与 C++ 相似;这使得可用病态更加较易。另一全面性,这也但会阻拦 Cpp2 握有与 C++ 几乎不尽相同的功用。例如,Cpp2 就无法用于 C++ 0x 固定式的泛型。

解决问题安全及疑虑

安全及病态大幅提高 50 倍的当年提时说什么起来感到深刻印象深刻。如果 Cpp2 必须付诸这个当年提,我相信大多数母语的其他用户都但会感到吃惊。

让我们从这个十六进制的出发点来全面了解其具体情况严重影响。这也就是说 98% 的 C++ 应用该软件如果被翻译 Cpp2 就才但会再进一步崩溃了(假设崩溃只由不安全及的应用该软件产生)。或者时说,98% 的 C++ 可扩展才但会有漏洞(如果才但会其他非C++的漏洞)。这将大幅度下降崩溃和安全及漏洞。

这看来好得感到惊奇。只不过,如果我们更加详细地量化,这些十六进制看来来得高了。

首先,如果发表意见安全及疑虑,必必需明了地是不是什么是安全及。安全及病态还包括:

多种类型安全及

疆界安全及

来得久内安全及

初始化安全及

十分一定会面安全及

线程安全及

算术安全及

Herb 在他的隐喻讲话之中提过了上述的当年4个工程施工建设。然而,这些安全及工程施工建设的所有全面性并才但会得不到解决问题。作为一个主要的举例,在实际上早期 pointer 时必须应有来得久内安全及;也就是说核查 pointer 是多于多于过分的。也才但会任何一个子系统来探测 pointer .null 的用于后封禁具体情况。

Cpp2,正如 CppCon 隐喻讲话之中所说明了的,不能探测到这段标识符的疑虑:

vec.push_back(vec.front());

Herb 十分一定了他的安全及基准,还包括当年四个安全及配件;故意显然其他多种类型的安全及看来很诡异。尤其是如果被显然的安全及掺入很极其重要的话。

十分一定会面安全及是指受十分一定会面来透过具体情况严重影响的安全及规章。一般来时说,这一类的不安全及标识符可以转回化为多种类型安全及、疆界安全及或来得久内安全及。无效正则表达式器的规章是这个十分一定之中很差的举例。

线程安全及是 C++ 的一个大疑虑,Herb 几乎才但会提过。在她 2021 年的 C++ Now 讲话之中,Anastasia Kazakova 展览品了数据瓦,显示在 C++ 邻里面之中,模版安全及分之一其他用户 setback 的 27%。相来得,疆界安全及疑虑只分之一 16%,用于后封禁疑虑分之一其他用户 setback 的 15%。模版安全及是安全及病态全面性最小的痛点,而这一点才但会在 Herb 的列表之中得不到体现。

Herb 在他的幻灯片上回应,Cpp2 得到了 "结构上安全及"。这不有可能是是不是。结构上安全及病态应该是指母语的相结合方固定式则或许必须引发安全及的接合(除非应用开发人员是不是显然了多种类型子系统并将安全及病态依靠在自己手之中)——或许 Val 或 Rust 的相结合方固定式则。但 Cpp2 并才但会这样来作;它只是对一些常用的不安全及举动的举例来时说上升了更加多的安全及核查。如果你看过 Dave Abrahams 和 Dimitri Racordon 的讲话,以及 Sean Parent 的讲话,这一点应该马上就能看出来。

这让我相信,在安全及病态上大幅提高 50 倍是不有可能付诸的当年提。

关于当年提的可基准病态

理论上,在任何时候,我们都可以根据这些基准来基准进展,可以量化这个实验者究竟急于或能否急于。

让我们从第二个基准开始:来得简单 10 倍,就像我们必必需在 C++ 著书刊之中大学教授的聘请之中基准的那样。在这个实验者被得出结论是急于以当年,人们不来得有可能写成关于 Cpp2 的著书,但可以希望象这样一本著书的内容是什么。可以确定哪些是我们必必需大学教授的关于 Cpp2 的一系列表达方固定式则,并且我们可以将其与我们这两项刚刚大学教授的关于 C++ 的内容此表透过来得。因此,我们可以基准这个基准。

这十分像人们希望象的那样来得简单。C++ 有较长的历史;因此我们是不是它的伪装,人们在 C++ 著书刊之中就有了这些伪装。但是,Cpp2 才但会这么丰富的历史,所以,人们或许可疑我们不是不是它的所有伪装。然而,Cpp2 与 C++ 如此相似,我真诚地相信可以排除这些顾虑,得不到一个关于来得简单病态的无论如何测。

但是,我必须对第二个基准时说举例来说的话。我们如何基准 CVE 和安全及漏洞的百分比?首先必必需有一个足以大的 Cpp2 该软件的辞汇组,由大量的应用开发人员和取而代之公司编订成。然而,为了付诸这一点,Cpp2 必必需被确信是一种急于——一种可逆的依赖。因此,在 Herb 的讲话之中十分一定的安全及度量十分是基准实验者急于的基准。

在主流母语用于来得久后,用于这个基准来量化母语是有本质的,但必须判断实验者的急于。

有还是才但会 monads

在隐喻讲话的1每隔33分(以YouTube音频为参见)之中,Herb Sutter 骄傲地时说:"我才但会时说过一次 monads 这个辞汇"。然后他继续说明了时说,Cpp2 是关于我们这两项在 C++ 之中用于的母语实践中;而不是来自其他母语的诡异的外来同义辞汇。

虽然这句话有则但会众多 C++ 邻里面之中以自我为之为中心的以外人,但我确信它对邻里面的伤害要多于试图。

首先,C++ 到两处都在用于 monads。属于自己 C+ +23 功用有可能是用于 monads 的一个仅有举例,但 C++ 更进一步时说是围绕着 monads 相结合的。当我们线程有可能抛出反常的变数时,我们隐含地用于了 monads 。也就是时说,几乎到两处都是。

其次,它在母语其他用户之中造就了一种依靠的感受。这样的声明不是向邻里面对外开放属于自己想法,而是传送了一个信息:C++ 不必必需向其他母语求学。但是,该母语握有的大量应用偿债,以及三种接掌母语的浮现,得出结论了这一点。

来得

比如说的表之中试上图缺少三种母语两者之间的来得;C++ 也是一个基准。

明年日当年的 3 种 C++ 接掌母语都被确信是试验品。并才但会很差的基准得出结论它们究竟是不是能急于地众多足以需求量的编码人员/标识符瓦,在生产生存环境之中用于它们。

刚才 GitHub 上的星星需求量,我们看得见 Carbon 是这群人之中的多才多艺,与其他两个相对来说,有较大的相差。Carbon 现在急于地在邻里面内透过了更加多的炒作;对包容病态的关心和休养生息来透过有可能对此有贡献。

这三种母语也在它们与 C++ 的相近程度全面性都和。正如恰巧,Cpp2 是三种母语之中最相似 C++ 的。Carbon 看来离 C++ 更加多于,但用于了与 C++ 不尽相同的大体上构件块;在 Carbon 之中,其他用户的思考方固定式则与他们在 C++ 之中的方固定式则大体上不尽相同。由于MA取值逻辑,Val 应用开发人员在Java时必必需有一个稍微不尽相同的认知静态,这有可能使 Val 带进一种离 C++ 更加多于的母语。另一全面性,如果我们看一下 Val 的极短时间十分一定号召,特别是在预设安全及和来得简单的背景下,该母语的法理看来可以很差地转回化为 C++ 的不仅仅。

在这三种属于自己母语之中,Val 是唯一一种必须赞成其安全及承诺的母语。其他两种母语试上图相反一些最不安全及的转换的预设取值;这两项还不明了这究竟有较大的区别。

就母语功用的或许而言,这三种母语看来都比 C++ 更加好。但在母语的或多或少全面性,相反预设取值并必须让你走得那么多于。在这里面,与 Carbon 和 Cpp2 相对来说,Val 的取而代之方法看来更加有或多或少。

之后,我确信在我们这样的工程施工自然科学之中很极其重要的一点是:有多少母语取而代之设计要求是由某种科学知识赞成的?在这全面性,Val 看来是唯一有一些理论为基础的。这可以为其其他用户缺少似乎的应有。

打消还为时过早

Herb 在他的隐喻讲话之中呼吁不该打消 C++。这是一个来自 C++ 的领导层的得出结论,人们刚刚继续考虑打消 C++。在一年内浮现了三种 C++ 的接掌母语,正好证实了这一想法。C++ 究竟开始即使如此还不得而知,但我们至少可以确信,明年是 C++ 今后的一个拐点。

这两项,要判断这些实验者究竟但会急于还为时过早。所有的母语都有优点,也都有缺点。如果其之中至少有一种急于了,我相信我们但会推进Java母语的实践中;这有可能也就是说在整个应用软件行业的大力具体情况严重影响。

在这次来得之中,尽有可能地保持了普遍性,但我其实有自己的病态别歧视。我希望这些病态别歧视才但会规避在来得这些母语时来作得很差。

时说到病态别歧视,我其实必必需默许:在业余时间,我现在开始与 Val 团队合作,推展母语的核心实践中。对我来时说,这些想法,如果能并不一定之中得不到充实和急于采用,比特定的母语更加极其重要。如果 Val 作为一种Java母语瓦解了,但它的所有想法都被纳入了 C++,那么我但会很吃惊。

自从我看得见 Dave 和 Dimitri 在 C++ Now 上的讲话录音后,我就被MA取值逻辑的思希望所众多。在 2022 年的 CppCon 上,我见到了 Dave 和 Dimitri,并和他们独自一人阐述了一些细微,使我相信 Val 背后的想法是深刻的,经过全然的,取很多人保持良好关心。

看一下广为流传的十六进制,Val 的表现十分那么好。有可能其之中一个因素是,好的想法必必需时间来盐类。套用一个有名的讲话,我选择为 Val 岗位,不是因为它较易,而是因为它困难;因为 Val 的当年提是取很多人的。

重述:

[ADSP22] Connor Hoekstra, Bryce Adelstein Lelbach, Connor, Sean Baxter, ADSP: The Podcast, Episode 97: ‘C++ vs Carbon vs Circle vs CppFront with Sean Baxter’, 2022,

[Abrahams22a] Dave Abrahams, A Future of Value Semantics and Generic Programming (part 1), C++ Now 2022,

[Abrahams22b] Dave Abrahams, Dimitri Racordon, A Future of Value Semantics and Generic Programming (part 2), C++ Now 2022,

[Abrahams22c] Dave Abrahams, ‘Values: Safety, Regularity, Independence, and the Future of Programming’, CppCon 2022

[Carbon] GitHub, Carbon Language: An experimental successor to C++,

[Carruth22] Chandler Carruth, ‘Carbon Language: An experimental successor to C++’, CppNorth 2022,

[Kazakova21] Anastasia Kazakova, ‘Code Analysis++’, CppNow, 2021,

[Parent22] Sean Parent, ‘Exceptions the Other Way Around’,

[Racordon22a] Dimitri Racordon, Denys Shabalin, Daniel Zheng, Dave Abrahams, Brennan Saeta, ‘Implementation Strategies for Mutable Value Semantics’

_2022_02/article2.pdf

[Racordon22b] Dimitri Racordon, ‘Val Wants To Be Your Friend: The design of a safe, fast, and simple programming language’, CppCon 2022,

[Stroustrup94] Bjarne Stroustrup, The Design and Evolution of C++, Addison-Wesley Professional, 1994

[Sutter22] Herb Sutter, ‘Can C++ be 10× simpler Max safer … ?’, CppCon 2022,

[TIOBE22] TIOBE, TIOBE Index for October 2022, October 2022, (last accessed October 2022)

[Wikipedia] Wikipedia, C++, %2B%2B#Criticism

[Val] The Val Programming Language,

[Zverovich22] Victor Zverovich, ‘Google will soon have…’, Twitter, 2022,

Lucian Radu Teodorescu has a PhD in programming languages and is a Staff Engineer at Garmin. He likes challenges; and understanding the essence of things (if there is one) constitutes the biggest challenge of all.

《2022-2023 之华北地区微软大事件调查》恰巧开启,赞许照相下方二维码,必要参与问卷考察,更加有 iPad 等精美谒等你拿!

米氟来特片是什么药?能长期服用吗?
拉肚子吃什么药止泻
吃药可以治疗打呼噜吗
拉肚子的中药有哪些
消化不良想吐怎么办
友情链接