取代 C++,Google 强势开源 Carbon语言

2023-11-12

整理 | 彭慧中 责编 | 屠敏
出品 | 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 不同?那我总结三点:

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

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

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

换句话说,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》已全面上市,欢迎扫描下方二维码或点击进入立即订阅,即可畅享电子书及精美纸质书

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

取代 C++,Google 强势开源 Carbon语言 的相关文章

  • 在 MS word .docs 中插入 MathMl 、 Tex 或 LaTex 方程?

    我一直在寻找 C 中 Net 的一些 dll 用于在 MS Word 中插入任何 MathMl Tex 或 LaTex 方程 我尝试了一些类似 DocX 的工具 但它们失败了 你知道吗 或任何提示如何做到这一点 谢谢 Word 2007 可
  • 如何从 C# 可移植类库 (PCL) 添加对 F# 可移植库的引用

    我有一个项目 其中包含两个 F 项目和一个 C 项目 我想在其中编写一些 XUnit 测试 FS PL F 3 1 3 3 1 0 可移植库 FS PL Legacy F 31 2 3 5 1 可移植库 旧版 测试 C NET 4 5 Wi
  • 在 Linux 上,在 Eclipse CDT 中使用 gdb 调试 C++ 应用程序,如何向 stdin 输入内容?

    在 Linux 上 我尝试在 Eclipse CDT 中使用 gdb 调试 C 应用程序 例如应用程序applic exe接受一些命令行参数arg1 and arg2它期望一些数据stdin 比如说 取自文件input txt 通常 要在控
  • 获取在 Unity 中实现接口的所有类型

    如果您只想知道解决方案 请跳至更新 我有一个应用程序 它使用以下代码来获取并运行许多工作方法 var type typeof IJob var types AppDomain CurrentDomain GetAssemblies Sele
  • 关闭模态后清除模态字段

    我有这个模式
  • 如何从 nuget 包中排除子目录和内容

    所以我有一个网站正在尝试打包用于 Octopus Deploy 我有以下文件夹结构 Web Views WantThis Dontwantthis WantThis1 WantThis2 lots more Scripts 我试图排除 Do
  • 如何使用 VB.NET 或 C#.NET 代码从 yahoo 邮件 ID 发送邮件

    我想从我的 yahoomail Id 发送邮件 如何使用 VB NET 或 C NET 代码从 yahoo mail Id 发送邮件 需要善意的帮助 提前谢谢 西瓦库马尔 以下是一些制作基本 html 电子邮件消息的示例 http help
  • 将二维整数作为 Readonly/const 存储在单独的类中,同时保持非公开

    这是我在使用这个地方作为我的 去处 以获取关于什么有效 无效 为什么等的一般意见之后的第一个问题 那么让我们试试这个 由于我的经验有限 我一直在尝试寻找更好的方法来创建固定数据字段 我可以在整个程序中引用这些字段 例如我反复显示的最终用户可
  • 隐藏树视图列表中的节点。在 C# 中

    我正在使用 VS 2005 C 正在处理一个未完成的 WinForm 我已将 XML 解析为树视图列表 但遇到了一些问题 我想知道是否有一种方法可以隐藏 过滤 删除名称中包含 this text 的某个节点 而不必依赖文本框 这就是我对这个
  • WPF:BinaryFormatter 可以序列化 FlowDocument 实例吗?

    我喜欢使用binaryformatter来序列化流文档 但这是例外 Serializable public class BinFlow public FlowDocument my get set BinFlow myBF new BinF
  • 大表的最佳主键格式

    我正在开发一个 ASP NET 应用程序 它有一些可能很大的数据表 我想知道定义主键的最佳方法是什么 我知道以前已经有人问过这个问题 但由于这是针对特定情况的 所以我认为这个问题是有效的 我在 SQL Server 2008 数据库上使用实
  • const int 列表而不是 enum

    我开始研究大型 C 代码库 并发现使用带有多个 const ints 字段的静态类 这个类的行为与枚举完全一样 我想将类转换为实际的枚举 但权力被拒绝 我想转换它的主要原因是这样我可以将枚举作为数据类型而不是 int 这对可读性有很大帮助
  • Time 方法在另一个线程中执行并在超时时中止

    您好 我正在尝试异步运行方法 以便计算持续时间并在超过超时时取消该方法 我尝试使用异步和等待来实现这一点 但没有运气 也许我过度设计了这个 任何输入都会受到赞赏 应该注意的是 我无法更改接口 TheirInterface 因此得名 到目前为
  • cygwin $'\r':命令未找到错误

    我稍微修改了一个项目 在调试下它运行得很好 当我尝试在不调试的情况下构建它时 它显示错误 无法修复它 make Making all in third party make 1 Entering directory cygdrive c U
  • 计算距离早上 8 点还有多少小时

    我知道如何计算两个日期之间的差异 但如何计算给定日期与下一个上午 8 点之间的时间 var now DateTime Now var tomorrow8am now AddDays 1 Date AddHours 8 double tota
  • C# 多重继承

    目前我正在学习 C 和 ASP NET MVC 4代码优先方法 我是 Visual Basic 开发人员 现在我想开始 C 而且 现在我遇到了必须管理多重继承的情况 但是 对于Class i来说这是不可能的 那么 我应该如何管理我拥有的这些
  • 在一个数据库请求中连接 IQueryable 集合

    我使用实体框架 我需要连接两个集合 例如 IQueryable
  • ASP .NET Core IIS 托管用户身份名称为空且 IsAuthenticated=false

    我在 IIS 上运行 ASP NET Core dll 使用 AspNetCoreModule 使用以前的 ASP NET 我可以通过以下方式获取用户身份名称 HttpContext Current User Identity Name 因
  • 是一对一的关系不好的策略

    用户始终拥有一个钱包 一个钱包始终属于一位用户 由于我想分离与钱夹相关的属性 我创建了 Wallet 对象并能够跟踪钱交易 我创建了 public Wallet Entity
  • qt 如何知道按钮被点击?

    我正在尝试编写一个程序 用声音进行一些操作 我的问题是我有 3 个播放按钮和 3 个标签 我希望无论我单击 播放 按钮 都应该播放按钮附近标签中名称的声音 我有一个没有任何参数的播放插槽 那么 如何分别连接到每个播放按钮和每个标签呢 实际上

