取代C++?谷歌开源编程语言Carbon
号称替代C++,谷歌发布新的编程语言,已经过去了一年。去年7月,在多伦多举办的CppNorth大会上,谷歌宣布正式开源内部打造的编程语言Carbon,并称他是C++的继任者。
谷歌的工程师认为呢,尽管C++仍然是性能关键性软件的主流编程语言,并且拥有庞大且不断增长的代码库。但同时呢,也存在着应用性较差,掌握难度大以及由于语言功能过于丰富而导致的混乱的问题。
所以呢,他们决定自己开发一门语言来代替C++,于是呢,这个速度更快,并且可以和C++代码互相操作的新语言就应运而生了,Carbon编程语言已经在GitHub上开源了。
其实呢,Google在编程语言方面确实还挺强的,之前开源的go long呢,目前已经是使用非常广泛的一个编程语言了,但是这次Carbon能否延续Go语言的传奇?目前下结论呢,还为时尚早,毕竟上一个号称代替C++的 Rust 语言目前混的并不咋滴。
在谈到为何要替代 C++ 时,谷歌工程师Carruth表示,C++作为长期以来构建性能关键应用的首选语言,它自身的很多问题困扰着现代开发人员。C++积累了数十年的技术负债,带有的很多过时实践都是其前身C语言的一部分。C++ 的维护者优先考虑向后兼容,以便继续支持广泛使用的项目,例如Linux及其包管理生态系统等。
此外,C++语言的发展也受到了官僚委员会程序的阻碍,该程序以标准化而非设计为导向。这种做法导致很难添加新功能。C++在很大程度上处于一个隔绝的开发过程,其中可能经过数年才会做出一些重要决定。
因此,Carruth希望通过更开放的社区主导环境来构建Carbon语言,并已开源。到2023年7月中旬,该项目已在GitHub上获得30.8k的Stars。
Carbon的设计理念和特性
谷歌希望在2022年年底推出Carbon的核心工作版本,即v0.1。Carbon将建立在现代编程原则的基础上,包含一个泛型系统,使开发人员不再需要为每个实例检查和再核对代码。
C++ 语言中亟需的一个特性是内存安全。内存访问 bug是安全漏洞的罪魁祸首之一,Carbon 设计人员将探索追踪未初始化状态的更好方法、设计支持动态边界检查的 API和惯用语,并构建全面的默认debug构建模式。随着时间的推移,设计人员还计划构建一个安全的Carbon子集。
Carbon语言将支持以下功能:
- 性能关键型软件;
- 软件和语言演变;
- 易于阅读、理解和编写的代码;
- 实用的安全和测试机制;
- 快速且可扩展的开发;
- 现代操作系统平台、硬件架构和环境;
- 与现有C++代码的互操作性和迁移
同时,Carbon语言的亮点包括如下:
- Introducer关键字和简单语法;
- 函数输入参数为只读值;
- 指针提供间接访问和变体;
- 使用表达式命名类型;
- 软件包为root命名空间;
- 通过包名导入APIs;
- 用显式对象参数来声明方法;
- 单继承、默认使用最终类;
- 强大且经过定义检查的泛型;
- 类型显式地实现接口。
Carbon设计团队将着手创建一个内置包管理器,这在C++中非常欠缺。此外,团队还计划编写一些将C++代码迁移到Carbon代码的工具。下图左为C++代码,右为Carbon编写的相同函数:
为何不大力发展Rust语言呢?
有人或许会问了:最近有专门为解决内存安全性能应用的需求而构建的Rust语言,为何不直接使用它呢?Carruth对此表示,如果Rust适合你,就继续使用。但是,将C++的生态系统转移到Rust非常困难。
相比之下,Carbon是建立在已有C++生态系统之上,适合那些已经拥有大量C++代码库的开发人员,这些库很难转换到Rust。
目前 Carbon 语言的代码已完全开源。Chandler 表示,虽然 Carbon 诞生自谷歌内部,且目前的项目负责人主要(不完全)由谷歌员工组成,但它的目标是要成为一个 “独立且由社区驱动的开源项目”。
如果你对 Carbon 感兴趣,可以下载源代码并在自己的设备上进行试验,或者通过 Compiler Explorer 直接在浏览器中体验 Carbon 编程语言。
对于 Carbon 项目,有开发者透露了一些背景信息:2020 年 2 月,C++ 标准委员会就 “破坏 ABI 兼容性以保证性能” 提案进行了投票,这项工作主要由谷歌员工推动,但最终投票没有通过。因此,许多谷歌员工已经停止参与 C++ 的标准化工作,并辞去他们在委员会中的正式职务,clang 的开发工作也大大放缓。基于这些背景,再结合谷歌对 Carbon 设定的目标,这名开发者认为,谷歌确实希望把 Carbon 打造成替代 C++ 的语言。