写点什么

对话 Steve Klabnik 和 Herb Sutter:Rust 和 C++

作者:Sergio De Simone

  • 2024-11-15
    北京
  • 本文字数:1976 字

    阅读完需:约 6 分钟

对话Steve Klabnik和Herb Sutter:Rust和C++

在 Kevin Ball 主持的《软件工程日报》(Software Engineering Daily )播客中,Steve Klabnik 和 Herb Sutter 讨论了几个与 Rust 和 C++ 相关的话题,其中包括这两种语言的共同点和独特之处、它们的不同之处、以及它们是如何演进的等等。

完美的语言并不存在


对于 Klabnik 来说,除了关于 Rust 是一种内存安全的语言的普遍观点之外,真正使其与众不同的是,它汲取了在最近的编程语言中虽并不流行但在编程语言领域广为人知的思想。


另一方面,Sutter 强调零负担抽象(Zero-Overhead Abstraction)的概念,即我们可以用更高层次的方式表达事物,而无需为抽象付出过高的成本。在这里,Klabnik 呼应了 Sutter 的观点,认为 Rust 实现“零成本”抽象的主要机制是通过类型:


[Klabnik] 基本上,在类型系统中可以表达的越多,在运行时需要检查的就越少。


但并非所有抽象都是零负担的,Sutter 表示,他举了两个 C++ 特性的例子,编译器总是提供禁用这两个特性的选项:异常处理和运行时类型。


[Sutter] 如果你仔细查看原因,那是因为这两个特性可以更好地手工编写。或者,即使你不使用它们,你也要为它们付费。


因此,这就引出了这样一种观点,即语言设计同样是一门艺术或一种工艺,深受品味和语言应该是什么的哲学的影响,所以我们还没有达到一种语言可以成为完美语言的地步。

适用范围


谈到语言的使用方式,Sutter 说,它们有一个非常相似的目标,生态系统成熟度和线程安全保证可能会导致选择一种而不是另一种。Klabnik 强调,Rust 经常被用来创建网络服务,即使是在大型公司也是如此:


[Klabnik] 例如,Cloudflare 正在使用 Rust 代码作为后端。它们为 10% 的互联网流量提供支持。其他公司 […] 用 Python 编写的一些东西,然后用 Rust 重写它们。最后他们就能够从云账单中省去数千台服务器的费用。


Sutter 强调了 C++ 可以让我们控制时间和空间的能力,以及围绕 C++ 构建了 30 多年的工具生态系统的丰富性,而 Rust 相对来说仍然是一门年轻的语言。


[Sutter] 现在,在某些情况下,除非通过这类工具,否则我无法将代码发布出去。它理解 C++,但不理解 Rust。我无法发布该代码。如果我用 Rust 编写,则不允许在没有 VP 异常的情况下发布它。

语言如何演进


当谈到语言演进时,关键点在于什么时候值得为一个新特性增加语言的复杂性,这并不总是一个容易做的决定。在这方面,Klabnik 称赞 C++ 的一点是它致力于“在合理范围内”实现向后兼容。


[Klabnik] 我并不是说 Rust 团队在总体上没有类似的观点。但最近有一些关于某些事情的提议增加了一定程度的复杂性,我个人对此并不满意。


Sutter 提到 C# 团队在某种程度上决定在语言中添加可空性,尽管这肯定是一件好事,但它也带来了隐性的成本:


[Sutter] 因为现在用户和语言都很复杂,甚至未来 20 年也会如此。因为我们会永远支持这件事,对吧?它将永远限制演进。[…] 事实证明,一旦你添加了可空性 […],整个语言需要我们更多地理解它,会比我们最初想象的要多得多。


为了进一步强调做出此类决定有多困难,Klabnik 回忆了一个案例,他对 Rust 的 wait 的后缀语法进行的抗争,这与大多数其他语言的前缀语法不同:


[Klabnik] 现在我用 async 和 wait 编写了很多代码,天哪,我很高兴他们选择了后缀 wait。因为它在很多方面都非常好。

语言版本的力量


Rust Core 团队管理变更的一种方法是定义语言版本,以便在添加新功能时保持源代码的兼容性。


Sutter 表示自己有兴趣了解这种机制是否可以引入到 C++ 中以支持 async/await ,而无需采用 co_asyncco_await 关键字来防止与现有代码库发生冲突。Klabnik 解释说,版本是一种添加新语法的强大机制,但它们也有局限性:


