编程语言之争:Rust 社区活跃开发者 Ed Page 谈 Rust 与 C++ 的未来

作者 | Annie Xu

采访 | CSDN&Boolan 首席顾问 卢威

责编 | 何苗

出品丨GOSIM 开源创新汇

你最 pick 哪种编程语言?C++、Rust,还是 Python?

Ed Page 从事编程行业十几年,见证了不同编程语言的兴衰史。从 C++标准版本 C++98 的诞生,到 Jave、D、Go 等编程语言的崛起与发展,并跃跃欲试想挑战 C++ 的江湖地位。

诚然,新出现的编程语言分走了 C++的部分用户,但在 Ed 看来,它们都不具备 C++的核心优势。Rust 的出现,让 Ed 看到了它在部分场景下取代 C++的一丝曙光,于是他全身心投入 Rust 和 Cargo 的功能构建与社区维护。

编程语言之争:Rust 社区活跃开发者 Ed Page 谈 Rust 与 C++ 的未来

曾是 C++、Rust 和 Python 的使用者,Ed 为什么唯独看好 Rust?

他也是 AI 时代的逆行者,拒绝使用 AI 生成代码,甚至不使用任何代码辅助工具。CSDN&Boolan 首席顾问卢威主持本期 GOSIM 独家对话栏目 Open AGI Forum,对话 Futurewei 软件开发者 Ed Page,分享他对 Rust 编程语言发展与 Cargo 社区运营与功能开发方面的看法

  • 不同的编程语言有其优势,也有其缺点,现在暂时还没有一种语言完美到解决所有问题。

  • 不要花费太多时间去优化细节,而忽视了"这是否重要"。

  • 大胆地复制代码,通过大量学习填补知识空白,之后思考如何优化加速。

以下是本次采访的主要内容:

C++、Rust 还是 Python?

**GOSIM:**大家好,欢迎来到 Open AGI Forum。我们非常荣幸地邀请到了 Ed Page,请向观众简要介绍一下自己。

Ed Page **:**我从事软件开发已经有几十年了。最初是一名 C++程序员,负责操作系统、驱动程序开发。随着职业发展,我逐渐转向开发者体验、工具构建等方面的工作。现在,我全身心投入 Rust 社区,致力于改善用户体验。同时我还服务于 Cargo 团队,更新生态系统中的软件包。

GOSIM: 为什么在做了多年的 C++程序员后,转向 Rust 呢?之前积累的经验对现在有什么影响?

**Ed Page:**在 C++ 98 标准版本出现之前,我就已经在用 C++ 了。这几十年,我也见证了很多编程语言的兴亡史。期间出现了很多传言,如"Java 将会取代 C++""D 语言将会取代 C++""Go 语言将取代 C++"......

每一种新的编程语言的出现,都会带走一部分 C++的用户,但始终没有哪个编程语言能真正动摇 C++的核心优势。C++存在问题,圈内有一句话是"C++ is bad,but so is everything else",大意是"C++有缺点,但没有更好的选择了"。

第一次接触到 Rust 时,我觉得它很有趣。Rust 语言解决了一些其他语言没能解决的关键问题,填补了操作系统和嵌入式空间中尚未得到充分服务的部分。所以,我想尽我所能推动 Rust 成功,也许未来有一天它可以替代 C++ 成为这类应用场景的主要语言

GOSIM: 在接触 Rust 之前,你曾使用过 C++ 和 Python,请比较一下这三种编程语言。

Ed Page: 现在暂时还没有一种语言完美到解决所有问题。C++的功能很强大,它支持泛型特化,而 Rust 目前并不支持。当你在 Rust 中使用泛型参数时,你需要指定其所适用类型的的所有特征。因此,C++中的泛型模型不能保证适用于所有类型,而 Rust 能保证泛型的可持续构建,类型可接受就能良好运行。

我很喜欢 Python 的干净整洁,有时候在 Python 中编写的代码像是伪代码。但我对 Python 工具的分散和无序感到失望,XKCD 漫画中也有吐槽这一点的。Cargo Script 正在朝这个方向努力。我想:如果我们有一个标准库的替代品,隐藏掉很多低级别的细节,会不会更好?

我们也试图优化 Rust 的编辑布局,让开发者感觉是在 Python 中编写一样流畅。这样还能享受到 Python 的一些好处,比如快速组合代码、原型化、编译和构建等等。有时候,不用声明类型十分方便。但由于 Python 缺乏静态类型,有时会引发一些错误。我们尝试让 Rust 吸收 C++、Python 的优势。

Rust 的维护挑战与 Cargo 团队协作

GOSIM: 作为 Rust 的关键工具如 Clap 库和 Cargo 包管理器的维护者,你曾遇到最大的挑战是什 么?

Ed Page: 时间是最大的挑战之一。 起初我只是在业余时间进行 Rust 的维护,但随着家庭事务的增多,我的业余时间变少了。在加入 Futurewei 之前,我并没有太多时间进行维护。即使有时间,需要解决掉问题的也很多,远不是一两天就能搞定的。我的一个待办事项中列出了亟待解决的问题,可能需要超过一年的时间才能完成。另一个挑战是弄清楚哪个问题应该优先考虑,以及何时说"不"

GOSIM: 你做过的哪些改进功能令你特别自豪?

**Ed Page:**我对 Cargo 的第一个重大贡献是给 Cargo 添加了"add"功能。在此之前,我并没有使用过这个功能,认为没有必要仅仅为了添加依赖项而去安装一个第三方工具。虽然不是我编写的初始功能,但是我负责把它加入到 Cargo 进行运行的。在进行了一些调整和改进后,它大大提升了 Cargo 的使用体验。

GOSIM: 作为 Cargo 团队的一员,你的主要职责是什么?你与其他团队成员是如何开展合作的?

