作者 | 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 盛大开启