当前位置: 首页 > 科技观察

“C++继任者”火到GitHub趋势榜一,C++之父:规范不足,无法评价_0

时间:2023-03-16 00:19:12 科技观察

“C++的继承者”登上GitHub热搜榜C++之父:规格不够,无法评论在今年的CPPNorthC++大会上,谷歌宣布了一种新的编程语言Carbon,称其将是“C++的继承者”。“谷歌在GitHub上将其开源。虽然这门语言还处于实验阶段,但很快就吸引了众多程序员的围观,一度在GitHub趋势榜上排名第一,目前已经获得21.3kstar。对于谷歌开发者声称Carbon是C++的继承者,有外媒向C++之父BjarneStroustrup征求意见。老人说:这么多年来,总有新的语言试图成为C++的接班人。和编程风格;但是Carbon太新了,而且没有明确说明,我无法真正做出有意义的技术评论。如果不开发全新的语言规则、库和管理方案,通常很难提供C++的替代方案。那么为什么谷歌团队非要创建一个“替代版本”的C++,而不是继续改进现有的C++呢?毕竟,他们自己在内部广泛使用该语言。为什么不升级C++?对此,带领团队开发Carbon的谷歌工程师钱德勒·卡鲁斯(ChandlerCarruth)解释说,C++已有40年历史,其自身的许多问题困扰着当前的开发者。几十年来,C++积累了大量的技术债务。它的维护者优先考虑向后兼容性,以便继续支持广泛使用的项目,但这往往会导致庞大的代码库。而且,C++虽然有开源的编译器(比如gcc),但是也有很多闭源的编译器,有些编译器可能需要很长时间去完善和升级。此外,C++语言的发展受到以标准化而非设计为导向的官僚委员会管理过程的阻碍,这使得向其添加新功能变得困难。解决这些问题的最好方法是避免直接继承C或C++的“遗产”,而是从语言基础入手,例如:现代泛型系统、模块化代码组织、一致的简单语法等。Carus在CPP会议称,该语言的目的不是与C++的未来改进版本竞争,而是“探索C++无法完成的事情”。正如微软创建TypeScript更新JavaScript一样,Carbon作为一门在C++基础上发展起来的新语言,将为更多的开发者解决内存安全、泛型等问题,弥补C++的不足。当前Carbon语言的亮点包括:Introducer关键字和简单的语法;函数输入参数是只读值;指针提供间接访问和变体;使用表达式命名类型;按包名导入API;强大且定义检查的泛型...此外,Google正在继续开发Carbon以支持以下功能:性能关键型软件;软件和语言的演变;易于阅读、理解和编写的代码;实用的安全和测试机制;快速且可扩展的开发;现代操作系统平台、硬件架构和环境;与现有C++代码的互操作性和迁移。开发团队还将创建一个内置的包管理器,这是C++中非常缺乏的。举个简单的例子:用C++代码和Carbon代码分别计算两个半径为1和2的圆的面积和。两者对比如图:△来源:GitHub;左边是C++代码,右边是Carbon代码下图展示了Carbon和C++之间的互操作性。程序员可以在Carbon上调用C++库、方法和函数而无需额外开销,反之亦然。但是,对于安全问题,Carbon从一开始就没有构建内存安全体系。Carus表示,由于C++的内存安全性差,Carbon的研发起点很低。该项目的首要任务是迁移而不是安全;他希望Carbon在未来至少与Go或Swift一样安全。事实上,在Carbon之前,Mozilla(开发Firefox的那个)在2015年发布了一种也标榜自己是“C++的继承者”的语言:Rust,而这个Rust非常注重内存安全。那么为什么不大力发展Rust呢?“Carbon是为那些拥有大量C++库的人准备的。”Carus在CPP会议上回应称,C++和Rust的衔接不好,将C++生态系统转移到Rust非常困难。对于那些已经拥有庞大C++代码库的开发者来说,将他们之前的东西搬到Rust编辑器中是一件非常麻烦的事情。并且Carbon被设计为C++的后继语言,未来将实现与C++的无缝对接,与C++具有双向互操作性,对于C++代码库较大的人来说非常友好。对于那些没有这种“烦恼”的程序员,Carus表示,如果你想使用Rust,可以继续使用它。在前来围观Carbon的网友中,有人表示支持谷歌开发这门新语言:如果能在这里直接调用C语言库的底层Stuff函数,而不在开头加上extern"C",是的太奇妙了。有人认同其简化语言和提高安全性的目标,但他认为在现有语言中提高内存安全性并不容易,现有的C++特性和API很可能会制约这种新语言的发展。当然,也有网友不看好Carbon,认为谷歌有放弃创新软件的习惯,这个听起来很炸裂的项目可能半途而废。也有人提出:Carbon这种用C++实现的语言,居然要取代C++?有网友认为Rust正在逐渐成为一种低级编程语言。Carbon和Rust有很多相似之处。没有卖点。另外HackerNews上有网友想到了D语言(DLang),它与C++有很好的互操作性。而且D语言还具有Carbon的很多功能,包括与C++相互调用,减少额外的开销。遗憾的是,由于D语言最初的定位不够明确,一度试图覆盖Java和C++的功能,使其相对小众。传送门:https://github.com/carbon-language/carbon-lang