微软首席工程师:Rust 将面临十大挑战


微软首席工程师 Nick Cameron 发布了一篇博客,指出了他认为现在和未来几年 Rust 将面临的十大挑战,并提出了一些初步的解决方案想法。目前,Nick Cameron 主要负责该公司 Rust 相关的工作;曾经,他还是 Rust 核心团队的成员。

Nick 指出,现如今 Rust 正处于一个良好的发展局面;受欢迎程度越来越高、贡献者越来越多,还在一些重要领域进行了应用。但在这个充满变化的时代,从一个研究项目到一个新的、快速变化的语言再过渡到一个流行的、成熟的项目,是一个困难的演变过程。

“在这里,我想描述一下我认为现在和未来几年 Rust 面临的十大挑战。我有一些解决方案的想法,但它们都是大而难的问题,没有简单的答案,所以真正的解决方案都需要迭代、精力和创造力。我的重点是核心项目;社区和生态系统面临许多挑战(例如,如何使用 Rust 制作 GUI,或者如何让更多的 crates 进入 1.0),我认为这些挑战必须主要由社区来解决。”

具体内容如下:

治理挑战

1、如何引导开发并保持 Rust 的开放性?

开源工作中,在什么是对项目最有利的,以及什么是志愿贡献者想做的之间总存在着一些矛盾。现在,随着 Rust 社区逐渐发展壮大且 Mozilla 结束直接支持,Rust 中的这种紧张关系似乎也在日益加重。尽管有很多人从事基本的维护工作,但往往人手不足;一些重要领域也缺乏资源、缺乏引导贡献的战略工作或努力。

Nick 认为,在某些方面,采用自上而下的方法可能会更容易;但此举也或将导致 Rust 失去作为开源项目所拥有的一些优势。最大的挑战是确保在完成重要但不吸引人的工作的同时,同时又不失去项目中使其令人敬畏的部分特性。Nick 表示,他们目前正在努力解决一些具体问题,包括:

  • 优先完成眼前的工作而不是开始新工作,
  • 优先考虑工具、库和非技术工作以及语言和编译器,
  • 优先考虑影响较小、成本较低的工作,这些工作总体上可能会产生很大的影响(超过大型、迷人的工作)。

与这一挑战相关的是在面对增长时保持 Rust 的基本特征。特别是,项目如何发展并接受新的贡献者和领导者(以及随之而来的不可避免的变化)而不忽视 Rust 的核心使命?随着观察者(和评论者)数量的增加,我们如何在讨论和决策中继续保持公开和透明?

2、多样性和包容性

Rust 的多样性状况很糟糕。尽管在成为一个包容性项目方面 Rust 做的可能还不错,但还是有诸多贡献者因为某些消极原因而不得不离开了该项目;避免倦怠也是包容性的一部分。

包容性的一个重要方面是能够容纳各种意见。如果我们只有在每个人都同意的情况下才能相处,那么我们就不可能多元化或包容。虽然我们对共识的偏好在某些领域对我们很有帮助,但它也带来了问题。我们避免冲突而不是解决冲突的文化是不健康的,并导致治理功能失调。这些真的很难解决!但我们必须优先解决它们,即使它们很困难,有时也很痛苦。

3、避免低效流程的僵化

Nick 称,过去的几年里在 Rust 飞速发展的同时,其流程和组织却并没有跟上步伐。在任何与治理或流程有关的事情上,都存在着巨大的变革惯性。即使现有的流程有大量的摩擦,但除了在此之上进行调整之外似乎也无可奈何。“我们已经积累了如此多的组织债务,以至于需要进行彻底的变革,但进行这种变革将是非常困难的。”

他认为,问题的核心是项目不愿意接受“管理”(人员管理、项目管理、产品管理)作为项目领导的重要组成部分。这些事情可以独立于技术领导,但需要真正的权力委派(不仅仅是工作委派)。该项目面临的挑战是接受委托,支持这些活动,并引入更好地支持该项目的新流程。

生态系统挑战

4、Navigating the crate ecosystem

Rust 在最小标准库和“batteries included”之间取得了很好的平衡,原因在于其有一个繁荣的生态系统和易于使用的软件包管理器。然而,有关 crate 生态系统一直是个棘手的问题。存在很多 crates,要找到适合的则需要付出很多努力,或者说要很好地参与到社区中去。随着越来越多不是社区积极参与者用户的出现,以及 crate 数量的增加,这将成为一个更大的问题。

