写点什么

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

评论

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

TapData × 梦加速计划 | 与 AI 共舞,TapData 携 AI Ready 实时数据平台亮相加速营,企业数据基础设施现代化

tapdata

实时数据平台 MCP协议 AI Ready实时数据平台 CDC数据采集 数据服务化

从数字化到智能化,百度 SRE 数智免疫系统的演进和实践

Baidu AICLOUD

SRE

邮件自动回复助手(Rasa/SMTP)实现教程

不在线第一只蜗牛

前端 教程 邮件

通过利益相关者管理提升财务规划的发展可持续性

智达方通

全面预算管理 财务管理 财务转型

秘密任务 3.0:如何通过 JWT 认证确保 WebSockets 安全

数据追梦人

雅菲奥朗可观测性Observability认证培训圆满结课,赋能企业可观测性新能力

雅菲奥朗

第一期人工智能工程师(中级)课程顺利举行,AI精英齐聚一堂!

雅菲奥朗

深入研究:拼多多商品详情API详解

tbapi

拼多多商品详情接口 拼多多API

Apache IoTDB V2.0.2/V1.3.4 发布|新增表模型权限管理、UDF、嵌套查询功能

Apache IoTDB

ScaleFlux入选CRN【2025存储百强】榜单

ScaleFlux

NVMeSSD 企业级存储 硬件存储

SQL优化的这15招,真香!

量贩潮汐·WholesaleTide

数据库 sql

Sentinel源码—ProcessorSlot的执行过程(二)

电子尖叫食人鱼

JavaScript

国际知名半导体研究机构SemiAnalysis称:华为云CloudMatrix 384领先英伟达和AMD的产品一代

极客天地

利用DevEco Profiler定位性能瓶颈,优化资源占用

威哥爱编程

HarmonyOS HarmonyOS NEXT HarmonyOS5.0

为什么科技巨头纷纷推出编程 Agent?背后是一场关于“生存方式”的重构

Ryan Zheng

CAD怎么将多段线反转方向

极客天地

鸿蒙动画与交互设计:ArkUI 3D变换与手势事件详解

威哥爱编程

HarmonyOS HarmonyOS NEXT HarmonyOS5.0

一文告诉你:哈姆HAHM点评的盈利模式和奖金制度是什么样的?

web3区块链创业团队DappNetWork

区块链 创业 副业 web3 #币圈新项目

企业内部即时通讯软件有哪些?这款IM工具值得拥有

BeeWorks

即时通讯 IM 私有化部署

Apipost自动化测试实战:用户充值系统API零代码高效测试与CI/CD集成全攻略

数据追梦人

CAD怎么调用参数阵列下拉菜单?

极客天地

探索亮数据Web Unlocker API:让谷歌学术网页科研数据 “触手可及”

程序员洲洲

成功案例丨新一代热管理:预测并降低热风险,避免代价高昂的过度设计和组件故障

Altair RapidMiner

仿真 CAE hyperworks Simlab PSIM

豆包 1.5 · 深度思考模型上线边缘大模型网关,百万 Tokens 免费领

火山引擎边缘云

深度思考 火山引擎 豆包 边缘智能

Spine 动画教程:皮肤制作

北桥苏

动画制作 Spine

CAD缺少线型文件会怎么样

极客天地

[方法分析]如何把大批量电话号码存入到手机通讯录,导入华为手机、小米手机、苹果iphone通讯录

一码平川

.NET Core 服务实现监控可观测性最佳实践

观测云

.net core

RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库

StarRocks

数据库 数据检索 StarRocks ;RAG DeepSeek

技术解析:ScaleFlux CSD5000如何用7%OP实现28%级别的企业存储性能

ScaleFlux

内部im聊天,实现企业安全私密聊天

BeeWorks

即时通讯 IM 私有化部署 企业级应用

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