2016 Rust 现状调查

2016 年 6 月 30 日 · Jonathan Turner

我们最近完成了针对 Rust 社区的调查。我们没想到它会成为规模最大的语言社区调查之一。非常感谢参与回复的 **3,086** 人!我们对收到的回复深感荣幸,并感谢所有宝贵的反馈意见。

调查的目标很简单:我们想了解 Rust 在其第一年的表现如何。我们问了各种问题,以便更好地了解 Rust 的使用情况、Rust 工具的运行情况,以及那些想要采用 Rust 的人面临的挑战。

我们计划每年进行类似的调查,以追踪我们的进展并找出可以改进的地方。话不多说,让我们开始吧。

您使用 Rust 吗?

我们想确保这项调查对 Rust 用户和不使用 Rust 的人都开放。Rust 用户让我们了解当前语言和工具的运行情况以及我们需要改进的地方。Rust 非用户则阐明了 Rust 采用过程中缺失的使用场景和障碍。

Do you use Rust

我们很高兴地报告,超过三分之一的回复来自不使用 Rust 的人。这些回复者提供了很多关于采用障碍的宝贵反馈,我们将在本篇博客文章后面讨论。

尝试 Rust 的人数正在增长

Time using Rust

近 2000 人回复表示他们是 Rust 用户。其中,近 24% 是新用户。看到这一点令人鼓舞。社区正在成长,相当一部分新人正在尝试 Rust,他们可能会成为长期用户。

同样令人鼓舞的是,一旦有人成为 Rust 用户,他们往往会留下来并继续使用它。如果用户很快感到失望并转而使用其他技术,人们可能会预期会有急剧下降。相反,我们看到了截然不同的情况。新用户在初次体验后留下来,倾向于长期使用,使用 3 到 12 个月(我们首次发布 1.0 版本时)之间的用户分布相当均匀。我们在查看 crates.io 使用情况以及 StackOverflow 开发者调查时也看到了类似的模式。

使用 Rust

我们问了许多问题,试图清晰了解今天使用 Rust 的体验。首先的问题集中在 Rust 编译器上。

Versions of Rust you use

在上图中,您看到的是 Rust 用户编写 Rust 时最受欢迎的五种 rustc 版本组合。在调查时,版本 1.8 是最新的稳定版本。这在结果中占很大比重,是使用最流行的 Rust 版本。也许令人惊讶的是,每夜构建版本对于许多开发者来说也发挥了关键作用,有超过 400 人将其作为唯一的 Rust 编译器版本。稳定特性和 API,从而鼓励转向稳定通道,仍然是团队的优先事项。

Has an upgrade broken code

在 1.0 版本之前,Rust 版本发布经常会破坏用户的代码。达到 1.0 版本后,我们开始发布与 1.0 保持向后兼容的版本。对于稳定版 Rust,83.6% 的用户在升级到下一个稳定版本时,他们的项目没有遇到任何破坏性的变化。之前基于对生态系统进行自动化测试的研究将这个数字定在 接近 96%,这更符合预期。

为什么会出现差异?更仔细地查看数据,人们似乎将这个问题视为所有类型破坏的笼统归纳,包括 Cargo 中的包、需要更新的编译器插件以及对 libc 的更改。我们将来一定会更清楚地措辞这个问题。但我们也计划发起一个论坛讨论,进一步深入探讨细节,以确保针对 crates.io 运行的自动化测试没有遗漏任何内容。

Fixing broken code

幸运的是,无论破坏属于哪一类,在用户升级时,它们大多很容易解决。

Do you like Cargo

Rust 开发体验的另一重要部分是使用 Cargo 工具。在这里我们看到了对 Cargo 的压倒性支持,94.1% 的人表示会将其评为 4 或 5 分。这有助于强调 Cargo 仍然是编写 Rust 的核心组成部分(并且人们喜欢使用它!)。

工作中使用 Rust

