我们最近完成了对 Rust 社区的调查。我们万万没想到,这次调查会成为规模最大的语言社区调查之一。非常感谢 3,086 位参与调查的朋友!我们对大家的热烈响应感到荣幸,并感谢大家提供的宝贵反馈。
本次调查的目标很简单:我们想了解 Rust 在第一年的发展情况。我们提出了一系列问题,以更好地了解 Rust 的使用方式、Rust 工具的运行情况以及人们在采用 Rust 时面临的挑战。
我们计划每年进行一次类似的调查,以跟踪我们的进展并找出需要改进的地方。现在,让我们开始吧。
您是否使用 Rust?
我们希望确保本次调查对 Rust 用户和未使用 Rust 的人都开放。Rust 用户可以让我们了解当前语言和工具的运行情况以及我们需要改进的地方。Rust 的非用户则可以阐明 Rust 缺失的用例和采用 Rust 的障碍。
我们很高兴地报告,超过三分之一的回复来自未使用 Rust 的人。这些受访者提供了大量关于采用障碍的宝贵反馈,我们将在本博客文章的后面部分讨论这些反馈。
尝试 Rust 的人数不断增长
近 2000 人回复说他们是 Rust 用户。其中,近 24% 是新用户。这令人鼓舞。社区正在发展壮大,许多新来者正在尝试 Rust,他们可能会成为长期用户。
同样令人鼓舞的是,一旦有人成为 Rust 用户,他们往往会坚持下去并继续使用它。如果用户很快就感到失望并转向其他技术,可能会出现大幅下降。但相反,我们看到的是相反的情况。在最初体验后加入并留下的用户往往会长期留下来,3 个月到 12 个月(我们第一次发布 1.0 版本时)之间的分布相当均匀。我们在查看 crates.io 的使用情况以及 StackOverflow 开发者调查时也看到了类似的模式。
使用 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(全职)。总而言之,近 1/5 的 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 编译器,那么很多 crates 仍然只会发挥它们的最大优势”
“我不喜欢必须使用 nightly 加 build.rs 来使用 serde 解析 json。它需要更简单。”
“我还发现自己无法使用很多看起来不错的 crates,因为许多 crates 因使用功能而锁定在 nightly 上。”
虽然总会有一部分用户希望走在前沿并使用每个新功能,但很明显,随着 Rust 的成熟,它需要在稳定的语言和编译器周围构建更多的基础设施。
与语言密切相关的是库。人们经常在同一个句子中同时提到两者,认为编程 Rust 的体验是建立在语言和库的组合之上的。总而言之,七分之一的评论者提到了缺少库。人们提到的库的种类繁多,涵盖了诸如 GUI、科学/数值计算、序列化支持、Web/网络、异步 I/O、并行/并发模式以及更丰富的数据结构(包括更多容器和更广泛的一般算法覆盖范围)等领域。
当然,在第一年,不成熟是意料之中的,并且在某种程度上是一个只能由时间解决的问题。但是,人们也有一种感觉,即使用 Rust 的人希望获得更多“包含电池”的体验,将生态系统中最优秀的部分收集到一个简单的包中。目前有一些关于如何最好地构建这种体验的提案,我们期待在未来几周内讨论这些想法。
工具的不成熟
另一个需要改进的主要主题是 Rust 工具的相对不成熟。虽然像 Cargo 这样的工具对许多 Rust 用户来说是宝贵的,但其他工具需要关注。
在非 Rust 用户中,四分之一的人表示他们目前没有使用 Rust,因为缺乏强大的 IDE 支持。正如一位用户所说,“[对于像 Rust 这样复杂的语言,良好的编辑器工具可以使学习过程具有互动性。”现代 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 之所以如此,是因为你们。
我们很乐意听到您的意见,并邀请您加入并参与即将进行的关于如何应对本次调查中提出的挑战的讨论。