5、The async ecosystem

异步编程对于 Rust 目标的许多领域都很重要,且与 Rust 的编程模型配合得很好。然而,其生态系统在不同的运行时有些分裂;虽然有在进行相关的改进工作,但却进展缓慢,最终成功与否也未能确定。“风险在于我们最终会将东西带入标准库,这些东西并没有得到社区的广泛接受,我们最终会得到一个比我们开始时更糟糕的生态系统。”

技术挑战

6、如何在不失去其 core focus 的情况下使语言更具广泛吸引力?

Nick 认为 Rust 在其现有成功基础上仍有很大的增长空间。目前的很多软件都是用更侧重性能的语言编写,Rust 对安全、人体工程学和性能的关注则可以制造更好的产品并提高生产力。然而相对而言 Rust 学习难度和成本都太高,让 Rust 更容易学习和使用可能会扩大其影响力。

我不认为支持 GC、对Rc<RefCell<T>>类型使用含糖语法或添加一堆语法糖是解决方案。我们必须在不失去 Rust 以系统编程为核心的优势的情况下让事情变得更简单。减少对 explicit lifetimes 的需求,使 borrow checker 更强大,不要使 trait system 过于复杂,关注用户体验,避免成为一种臃肿的语言,这些都会有所帮助。也许我们会发现可以显着简化所有权和生命周期的新 abstractions?

7、内存模型和不安全代码

安全性是 Rust 主要特色之一,也是许多人使用它的动力。因此需要能够为从事不安全工作的程序员提供更多支持和更好的体验。要做到这一点,则需要对 Rust 的内存模型有更清楚的了解,然后开发语言特性、库和工具。

幸运的是,这个领域有学术研究、出色的社区工作、MIRI、不安全代码指南等等。不幸的是,这是一个非常复杂和困难的领域,许多外围人士的意见会减慢进度,并增加相关人员的工作难度。Nick 指出,出于政治和技术原因,一些可能真正影响大的更改根本无法进行。

8、发展标准库

标准库除了单调增长之外没有其他方法可以发展(可以弃用但永远不会删除,并且无法更改)。就其本身而言,这将导致标准库变得越来越庞大和混乱。但也有二阶效应:必须对稳定性采取极其保守的态度,除了“stable forever”和“仅在 nightly 可用且完全可能发生变化”之外,API 没有其他可能的状态。

相关地,标准库是一个 all or nothing deal(技术上也有 liballoc)。除了有一个更细化的版本管理解决方案外,更细化地使用标准库,而不仅仅是核心库或所有的标准库,也是有益的。

9、Big compiler changes

Rustc 现在是一个非常庞大的软件。它有很多固有的复杂性(Rust 是一种复杂的语言,在快速编译的同时提供良好的错误信息是非常困难的),很多大型软件的常见问题以及大量的技术债务。存在一些重大挑战,尤其是在编译时间方面(其中增量编译和并行编译是两种正在进行中的方法),而这些都被证明是难以实现的工作;未来想要做出重大改变只会变得更加困难。幸运的是,编译器团队有能力、精力充沛且资源充足。但是,要对 rustc 进行大的、高影响的更改仍然具有挑战性。

10、Macros

Macros 是语言中最不完善的部分之一。Declarative macros 引入了一种全新的子语言;Procedural macros 则很笨重,需要大量依赖并且难以掌握。所有的宏都与编译器(编译时间、增量编译、错误信息)和工具(IDEs、rustdoc等的各种问题)配合得很差。

我认为这是一个巨大的挑战(而不仅仅是另一个可以处理的语言特性)的原因是,这些问题是分散的和困难的。(可能)没有良好的解决方案,只有大量的工程和设计工作。许多问题(例如,macro hygiene)需要社区中不存在的专业知识。宏的优先级也不够高(毕竟它们本质上是有效的),也没有足够的魅力来吸引贡献者。

展望

Nick 最后总结称,他列出了十个所谓“大”的 Rust 问题,可能会让人感觉有点消极;但这确实都是现实中所面临的挑战。幸运的是,项目内部的人都知晓这些问题的存在,并在积极地解决中。

尽管任何解决方案都很困难,但我认为所有这些挑战都有可行且现实的解决方案。如果我们能够专注于解决这些问题(当然还有其他所有的日常挑战),那么我认为 Rust 将继续发展并取得成功。

详情可查看博客全文。