编程语言成功的重要组成部分是它被用于“实际”工作。我们问了一些问题,以便了解 Rust 在工作场所的表现如何。人们在日常工作中使用它吗?使用量有多少?

Using Rust at work

我们惊喜地看到,在 Rust 的第一年,已经有 16.1% 的 Rust 用户兼职在工作中使用 Rust,3.7% 全职在工作中使用。总计,**近五分之一的 Rust 用户在商业上使用 Rust**。这在越来越多的 使用 Rust 的公司 中得到了体现。

我们还询问了 Rust 开发者正在构建的代码库的大小。

Size of part-time codebases

Size of full-time codebases

随着开发者将更多时间投入到工作中的 Rust,项目规模数字强劲。超过一半在工作中使用 Rust 的全职用户拥有数万或数十万行代码的代码库。

同样令人鼓舞的是,我们预计 Rust 在工作场所的增长,正如我们在下一张图表中看到的。

Using Rust at work in future

在目前不在工作中使用 Rust 的人中,超过 40% 计划将来能够在工作中使用 Rust。这将有助于将 Rust 带到更多地方和更多领域。说到带到更多领域,我们在调查中看到了广泛的职业领域代表。

Demographics of work areas

令人鼓舞的是看到来自如此多不同背景的人对 Rust 感兴趣。这强调了 Rust 在广泛编程任务中的潜力,以及支持这些领域的库的需求。

Rust 面临的挑战

调查的重要部分是了解是什么阻碍了人们使用 Rust。这些数据可以帮助指导我们来年的工作重点。这里有超过 **1,900** 人回复,为我们提供了关于使用和推广 Rust 挑战的详细图景。虽然我们将在后续的博客文章中探讨这些回复,但在这里我们将关注反馈中的三个主要主题:学习曲线、语言和库的成熟度不足以及工具的成熟度不足。

学习曲线

Rust 是一门独特的语言,引入了新的概念,如所有权,在其他语言中通常不明确。虽然这些概念使得 Rust 如此强大,但它们在初次接触这门语言时也可能成为障碍。

总计,在谈论 Rust 的挑战时,**四分之一** 的人提到了学习曲线。以下是一些评论:

“借用检查器对于初学者来说很难理解。”

“借用系统,虽然强大,但学习起来可能很难。”

“初期学习曲线陡峭”

这已经成为了一个挑战。Rust 要想发展得好,需要在保留现有能力的同时,改进语言的学习体验和掌握其所有权系统的体验。在这方面有一些早期倡议,包括一本 新的 Rust 书籍、一本即将出版的 O'Reilly 书籍、改进 Rust 错误消息,以及对借用检查器的改进,以便 减少误报警告。我们预计学习曲线和开发者生产力将是持续关注的重点领域。

语言和库的成熟度不足

在评论 Rust 挑战的人中,**九分之一** 的人提到 Rust 语言相对不成熟是一个因素。虽然有些人指出了他们最喜欢的缺失特性,但共识集中在需要将生态系统转移到稳定语言上,并摆脱对编译器每夜构建版本的依赖。

“一个主要的障碍是,许多 crate 只有在使用每夜构建版本的编译器时才能发挥最佳效果”

“我不喜欢为了使用 serde 解析 JSON 而必须依赖每夜构建版本和 build.rs。这需要更简单。”

“我还发现自己无法使用很多看起来不错的 crate,因为许多 crate 因为使用了特性而锁定在每夜构建版本上。”

虽然总是会有一部分用户想要走在最前沿并使用每一个新特性,但很明显,随着 Rust 的成熟,它需要围绕稳定语言和编译器构建更多基础设施。

与语言密切相关的是库。人们常常同时提到两者,认为 Rust 编程体验是建立在语言和库的结合之上的。总计,**七分之一** 的评论者提到了库的缺乏。人们提到的库种类繁多,在主题方面涵盖了 GUI、科学/数值计算、序列化支持、Web/网络、异步 I/O、并行/并发模式以及更丰富的数据结构(包括更多容器和更广泛的通用算法)等领域。

