irpas技术客

取代 C++,Google 强势开源 Carbon语言_开源头条_取代c++

未知 7794

整理 | 彭慧中 责编 | 屠敏 出品 | CSDN(ID:CSDNnews)

每一种编程语言都曾想一统江湖,将其他语言取而代之。但事实上,能够在众多竞争者中脱颖而出并雄霸一方天地并非易事。今天,谷歌重磅公开了其内部建立的最新编程语言——Carbon,剑指 C++,欲成为其实验性继任者。

历朝历代的“继承者们”

多年来,谷歌创建了许多编程语言,其中一些已经广为流行并深受大家的喜爱。例如,Golang(简称 Go)是为了改善服务器和分布式系统的开发而创建的,后来被公众采用。同时,Dart 编程语言,最初是作为 JavaScript 的替代品,直到 Flutter 的发布后终于成为主流语言。

日前在多伦多举行的 Cpp North 大会(专门讨论 C++ 的会议)上,谷歌首席软件工程师和开源软件开发者 Chandler Carruth 分享了一种名为 Carbon 的新编程语言的愿景。Carruth 展示了当今许多最流行的编程语言是如何拥有继承者的,这些继承者们利用了现代语言设计的优势,使开发者能够迅速提高生产力。

正如我们熟知的,C++ 是 C 语言的继承者,Kotlin 是 Java 的继承者,Swift 是 Objective-C 的继承者,而来自微软的 TypeScript 彻底增强了 JavaScript,同时保持舒适的使用并能够“转译”回 JavaScript。那么,C++ 的继承者会是哪一个?Rust 或者是这个新出现的 Carbon?

图源推特@Conor Hoekstra

或许很多人会选择 Rust 作为 C++ 的后继语言。不可否认,想要启动新项目,Rust 是一种很好的语言选择,但它不像 Java 和 Kotlin 那样具有“双向互操作性”,因此很难稳定地迁移。借用Conor Hoekstra 的说法,“如果 Rust 今天适合你的项目,你应该使用它。但是未来想要将 C++ 项目背后的整个生态系统迁移到 Rust 是困难的。”

为此,虽然 Carbon 有许多与 Rust 相同的目标,如帮助开发者创建“性能关键型软件”,但 Carbon 也打算与现有的 C++ 代码完全互通,并使从 C++ 迁移到 Carbon 尽可能容易。

取代 C++,Carbon 的使命

为什么 C++ 开发人员可能想考虑在他们的代码库中引入 Carbon?

尽管 C++ 仍然是性能关键型软件的主流编程语言,拥有庞大且不断增长的代码库。但其易用性较差、掌握难度大、以及由于语言功能过于丰富而易导致混乱等特点,也经常被人诟病。由于积累了几十年的技术债务,企图逐步改进 C++ 是非常困难的,这既是由于技术债务本身,也是由于其进化过程中的挑战。解决这些问题的最好方法是避免直接继承 C 或 C++ 的“遗产”,而是从坚实的语言基础开始,如构建现代泛型系统、模块化的代码组织和一致、简单的语法。

正因如此,Carbon 应运而生,其目标如下:

1. 速度快,可与 C++ 一起使用

性能与使用LLVM的C++相匹配,具有对位和地址的低级访问

从“遗产”到模板,实现与现有的 C++ 代码互操作

快速和可扩展的构建,与现有的 C++ 构建系统一起工作

2. 现代化和并且能不断发展

坚实的语言基础,易于学习,特别是对于已经使用过 C++ 的人

简单的、基于工具的 Carbon 版本之间的升级

更安全的基本原理,以及逐步实现内存安全子集的途径

3. 打造受欢迎的开源社区

明确的目标和优先级,具有强大的管理能力

社区致力于成为一个欢迎、包容和友好的社区

包含“电池”的方法:编译器、库、文档、工具、包管理器等

尽管 Carbon 是在谷歌内部开始的,但该团队愿意将其开源,为的是使其在未来能够获得成功,Carbon 需要成为一个“独立的并且由社区驱动的项目",而不仅仅是为谷歌自用。

“学不动”的开发者们,依然期待

随着这门新语言的正式发布,不少开发者跃跃欲试,仅在 Hacker News(https://news.ycombinator.com/item?id=32151609)上就引发 400 多名开发者关于该语言的探讨。

前排“课代表”对 Carbon 做了进一步的总结:

@cogman10:如果你像我一样,想知道 "是什么让 Carbon 与 Rust 或 Zig 不同?那我总结三点:

能够与各种各样的代码互操作,如类/结构和模板,而不仅仅是自由函数。

愿意将 C++ 的习性暴露在 Carbon 代码中,必要时也可以反过来,以使互操作层的性能最大化。

使用包装器和通用编程,包括模板,以减少或消除运行时的开销。

换句话说,Carbon 可以做 Rust 不能做的事情,就是用一个’foo’方法调用一个 C++ 类。或者创建一个带有’foo’方法的类,然后从 C++ 中调用该方法。这可能是实现 C++ 相互操作中要克服的最大障碍之一。大多数人不会这样做,相反,你会做一个 C 函数绑定和结构,并通过它移动数据/调用函数。

另一名开发者指出了 Carbon 在安全方面可能存在的问题。

@ansible:总的来说,Carbon 在安全方面做出了妥协,以便为 C++ 的发展提供一条道路。C++ 开发者必须能够自如地迁移他们的代码库,并且能够以一种基本自动化的方式进行迁移。为了实现自动迁移,Carbon 不能要求对迁移的 C++ 代码进行根本性的重新设计。虽然迁移工具在理论上可以将所有被迁移的代码标记为不安全的,但 Carbon 应该使用一种安全策略,对 C++ 代码进行优雅地降解并提供改进,无论是否被迁移。

这并不意味着 Carbon 永远不会默认采用有保障的安全策略,只是 C++ 代码的性能和迁移需要优先考虑,任何设计都需要在其他目标的背景下考虑。以后仍有可能采用有保障的安全,尽管这需要确定一个迁移路径。

这是非常有趣和务实的。如果他们最终能通过与 Rust 的借用检查器不同的路径得出同样水平的安全保证,那就很有意思了。

由于他们的目标之一是将现代 C++ 自动翻译成Carbon,我确实想知道这在一般情况下会有多大效果。

我绝对欢迎一个更容易阅读和理解的C++的替代品。这将是对世界的一个好处。

对于想要尝鲜的小伙伴,现在就可以下载源代码在自己的电脑上体验了。另外,值得注意的是,Carbon 与免费的 Compiler Explorer 网络应用也进行了整合,所以大家可以直接在浏览器中开始使用 Carbon 编程语言,用了之后也别忘了回来分享一下你的体验~~

参考链接:https://9to5google.com/2022/07/19/carbon-programming-language-google-cpp/


《新程序员001-004》已全面上市,欢迎扫描下方二维码或点击进入立即订阅,即可畅享电子书及精美纸质书


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #取代c #C #的继承者究竟是 #rust #还是 #Carbon