相關推薦

2022-12-23

Nick Cameron 是就职于微软负责 Rust 开发的首席工程师,此前是 Rust 核心开发团队的成员。他在 3 个月前发表文章:“Rust 面临的十大挑战”,称这是 Rust 应该在 2023 年要解决的问题。 上周他又发表了文章:“Rust in 2023”,表达对

2022-09-30

沃尔沃汽车公司的软件工程师 Johannes Foufas 对该公司的技术专家和系统架构师(也是其嵌入式 Rust 先驱之一)Julius Gustavsson 进行了一则访谈,就 Rust 在汽车中的相关应用进行了探讨。 Gustavsson 透露,2014 年,他在已经从事了 15 年

2023-04-29

持或使开源社区受益。开源软件开发者、现任 Sentry 安全工程师 Armin Ronacher 认为,微软对 Rust 的承诺对这门语言来说非常重要。 “特别是,因为我希望微软重用现有的编译器,我希望这会带来更好的 PDB [程序数据库] 支持。在

2024-08-06

对于最相关的程序构造。” 过去几年来,包括谷歌和微软在内的科技巨头一直在宣传内存安全漏洞带来的问题,并推广使用 C 和 C++ 以外不需要手动内存管理的语言。这些消息也引起了拥有大量遗留代码的美国政府公共部门

2022-02-23

改进事情的新想法听起来很有希望 -- 我希望他们能解决工程师/领导人面临的基本激励系统挑战,这些挑战导致了我们看到的症状。我认为,一个健康和包容的社区将继续有利于 Swift 的设计和进化。 目前,Chris 的工作重点在

2023-05-05

该报告基于对不同行业和地区的 500 多名软件开发人员和工程师的调查。结果指出,虽然开发人员比以往任何时候都更加努力解决技术债务、维护、协作和可扩展性方面的问题,但突如其来的 AI 繁荣意味着 Big Code 的痛苦只会越

2023-06-30

此说法。 对于当前的谷歌开发者来说,他们在 Rust 领域面临的三大挑战是: Macros(宏) Ownership and borrowing(所有权和借用) Async programming(异步编程) 编写 unsafe 代码和处理 C/C++ 互操作也是谷歌开发者遇到的问题,但

2022-07-04

微软于 3 月 4 日暂停了在俄罗斯的产品销售后,该地区对盗版微软软件的网络搜索量飙升了 250%。到目前为止,6 月份 Excel 下载的搜索量增长了 650%。6 月底,微软禁止俄罗斯用户从官网下载 Windows 10 和 11。微软上个月表示,它正

2024-07-12

《金融时报》最新报道称,在 OpenAI 面临监管审查之际,微软公司和苹果公司已决定不再加入该公司的董事会。 微软是 OpenAI 的最大投资者,在去年 11 月获得了其董事会观察员席位,并于本周二宣布放弃了这一职位。此前曾有

2024-09-30

了具有企业和军方背景的新成员。OpenAI 正在寻求从包括微软、苹果和英伟达在内的支持者筹集 65 亿美元。同时,OpenAI 也越来越专注于扩展其产品服务,一些长期员工认为这分散了公司对纯研究的关注。 公司内部有些人认为,

2023-09-22

业,在实际应用大模型时还面临着挑战。对此,工商银行首席技术官吕仲涛认为,大模型技术目前尚未完全成熟,而金融行业是一个强监管的行业,还面临着数据、算力、算法、应用等诸多挑战。 中国工程院院士、复旦大学金

2023-07-24

分析公司 Forrester 发布了 2023 年十大新兴技术报告,生成式 AI 在榜单中占据了主导地位。 生成式 AI 报告称,生成式 AI 将在未来两到四年内开始为大多数企业带来可观的投资回报。为了充分受益于生成式 AI 的应用

2023-05-18

项目 专家 Expert:可以提供指导、故障排除和回答其他工程师与 Go 相关的问题 调查的主要发现有: Go 新手开发者对使用 Go 进行 Web 开发表现出了更大的兴趣。 错误处理和学习是受访者面临的最大挑战。历史上,缺乏泛

2023-07-18

GDI region 的新实现。虽然这是一个小的实验性功能,微软工程师表示将继续增加 Rust 在内核中的使用。 今年 3 月份,Windows 操作系统安全总监 David “dwizzle” Weston 在以色列特拉维夫的 BlueHat IL 2023 上宣布 Rust 进入操作系统内核