当然,在第一年出现成熟度不足是意料之中的,在某种程度上,这是只有时间才能解决的问题。但也有一种感觉,来到 Rust 的人希望获得一种更“开箱即用”(batteries included)的体验,将生态系统中最好的部分汇集在一个简单的包中。目前有一些正在进行的提案,关于如何最好地构建这种体验,我们期待在接下来的几周内讨论这些想法。

工具的成熟度不足

另一个强烈的改进主题是 Rust 工具的相对不成熟。虽然 Cargo 等工具对许多 Rust 用户来说是无价的,但其他工具需要关注。

在不使用 Rust 的人中,**四分之一** 的人回复说他们目前不使用 Rust 是因为缺乏强大的 IDE 支持。正如一位用户所说:“对于像 Rust 这样复杂的语言,良好的编辑器工具使学习过程更具互动性。”现代 IDE 已成为探索陌生 API、不熟悉的语言特性和不熟悉的错误消息的有力工具。

投入 IDE 支持不仅帮助新用户,还有助于团队迁移到 Rust 以及更大代码库的增长,正如我们在一些关于 Rust 挑战的引述中所看到的:

“在有 IDE 支持之前,我不会使用这种语言,我知道其他开发者也有同感。无论你们语言的语法多么高效,我在一个较差的语言中,只要编辑器有代码补全,我就能更高效。”

“考虑切换语言的用户/项目通常不愿意牺牲工具质量,即使是为了更好的语言。”

“适当的 IDE 支持(因此很难在工作场所被接受)”

其他语言花了很多年时间来建立其工具链的力量,Rust 要想与之平等,我们也必须建立自己的力量。这里有一些早期尝试,即 Racerrustw,以及 许多 IDE 插件

我们也在投资其他工具链的力量,包括一个 支持交叉编译的新安装程序。这仅仅是第一步,我们将在后续的博客文章中探讨更多想法。

调查人口统计

Popular meetup locations

今天,Rust 拥有全球受众。Rust 用户分布在欧洲、日本、澳大利亚,而不是集中在一个地方,每天都有新的聚会出现。我们还询问了回复者居住在哪里,在 3000 份调查回复中,超过 1000 份提到居住在欧洲(美国紧随其后,为 835 份)。

Demographics on programming language background

大多数现代语言的“祖先”,C 和 C++,在人们最熟悉的编程语言方面表现强劲。紧随其后的是 Java 和 JavaScript。也许这里有一个令人惊讶的点,那就是大量 Python 用户被 Rust 吸引。

对于那些已经在其他语言中有现有项目但想使用 Rust 的人,这里值得一提的是正在进行的帮助将 Rust 与其他语言一起使用的努力,包括与 Ruby 集成 和与 JavaScript/Node.js 集成 的工作。

Members of underrepresented groups

Rust 努力成为一个 热情、受欢迎且包容的社区。调查显示,尽管有这种精神,我们在多样性方面还有很长的路要走。我们有初步的努力,例如 RustBridge,更积极地接触代表性不足的群体,使 Rust 更易于接触,但还有很多工作要做。我们将密切关注这部分调查的结果,并继续投入外展、指导和领导力建设,以促进包容性。

温暖的感觉

在调查结束时,我们加了一个包罗万象的问题:“您还有其他想告诉我们的吗?”与其说是需要查看的大量额外内容,我们收到了来自社区的巨大支持。

我将让一些引述来说明一切:

“Rust 为我带来了令人难以置信的生产力提升。非常感谢,请继续保持!”

“谢谢你们让 Rust 如此出色!”

“在 Rust 社区工作是一次令人惊奇的经历。”

我们再同意不过了。在 Rust 中工作最好的事情之一是,你是一个社区的一员,人们一起努力创造一些了不起的东西。非常感谢 (!!) 所有为 Rust 做出贡献的人。Rust 今天的成就是因为有你们。

我们很想听听您的评论,并邀请您加入并参与即将就我们如何应对本次调查中提出的挑战的讨论。