随机推荐

  • 类加载机制

    任何一个类在使用之前 都会经历加载 连接和初始化3个步骤 随后程序中便可以访问它的静态方法和用new关键字创建的对象实例 静态变量存储在常量池中 1 加载过程 根据一个类的全限定名 加载该类的二进制字节流到JVM内部 2 连接 验证 验证是
  • 安装旧版本插件_iOS 应用降级插件,支持任意版本升降

    软件版本越来越高 功能越来越来越多 升级过后发现还是简简单单的老版本好用怎么办 对于iOS用户来说 这还真不好办 在App Store下载的应用都是当前的最新版 安装方式也不像安卓系统需要先下载安装包再安装 这样后期还能通过安装之前的安装包
  • 弱监督目标检测之一 最小熵隐变量模型

    目标检测是计算机视觉一个非常重要的子任务 目标检测需要发现并准确定位自然图片中的物体 在2012年之前 目标检测主要基于手工设计的特征以及传统分类器 2012年以后 出现了很多基于深度学习的目标检测方法 基于深度学习的目标检测主要分为两类
  • 作为计算机专业学生,说一说校招

    首先要说的是 作为计算机相关专业的一名学生 确实非常庆幸当年选择了这个专业 如今互联网大热 是因为和前十年的土木一样 世界特别是中国正处于互联网改变世界的浪潮当中 人类世界一共有三次工业革命 互联网这次就是第四次工业革命 可以想象一个新兴的
  • 日志中进行脱敏处理

    首先要写脱敏类 如下 Slf4j public class SensitiveDataConverter extends MessageConverter private static Pattern idCardPattern Patte
  • 大神之路-起始篇

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 涉及 企业运维 网络安全 应用开发 物联网 人工智能 大数据 学习知识 花开堪折直须折 莫待无花空折枝 作者主
  • 初识vue3/setup/ ref()/ computed/watch/生命周期/父传子

    创建项目先不着急学 main js变了 新加setup reactive ref computed watch 生命周期 父传子 子传父 ref 模板引用 暴露子组件属性 跨层传数据 defineOptions
  • 已解决 java lang NullPointerException Attempt to invoke vir

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 造福人民 实现我们中华民族伟大复兴 今天开发的时候 发现明明有这个id 而且也通过find
  • 【微信】PC端多开设置

    文章目录 背景 步骤 查找微信安装路径 编写 bat启动脚本 自定你快捷键图标 创建快捷方式 修改图标 背景 个人喜欢工作和生活分离 包括手机号和微信都是生活号和工作号两个 快速区分生活还是工作信息或电话 不会错过重要的信息 微信朋友圈信息
  • 盘点2020年科技领域预测~堪称大型翻车现场!

    2020年曾经是很多人幻想的一年 如今这一年真正已经到来 让我们回顾一下科技行业对2020年预测 是否已经实现 优步将部署飞行汽车 优步公司曾承诺3年时间推出飞行汽车 2020年该公司将会举行飞行汽车的演示 但是可以肯定的是 明年你无法使用
  • Python 打印三位所有水仙花数

    打印三位水仙花数 介绍 水仙花数是一个三位数 它的每位数字的3次幂之和等于它本身 例如 153 1 3 5 3 3 3 知识点 1 算术运算符 幂 符号 整除 符号 取余 符号 2 if 条件语句 3 for 循环 预先打印文字 print
  • Make-A-Video - Pytorch (wip) text to video

    制作视频 Pytorch wip Make A Video的实现 新的 SOTA 文本到来自 Meta AI 的视频生成器 在 Pytorch 中 它们结合了伪 3d 卷积 轴向卷积 和时间注意力 并显示出更好的时间融合 伪 3d 卷积并不
  • linux问题记录

    panic stack over 线程栈过小 syslog占用栈 导致栈溢出
  • Word doc/docx 格式文件转换为 MarkDown

    异想之旅 本人原创博客完全手敲 绝对非搬运 全网不可能有重复 本人无团队 仅为技术爱好者进行分享 所有内容不牵扯广告 本人所有文章仅在CSDN 掘金和个人博客 一定是异想之旅域名 发布 除此之外全部是盗文 今天忽然想要把自己的 资源分享文章
  • vc 识别移动硬盘 U盘,本地硬盘

    说明 有时候我们在做设备监控的时候 要识别一些链接设备 在使用函数GetDriveType的时候 U盘可以返回DRIVE REMOVABLE 而本地硬盘硬盘和移动硬盘DRIVE FIXED 因此还需要进一步来识别 识别方法为判断设备的总线类
  • 浅谈 SOLID 原则的具体使用

    单一职责原则 SRP 开放封闭原则 OCP 里氏替换原则 LSP 接口隔离原则 ISP 依赖倒置原则 DIP 小结 SOLID 是面向对象设计5大重要原则的首字母缩写 当我们设计类和模块时 遵守 SOLID 原则可以让软件更加健壮和稳定 那
  • 物理机重启后ES无法访问

    问题 机房断电 重启机器后 Elasticsearch 集群无法访问 集群状态访问如下 可以访问 9200 端口 目测 Elasticsearch 是正常的 但是查看集群状态报错 报错内容 error root cause type mas
  • Python 实现简单的自定义异常类型

    usr bin env python import os socket errno types tempfile class NetworkError IOError pass class FileError IOError pass de
  • threadx系统_小熊派带你初探最近叱咤风云的ThreadX全家桶

    一 前言 1 1 ThreadX操作系统简介 去年微软宣布收购ThreadX 但是没有公布后续策略 uCOS全家桶进入开源免费后 ThreadX也宣布正式加入 微软未来四年将投资50亿美元到物联网上 收购Express Logic是该战略的
  • 取代 C++,Google 强势开源 Carbon语言

    整理 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews 每一种编程语言都曾想一统江湖 将其他语言取而代之 但事实上 能够在众多竞争者中脱颖而出并雄霸一方天地并非易事 今天 谷歌重磅公开了其内部建立的最新编程语言 Carbon 剑指