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

Carbon是Google的实验性C++继任者,值得学习吗

时间:2023-03-16 15:21:09 科技观察

自成立以来,C++一直是构建性能密集型应用程序的首选。但是由于“由委员会设计”,该语言仍然有一些过时的做法。2022年7月19日,在多伦多举行的CPPNorthC++会议上,Google工程师ChandlerCarruth介绍了Carbon。让我们来看看Carbon是什么以及它打算如何取代C++。什么是碳?Google工程师开发了Carbon编程语言来解决C++的缺点。许多现有语言(如Golang和Rust)已经存在,它们反映了C++的性能而没有缺点。不幸的是,这些语言对现有C++代码库的迁移构成了重大障碍。Carbon的目标就像TypeScript之于JavaScript,Kotlin之于Java。它不是替代语言,而是围绕与C++的互操作性而设计的后继语言。它的目标是大规模采用和迁移现有代码库和开发人员。Carbon的主要特性Carbon的一些主要特性包括C++互操作性、现代泛型和内存安全性。与C++Carbon的互操作性旨在为C++开发人员提供平缓的学习曲线和一组标准、一致的语言结构。例如,以这个C++代码为示例://C++:#include#include#include#includestructCircle{floatr;};voidPrintTotalArea(std::spancircles){浮动区域=0;for(constCircle&c:circles){area+=M_PI*c.r*c.r;}std::cout<<"总面积:"<;int{std::vectorcircles={{1.0},{2.0}};//从`vector`隐式构造`span`。PrintTotalArea(圆圈);return0;}转化为Carbon,它变成://Carbon:packageGeometryapi;importMath;类Circle{varr:f32;}fnPrintTotalArea(circles:Slice(Circle)){vararea:f32=0;for(c:Circleincircles){area+=Math.Pi*c.r*c.r;}Print("总面积:{0}",area);}fnMain()->;i32{//动态大小的数组,如`std::vector`。varcircles:Array(Circle)=({.r=1.0},{.r=2.0});//隐式构造`Slice`来回m`Array`.PrintTotalArea(圆圈);return0;}您还可以在应用程序中将单个C++库迁移到Carbon,或者在现有C++代码之上添加新的Carbon代码,例如://Carbon和C++中使用的C++代码:structCircle{floatr;};//Carbon为C++公开一个函数:packageGeometryapi;importCpplibrary"circle.h";importMath;fnPrintTotalArea(circles:Slice(Cpp.Circle)){vararea:f32=0;for(c:Cpp.Circleincircles){area+=Math.Pi*c.r*c.r;}Print("Totalarea:{0}",area);}//C++调用Carbon:#include#include"circle.h"#include"geometry.carbon.h"automain(intargc,char**argv)->;int{std::vectorcircles={{1.0},{2.0}};//Carbon的`Slice`支持来自`std::vector`的隐式构造,//类似于`std::span`。几何::PrintTotalArea(圆圈);return0;}modernpanTypeSystemCarbon提供了一个带有检查定义的现代泛型系统。但它仍然支持可选模板以实现无缝的C++互操作性。这个泛型系统为C++模板提供了许多优势:泛型定义的类型检查。这避免了重新检查每个实例的定义的编译时间成本。健壮的,经过检查的界面。这些减少了对实现细节的意外依赖并创建了更明确的合同。内存安全Carbon试图通过更好地跟踪未初始化状态、增加初始化执行和加强初始化错误来解决内存安全问题,这是困扰C++的一个关键问题。设计基础API和习惯用法以支持调试并强化构建中的动态边界检查。有一个默认的调试构建模式,比现有的C++构建模式更全面。开始使用Carbon您现在可以通过查看代码库和使用Carbon浏览器来探索Carbon:在。$brewinstallllvm$exportPATH="$(brew--prefixllvm)/bin:${PATH}"#下载Carbon代码$gitclonehttps://github.com/carbon-language/carbon-lang$cdcarbon-lang#构建并运行资源管理器。$bazelrun//explorer--./explorer/testdata/print/format_only.carbonCarbon路线图根据Carbon路线图,Google将在2022年底前发布核心工作版本(0.1)以公开实验。他们计划在2023年发布0.2版,并在2024-2025年发布完整的1.0版。Carbon能否复制Golang和Kotlin等其他语言的成功还有待观察。