[Klabnik] 将 mute 更改为 unique 作为纯粹的语法变更是绝对可行的。因为最终发生的事情是,当它为 2015 编译一个包,为 2024 编译另一个包,并且在 2024 中添加了 unique 或其他什么时,它会脱糖到相同的内部 [表示… 但] 你不能在版本中添加 GC,因为这会在更深层次上真正改变事情的运作方式。


类似地,Rust 标准库是一个唯一的二进制文件,因此我们必须确保它包含了所有版本中使用的所有函数。


Klabnik 和 Sutter 在播客中谈论的内容和细节比我们在此总结的要多得多。其中还包括 C++ 标准化过程对 C++ 的重要性;Rust 社区是否会对 ISO 标准语言感兴趣;Rust 拥有多个编译器而不是只有一个编译器的原因和影响;如何处理合规问题;以及在大学里教授 C++ 或 Rust 等语言的价值。如果你有兴趣了解更多信息,请不要错过完整的播客内容。

作者介绍

Sergio De Simone 是一名拥有超过 25 年工作经验的软件工程师。他曾在包括西门子、惠普和小型初创公司等不同的工作环境工作过。在过去的十多年里,他一直专注于移动平台和相关技术的开发。他目前在 BigML, Inc. 工作,负责 iOS 和 macOS 的开发。


查看原文链接:

https://www.infoq.com/news/2024/10/klabnik-sutter-on-cpp-rust/

2024-11-15 08:039671

评论

发布
暂无评论
发现更多内容

iMazing2023全新版下载安装使用介绍

茶色酒

imazing2023

Flink on Yarn三部曲之三:提交Flink任务

程序员欣宸

flink YARN 12月月更

bat脚本常用命令及测试

@下一站

软件开发 BAT 12月日更 12月月更

【愚公系列】2022年12月 微信小程序-组件模板和组件样式

愚公搬代码

12月月更

模块一作业

Ryan

架构

AngularJS进阶(十九)在AngularJS应用中集成百度地图实现定位功能

No Silver Bullet

定位 百度地图 AngularJS 12月月更

AngularJS进阶(二十)HTML5实现获取地理位置信息并定位功能

No Silver Bullet

H5 AngularJS 12月月更 地理位置

架构实战营模块一作业

张Dave

为什么FDA和MITRE也提及SBOM ? - 解读《医疗器械网络安全区域事件准备和响应手册》

安势信息

网络安全 SCA工具 SBOM 医疗器械 安势信息

Python程序打包

ITCamel

PyQt5 Python打包 打包exe

Camtasia Studio2023软件和谐版录制电脑屏幕软件

茶色酒

Camtasia Studio2023

Centos7.x部署K8S集群 (基于containerd 运行时)

蜗牛也是牛

AngularJS进阶(十七)在AngularJS应用中集成微信认证授权遇到的坑

No Silver Bullet

AngularJS 12月月更 微信认证授权

MongoDB源码学习:catalog与storage

云里有只猫

mongodb 源码刨析

[信息抽取]基于ERNIE3.0的多对多信息抽取算法:属性关系抽取

汀丶人工智能

自然语言处理 信息抽取 12月日更 关系抽取 12月月更

【愚公系列】2022年12月 微信小程序-Behavior

愚公搬代码

12月月更

Camtasia2023录屏和剪辑合一的软件

茶色酒

Camtasia2023

实时数据赋能制造业产能升级:详解半导体和汽车制造行业最佳实践(活动报名)

tapdata

制造业 数据集成 汽车制造 实时数据 半导体行业

Flutter — 仅用三个步骤就能帮你把文本变得炫酷!

编程的平行世界

flutter android

2022-12-03:部门工资最高的员工。以下数据Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。sql语句如何写? 输出结果如下: department emp

福大大架构师每日一题

数据库 福大大

自制操作系统番外:编程语言中变量是如何存储的

编程语言

MySQL锁,锁的到底是什么?

蝉沐风

MySQL innodb MVCC

深刻理解JAVA并发中的有序性问题和解决之道

JAVA旭阳

Java Java并发

再突破!MatrixDB 在 PostgreSQL 领域获双重大奖!

YMatrix 超融合数据库

数据库 postgresql 超融合数据库 YMatrix

接口隔离原则介绍

杨充

DevOps真死了?平台工程真有用?

agnostic

DevOps 平台工程

深入理解PKI

俞凡

架构 网络安全 网络

架构实战营-模块1作业

小圆

微服务的冷热部署

穿过生命散发芬芳

微服务 12月月更

Golong Context package

陈庆宗

Context #go

要不要开通个人养老金账户?

石云升

投资理财 个人养老金

对话Steve Klabnik和Herb Sutter:Rust和C++_编程语言_InfoQ精选文章