**Ed Page:**Cargo 团队的情况很容易让人误解。人们可能以为"他们需要 Cargo 团队去做某件事,Cargo 团队就会去执行",或者"Cargo 团队的负责人就是团队的唯一决策者"。实际上并非如此,Cargo 团队可以决定 Cargo 中包含哪些功能。

Cargo 团队也可以帮助人们完善设计,使其达到 Cargo 团队的标准。有时我们会参与功能设计,但我们不可能帮助每个人做全部内容。我们工作的重点在于决策制定和长期维护。

GOSIM: 再次回到协作的话题,是否有具体的例子可以分享一下你们如何与其他团队成员进行合作?

**Ed Page:**我们共同讨论了 Cargo 的设计方案。例如,Rust 和 C++可以为用户提供错误提示和长度检查的功能,而我们无法提供这样的提示信息。因此,目前正在开发这项功能。

随着 Cargo 的发展,我们会根据人们的需求拓展 Cargo 的功能。我和团队的另一位成员 Scott 合作进行了大量的工作。合作提高了效率,更方便我们进行开发。

重点改进依赖项处理与兼容问题

GOSIM: Cargo 还将推出哪些令人期待的功能呢?

Ed Page: 即将推出的是MSRV-aware 解析器。它为项目支持最低的 Rust 版本,确保选择的依赖项与你声明的 Rust 版本兼容,对企业来说非常重要。我们每六周会进行一次升级以保证 Rust 的质量和兼容性。

但是,有些企业更新前需要进行不同的验证,有些只能抽空进行升级维护,他们就无法及时进行更新。为了方便这些企业在使用旧版本 Rust 时也能找到兼容的依赖项,我们也改进了相关功能。

我开发的另一项功能是Cargo Script,它允许 Rust 文件中直接包含依赖项,而不必单独使用一个 Cargo.toml 文件。这使得快速搭建实验变得非常容易。当你创建一个 issue 并在 GitHub 上提交时,它包含其他用户想要复现该 issue 所需的一切内容。如果你想与同事交流这个项目,也可以发送给他完整的文件,可以方便地进行原型设计、实验和工作进度分享。

GOSIM: 你认为 Rust 需要进行哪些重点改进以提供更好的服务?

**Ed Page:**首先,我刚才提到的 MSRV-aware resolver 将大大减轻人们的负担。最近,我和技术人员沟通时,他们表示 CTO 对其处理旧依赖项的工作效率感到不满。对所有员工来说,处理旧的依赖关系占用了很多时间。

第二,时间构建。时间十分重要,需要有人专门负责时间,从而更好地优化 Cargo 的缓存机制,提高构建速度。

第三,供应链管理。我们正在开展软件物料清单相关的工作。除此之外,还有一些其他工作需要解决,比如更好地跟踪代码中的漏洞报告,更好地了解依赖项的变化,以及如何更好地查看你的依赖项。

AI or not?

GOSIM: 你是否尝试过使用 Copilot 或 ChatGPT 来生成 Rust 代码?

**Ed Page:**事实上,我没有使用过任何 AI 工具,或者类似的代码辅助工具。我甚至不使用语言集成查询(Language Server Protocol),如 Rust Analyzer。有一次我不小心启用了它,随后我想立刻把它从我的文本编辑器中删掉。

GOSIM: 我问这个问题的原因是,Python 几乎是大语言模型的母语,但大模型对于 C++ 和其他语言的支持相对较低。在 CSDN,我们正在进行一些工作试图提高大语言模型在 C++ 上的性能。

**Ed Page:**我不太清楚这些模型的细节,也不太了解 AI 和机器学习。但我猜测可能是 Python 对属性信息的规定更严格,所以可以更好地用 Python 来生成代码建议。

GOSIM: 不同语言在大型语言模型中的表现存在差异,应该做点儿什么让不同语言在 AI 领域更公平。最后一个问题,对于有兴趣在 Rust 中创建或维护开发工具的开发者,你有什么建议?对于新加入 Rust 生态的开发者来说,有哪些注意事项?

Ed Page: 不要过分担心细节 Rust 提供了低级控制功能,不要花太多时间试图优化每一个细节,而忽略了它是否真的重要。这样只会造成时间浪费,事情却没有真正完成。我认识的一个人的一件衬衫上面写着"keep calm and clone"。

不要担心把所有东西都借用过来,尤其是当你只是想做一个 CLI,或者你刚刚学会一些内容,只需要让代码工作完成你想做的事情,随后通过专业书籍搞明白,找出如何让它更快的方法,然后再去担忧它是否运行。大多数情况下,你可能根本不会在意自己做了哪些克隆。

**GOSIM:**感谢 Ed 的精彩见解和讨论,感谢所有观看的开发者们。本次的访谈就到这里,下次再见。

推荐阅读

海内外开源大咖齐聚,GOSIM China 2024 盛大开启

可集成多模型的机器人开发框架 dora:让机器人编程走向大众

GitHub 斩获近 20,000 Star,创始人揭秘跨平台自动化 APP 开发 | Open AGI Forum

相关推荐
羊小猪~~2 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
binishuaio8 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE10 分钟前
【Java SE】StringBuffer
java·开发语言
就是有点傻14 分钟前
WPF中的依赖属性
开发语言·wpf
洋24022 分钟前
C语言常用标准库函数
c语言·开发语言
进击的六角龙24 分钟前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点25 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
NoneCoder42 分钟前
Java企业级开发系列(1)
java·开发语言·spring·团队开发·开发
苏三有春42 分钟前
PyQt5实战——UTF-8编码器功能的实现(六)
开发语言·qt
脉牛杂德1 小时前
多项式加法——C语言
数据结构·c++·算法