我们最近完成了对 Rust 社区的调查。我们没想到它会成为规模最大的编程语言社区调查之一。衷心感谢 **3,086** 位参与调查的开发者!我们对如此热烈的反响感到十分荣幸,并感谢大家提供的宝贵反馈。
调查的目标很简单:我们想知道 Rust 在其发布的第一年里表现如何。我们提出了各种问题,以更好地了解 Rust 的使用方式、Rust 工具的有效性以及人们采用 Rust 所面临的挑战。
我们计划每年进行类似的调查,以跟踪我们的进展并找出可以改进的地方。好了,让我们开始吧。
你使用 Rust 吗?
我们希望确保调查对 Rust 用户和非 Rust 用户都开放。Rust 用户可以让我们了解当前的语言和工具的运行情况以及需要改进的地方。非 Rust 用户则可以让我们了解 Rust 尚未覆盖的使用场景以及阻碍 Rust 采用的障碍。
我们很高兴地报告,超过三分之一的调查回复来自非 Rust 用户。这些受访者对采用 Rust 的障碍提出了许多宝贵的反馈,我们将在本文后面进行讨论。
越来越多人尝试 Rust
近 2,000 人回复说他们是 Rust 用户。其中,近 24% 是新用户。这是一个令人鼓舞的现象。社区正在不断壮大,越来越多的新人开始尝试 Rust,他们可能会成为长期用户。
同样令人鼓舞的是,一旦有人成为 Rust 用户,他们往往会继续使用它。如果用户很快对 Rust 失去兴趣并转向其他技术,我们可能会看到用户数量急剧下降。然而,我们观察到的情况恰恰相反。那些在最初体验后继续使用 Rust 的用户往往会成为长期用户,在 3 个月到 12 个月(我们发布 1.0 版本的时间)之间分布较为均匀。我们在 crates.io 的使用情况以及 StackOverflow 开发者调查 中也观察到了类似的模式。
使用 Rust
我们提出了一些问题,试图清楚地了解当今使用 Rust 的体验。第一个问题集中在 Rust 编译器上。
在上图中,您可以看到 Rust 用户使用 Rust 编写代码时排名前五的 rustc 版本组合。在进行调查时,版本 1.8 是最新的稳定版本。由于它是使用最广泛的 Rust 版本,因此在结果中占据了很大比例。也许令人惊讶的是,nightly 版本在许多开发者中也扮演着关键角色,超过 400 人将其作为唯一的 Rust 编译器版本。稳定化特性和 API,并鼓励开发者迁移到稳定通道,仍然是团队的优先事项。
在 1.0 版本发布之前,Rust 版本经常会破坏用户的代码。在发布 1.0 版本后,我们开始发布与 1.0 版本保持向后兼容的版本。对于稳定版本的 Rust,83.6% 的用户在升级到下一个稳定版本时没有遇到任何代码破坏问题。之前基于自动化测试对生态系统进行的研究表明,这个数字 更接近 96%,这更符合预期。
为什么会出现差异?仔细查看数据后,我们发现人们将这个问题用作任何类型代码破坏的总称,包括 Cargo 包、需要更新的编译器插件以及 libc 的更改。我们将在未来确保更清楚地措辞这个问题。但我们也计划启动一个论坛讨论,深入探讨细节,以确保自动化测试中没有遗漏针对 crates.io 运行的测试。
幸运的是,无论代码破坏属于哪种类型,人们在升级时都能够轻松解决。
Rust 开发体验的另一个重要部分是使用 Cargo 工具。我们发现 Cargo 获得了压倒性的支持,94.1% 的人表示他们会给它打 4 分或 5 分。这有助于强调 Cargo 仍然是 Rust 编程的核心部分(并且人们喜欢使用它!)。
Rust 在工作中
编程语言成功的关键在于它被用于“实际”工作。我们提出了一些问题,以了解 Rust 在工作场所的表现如何。人们在日常工作中使用它吗?使用程度如何?
我们很高兴地发现,在 Rust 发布的第一年,已经有 16.1% 的 Rust 用户在工作中兼职使用 Rust,3.7% 的用户在工作中全职使用 Rust。总的来说,**近五分之一的 Rust 用户在商业领域使用 Rust**。我们在越来越多的 使用 Rust 的公司 中看到了这一点。
我们还询问了 Rust 开发者构建的代码库的大小。
我们看到,随着开发者在工作中投入更多时间使用 Rust,项目规模也显著增长。超过一半在工作中全职使用 Rust 的 Rust 用户拥有数十万甚至数百万行代码的代码库。
同样令人鼓舞的是,我们预计 Rust 在工作场所的使用会继续增长,正如下一张图表所示。
在目前没有在工作中使用 Rust 的用户中,超过 40% 的人计划在工作中使用 Rust。这将有助于将 Rust 推广到更多地方和更多领域。说到推广到更多领域,我们在调查中看到了来自各种工作领域的参与者。
看到来自如此多不同背景的人对 Rust 感兴趣,这令人鼓舞。它突出了 Rust 在广泛的编程任务中的潜力以及对支持这些领域的库的需求。
Rust 面临的挑战
调查的一个重要部分是了解哪些因素阻碍了人们使用 Rust。这些数据可以帮助我们在未来一年中集中精力。超过 **1,900** 人对这个问题做出了回复,为我们提供了有关使用和推广 Rust 所面临挑战的详细情况。虽然我们将在接下来的博客文章中探讨这些回复,但在这里我们将重点介绍反馈中的三个主要主题:学习曲线、语言和库的不成熟以及工具的不成熟。
学习曲线
Rust 是一种独特的语言,它引入了许多在其他语言中通常不会明确表达的概念,例如所有权。虽然这些概念是 Rust 如此强大的原因,但它们也可能成为初学者学习该语言的障碍。
总的来说,**四分之一** 的人提到学习曲线是 Rust 挑战之一。以下是一些评论:
"借用检查器对于初学者来说很难理解。"
"借用系统虽然功能强大,但学习起来可能很困难。"
"一开始的学习曲线很陡峭。"
挑战已经摆在面前。为了让 Rust 取得成功,它需要在保留其强大功能的同时,改善学习语言和掌握其所有权系统的体验。目前已经有一些早期举措,包括 新的 Rust 书籍、即将出版的 O'Reilly 书籍、对 Rust 错误消息 的改进以及对借用检查器的改进,以 减少误报。我们预计学习曲线和开发者生产力将成为持续关注的领域。
语言和库的不成熟
在评论 Rust 挑战的人中,**九分之一**的人提到了 Rust 语言的相对不成熟是一个因素。虽然有些人指出了他们最喜欢的缺失功能,但共识形成了围绕将生态系统迁移到稳定语言,并不再需要编译器的 nightly 版本。
"一个主要障碍是,如果使用 nightly 编译器,有多少 crate 仍然只展示其最佳功能"
"我不喜欢使用 nightly 以及 build.rs 来解析带有 serde 的 json。它需要更简单。"
"我还发现自己无法使用许多看起来不错的 crate,因为许多 crate 由于功能使用而被锁定在 nightly 上。"
虽然总会有一个用户子集想要生活在技术前沿并使用每个新功能,但很明显,随着 Rust 的成熟,它需要围绕稳定语言和编译器构建更多基础设施。
与语言密切相关的是库。人们经常在同一句话中提到两者,将 Rust 编程体验视为建立在语言和库组合之上的体验。总的来说,**七分之一**的评论者提到了库的缺乏。人们提到的库类型在主题方面涵盖了整个范围,涵盖了 GUI、科学/数值计算、序列化支持、Web/网络、异步 I/O、并行/并发模式以及更丰富的数据结构(包括更多容器和更广泛的通用算法覆盖范围)。
当然,不成熟是在一年内可以预期的,在某种程度上,这是一个只有时间才能解决的问题。但人们也有一种感觉,来到 Rust 的人想要更多“包含电池”的体验,将生态系统中最好的部分整合到一个简单的包中。目前有一些关于如何最好地构建这种体验的提案,我们期待在未来几周内讨论这些想法。
工具的不成熟
另一个强烈的改进主题是 Rust 工具的相对不成熟。虽然像 Cargo 这样的工具对许多 Rust 用户来说非常宝贵,但其他工具需要关注。
在非 Rust 用户中,**四分之一**的人回应说,他们目前没有使用 Rust,因为缺乏强大的 IDE 支持。正如一位用户所说,“[f]or a complex language like Rust, good editor tooling makes the learning process interactive." 现代 IDE 已成为探索不熟悉 API、不熟悉语言功能和不熟悉错误消息的强大方式。
投资 IDE 支持不仅有助于新用户,还有助于使团队迁移到 Rust 以及大型代码库的增长,正如我们在一些关于 Rust 挑战的引文中看到的那样
"在有 IDE 支持之前,我不会使用这种语言,我知道其他开发人员也有同样的感觉。虽然你的语言的语法很有效率,但我使用一个有代码补全功能的编辑器,在更糟糕的语言中效率更高。"
"正在考虑切换语言的用户/项目通常不愿意为了更好的语言而牺牲工具质量。"
"适当的 IDE 支持(很难让它在工作中被接受,原因就是这个)"
其他语言已经花费了数年时间来构建其工具肌肉,为了让 Rust 站在同等地位,我们也必须构建自己的肌肉。这里有一些早期的实验,即 Racer 和 rustw,以及 一些 IDE 插件。
我们还在投资其他工具肌肉,包括一个 具有交叉编译支持的新安装程序。这些只是第一步,我们将在接下来的博客文章中探索更多想法。
调查人口统计
如今,Rust 拥有全球受众。我们看到 Rust 用户分布在欧洲、日本、澳大利亚,每天都有新的聚会涌现,而不是集中在一个地方。我们还询问了受访者居住地,在 3000 份调查回复中,超过 1000 人提到了居住在欧洲(美国紧随其后,为 835 人)。
大多数现代语言的鼻祖,C 和 C++,在人们最熟悉的编程语言方面表现突出。紧随其后的是 Java 和 JavaScript。也许这里一个令人惊讶的点是,大量 Python 用户被 Rust 所吸引。
对于那些已经在其他语言中拥有现有项目但想要使用 Rust 的人来说,值得一提的是,正在进行的努力旨在帮助将 Rust 与其他语言一起使用,包括与 Ruby 集成 和 与 JavaScript/Node.js 集成 的工作。
Rust 努力成为一个 温暖、欢迎和包容的社区。调查显示,尽管有这种精神,我们在多样性方面还有很长的路要走。我们有一些新兴的努力,比如 RustBridge,更积极地接触弱势群体,使 Rust 更容易获得,但还有很多工作要做。我们将密切关注调查这部分的结果,并继续投资于外联、指导和领导,以培养包容性。
温暖的感觉
在调查结束时,我们添加了一个万能问题:“您还有什么想告诉我们吗?”我们收到了社区的大量支持,而不是一大堆需要查看的额外内容。
我将让一些引语自己说话
"Rust 对我来说是一个令人难以置信的生产力福音。非常感谢,并继续努力!"
"感谢您让 Rust 变得很棒!"
"在 Rust 社区工作是一段奇妙的经历。"
我们完全同意。在 Rust 工作中最好的事情之一是,您是社区中的一部分,社区中的人们共同努力构建一些很棒的东西。非常感谢(!!)所有为 Rust 做出贡献的人。Rust 就是因为你们而存在。
我们很乐意听取您的意见,并邀请您加入即将进行的讨论,讨论我们如何应对本调查中提出的挑战。