写点什么

对话 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:039846

评论

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

TiDB 监控告警高可用

TiDB 社区干货传送门

TiDB启动:职业生涯新阶段

TiDB 社区干货传送门

社区活动 学习&认证&课程

干掉DBA!产品经理运维 TiDB,用非技术手段攻克技术挑战

TiDB 社区干货传送门

管理与运维

🔥🔥v1.9.2-httpsok快速申请免费谷歌SSL证书

物有本末

nginx https TLS SSL证书 HTTPSOK

🔥🔥httpsok-快速申请谷歌SSL免费证书

物有本末

nginx https SSL证书 SSL/TLS 协议 HTTPSOK

IaC 管理新思路:Walrus 和 Terraform 的差异化探索

SEAL安全

运维 云原生 IaC Terraform Walrus

前端代码规范 - 图片相关

南城FE

前端 代码规范 图片优化

LigaAI x 极狐GitLab,共探 AI 时代研发提效新范式

LigaAI

人工智能 DevOps 极狐GitLab LigaAI 研发效能管理

解锁阿里巴巴1688数据宝藏:API助力批量获取商品价格、标题、图片及库存

技术冰糖葫芦

API boy api 货币化 pinduoduo API

tidb 6.1.4 table cache 导致的集群QPS异常问题

TiDB 社区干货传送门

集群管理 管理与运维 故障排查/诊断 6.x 实践

“大模型驱动的软件研发” 华为云助推企业研发智能化升级

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟 企业号2024年4月PK榜

HTML API 设计指南:打造高效、可维护的接口

Apifox

JavaScript html 程序员 前端 HTML API

碳视野 | 今后五年国家重点支持三类双碳项目!

AMT企源

数字化转型 双碳 碳管理

TIUP离线镜像管理

TiDB 社区干货传送门

安装 & 部署

下班时刻的私人专访|PingCAP 九周年纪念日这一天,我问了表妹九个问题

TiDB 社区干货传送门

人物访谈

TIKV分布式事务简介

TiDB 社区干货传送门

TiKV 底层架构 学习&认证&课程

DCDN连接云和用户:加速企业全球拓展之旅

MasterInTech

阿里云 CDN

NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解

汀丶人工智能

自然语言处理 大语言模型 NL2SQL

从偶然邂逅到深度热爱

TiDB 社区干货传送门

社区活动 学习&认证&课程

架构思考随笔 - 回归单体架构?

小粽

NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL

汀丶人工智能

自然语言处理 NL2SQL NL2DSL

火山引擎 VeDI:剪映产品如何应用A/B测试验证新功能效果

字节跳动数据平台

大数据 A/B测试 企业号 4 月 PK 榜 对比试验 数字化增长

利用Python实现数据可视化

技术冰糖葫芦

API Explorer API boy api 货币化

即时通讯技术文集(第36期):《跟着源码学IM》系列专题 [共12篇]

JackJiang

即时通讯;IM;网络编程

TiDB 8.0 新特性尝鲜

TiDB 社区干货传送门

版本测评 新版本/特性解读 8.x 实践

TiDB 迁移上云实践(一)之自建MySQL

TiDB 社区干货传送门

迁移

BOE(京东方)2024年一季度净利润预计8亿元-10亿元,三位数增长叩响高质量发展“开门红”

科技热闻

TiProxy 问题解答 & 未来规划

TiDB 社区干货传送门

新版本/特性发布 新版本/特性解读 数据库连接 8.x 实践

社区声音:恭喜 TiProxy 组件 GA!

TiDB 社区干货传送门

版本测评 8.x 实践

AmzTrends x TiDB Serverless:通过云原生改造实现全局成本降低 80%

TiDB 社区干货传送门

实践案例

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