联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话: QQ:3810899917

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

Sutter 提到 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] 因为现在用户和语言都很复杂,甚至未来 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/

如有侵权或异议,请联系我们删除

相关文章

【付费阅读演示】6 款大模型官宣后,生成式 AI 淘汰赛的号角正式吹响了
亚马逊云科技在 2024 年的 re:Invent 大会上发布了自研的 Amazon Nova 系列六款基础模型,包括多模态和文本处理模型。这些模型在性能、成本和推理速度上表现出色,具有极高的性价比。Amazon Bedrock 的更新引入了模型蒸馏和自动化推理检查功能,以提高模型的效率和准确性。此外,Trainium2 和 NeuronLink 技术的推出进一步提升了 AI 应用的基础设施能力。Amazon Q Developer 的增强则为开发者提供了更高效的编程支持。这些创新标志着亚马逊在生成式 AI 领域的领先地位,并推动行业进入“能用、好用、用得起”的新阶段。
新手必备!养“金渐层”须知的10个注意事项!
金渐层猫,以其独特的外貌和温顺的性格,赢得了无数宠物爱好者的青睐。如果你准备迎接一只金渐层猫,恭喜你!但在开始之前,了解一些养猫的基本知识和注意事项是必不可少的。今天,我就为你整理了养金渐层猫的十大忠告,让你的养猫之旅更加顺利!🐱✨
金渐层为何是猫界的“香饽饽”?网友:优点太多数不过来!
金渐层因稀有、高颜值、性格友好、饲养体验好、适应力强、智商高通人性而受欢迎,寓意招财,撸猫手感佳。养护需注意饮食管理、毛发护理、健康管理、互动陪伴及训练引导。
英短金渐层图鉴|英短中的新势力
现在的年轻人都想生猫,那生什么样的哈基米你有想过吗?今天来说说绝大数人都考虑过的毛孩子——英短金渐层,生过的家长,评论区可以分享下生猫经验~

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册