本文最初发布于 The Daily Edit 博客。
在 The Daily Edit,我们有一个小而敏捷的团队,每周都会推出新产品。虽然产生这种节奏的原因有很多,但有一个技术选择提供了很大的帮助,那就是只要可能就使用 Rust。Rust 让我们能够快速而又充满信心地完成公司的任务目标。
在开始这个项目的时候,我们只有三个人。我是团队中唯一的工程师,所以我可以完全自由地选择语言和工具。这理论上听着很不错,但其实非常令人望而生畏!除了在机器学习方面明显可以使用 Python 之外,其他一切都是开放的。我们是否应该选择 Java,因为它令人厌倦?我们应该因为其优秀的社区而选择 Python 吗?或者我们应该全部用 JavaScript 来完成,因为所有东西最终都是用JavaScript完成的?
每个选择都要做各种权衡,所以我一直在兜圈子。是一个简单的问题打破了这种无限循环:哪种选择能够吸引优秀的极客,让我们能够频繁而自信地发布一些内容?
所以这就是我们开始使用 Rust 的原因,以及今天,即使项目成熟了,它仍然是我们成长和成功的驱动力。
背景
在职业生涯中,我涉猎了大量的编程语言、编辑器、工具和方法。我从 1994 年开始摆弄 MS-DOS 自带的 QBasic 和 Gorillas 游戏。之后不久,我学习了 C 语言,并几乎完全在 Unix 平台上工作。然后是 C++、Python、PHP、Ruby,当然还有 JavaScript。其中有一些是我年轻的时候为了好玩,还有一些是我在十几二十岁出头的时候为了赚钱。然后我开始开飞机,编程只是为了好玩。
2015 年,我从 PLT 的一个朋友那里听说了 Rust,并开始接触它。她一直说,Rust 给 PLT 带来了很长一段时间以来第一个真正的“新”东西,就是生命周期语法。我对此持怀疑态度,和许多人一样,我认为 C 语言是最好的系统语言,因为它是如此简单和易于推理。
直到我开始使用 Rust。
我的怀疑很快就消失了。当我意识到,尽管我有丰富的经验和良好的意图,但我在实际使用 C 语言时也难免犯错。不易察觉的内存泄露,释放后使用。当程序小而独立的时候,没什么问题,但当我开始创建和使用库,并向周围不透明的结构传递指针时,就变得混乱了。Rust 让我明白,我并不是我以为的那个程序员。编译器就像一个老派的模拟器教员,不管你做得多好,他永远都嫌不够。我开始了“与借位检查器斗争”的阶段,就像脚趾碰到了墙角,持续的疼痛,一种破碎的感觉。
但这一切很快就过去了。
我花了大约 3 个月的时间才开始使用 Rust。仅是小项目还不够。当我开始开发更复杂的系统(比如有异步行为的分布式作业队列或有 FPGA 接口的嵌入式系统)时,就开始受益了。这就像健身一样,你必须坚持下去才能看到效果。经过这些项目,编译器就不大困扰我了。而且,不管是什么项目,早期的代码组织都变得比较清晰了。这就是 Rust,它可能会让人烦,但也真的会引导你走向一个优秀的架构。
但这还不是最精彩的部分。
最好的地方是在你构建完这个庞大而复杂的系统,并且可以编译器生成一个二进制文件之后。很有效,并且一直有效。Rust 项目所需的调试工作量比我在其他任何地方看到的都要少。有了像标签联合体(Rust 的枚举)这样的特性,就可以非侵犯式地明确指定代码的工作方式。这让你在部署任何东西时都非常有信心。然后是任何项目都有的定期更新和维护。通常,新入职的工程师不得不研究一些他们以前没见过的代码。Rust 提供了护栏。如果他们以一种意想不到的方式与现有代码交互,编译器会告诉他们。
吸引人才
Rust 已经进入了大众使用阶段,有多少文章在赞美它,几乎就有多少文章在揭它的短。这是一个很好的信号,这意味着它正在被使用。我喜欢 Rust 并不奇怪,但其他工程师呢?我们选择 Rust 这种相对小众的语言时,其中一个主要的顾虑是人才库的规模可能太小。问题是,真正的世界级人才关心的是他们能够使用什么工具实现什么想法。
是时候试试水了。我们联系了 This Week in Rust 通讯,刊登了我们的招聘信息。我们是一家偏远地区的公司,我们不关心工程师住在哪里。真是幸运,来自 Twitter 的 Jack Dorsey 在推特上说:“Rust是一种完美的编程语言”。
在接下来的 8 个周里,我收到了近四千名申请人的电子邮件。四千人!许多人实际上根本没有 Rust 开发经验。这很好,他们只是对这个想法感兴趣。我们竟然发现自己拥有一个世界级的工程团队,真是受宠若惊。
我们对 Rust 人才库的担心是不必要的。它是一种能吸引有经验的程序员的语言。
事情搞定
只要可以,我们都使用 Rust。现在,我们的 Web 后端是用 Rust 构建的,我们的后台任务处理器也是 Rust 的,我们分析引擎的调度器呢?你猜对了,还是 Rust。我们唯一不使用 Rust 的地方是在 Rust 生态系统中缺少相关库的时候。还有移动应用,我们使用 Flutter。
经常有人说,Rust 的缺点之一是语法相当繁琐,编写和阅读都非常耗时。其中有一些说法是符合实际的(它比 Python 要啰嗦得多),但很多都是夸大其词。例如,在我们的整个代码库中,手动标注生命周期的次数还不到十次。它在应用程序代码中并不经常出现。
对于 Rust 来说,前期需要做的工作更多。确实,编译器有大量的约束条件要你遵守。然而,这种认知开销,以及实际编写代码所需的时间,会随着经验的一点点积累而迅速减少。只要短短几周的时间,当创业公司在这段时间里经历过无数变化之后,需要做的工作就会减少,而且少很多。我们的团队都认为,阅读 Rust 代码比许多其他语言都简单。没有任何疑问或模棱两可的地方,通过阅读就能清楚地知道程序要做什么。
我们有一个规模非常小的天才工程师团队,代码迭代的速度很快。有了 Rust,我们决定重写整个复杂的模块,并有信心保证它在编译后可以正常工作。有时候,我们也会犯逻辑上的错误,或者对问题的理解不太正确,没有任何一种语言可以避免这种情况,但对于其他每一项需要投入生产应用的东西,Rust 让我们做得更快。
使用 Rust,只要很少的工程师,你们就可以走得很远。
性能
关于 Rust 的任何文章如果没有这一条,都是不完整的,但这也是众所周知的,所以我将长话短说。Rust 速度很快。如果你只是偶尔使用‘clone’或‘Arc’,那么人们所写的关于生命周期的大部分痛苦就会消失,你猜怎么着,它仍然比 Python、Ruby、JavaScript 和 Java 快几个数量级。然后,如果真的要榨取最后一滴性能,那么你可以编写复杂的生命周期。轻松就能写出一些真正拥有出色性能的东西,真是让人高兴。但要知道,其性能的上限比这要高。
这和创业有什么关系呢?高性能意味着使用的服务器少,服务器少意味着运营开销小。作为一家初创公司,如果一开始就把钱花在只能支持每秒几百个请求的服务器上,那么你走不了多远。
通常,人们会这样反驳我:“工程师的时间比电脑的时间更昂贵”,是这样的。但与使用其他语言相比,你并不需要付出更多的工程师时间,而当你实际运行程序时,开销却更低。
很快就能收回成本。
你的初创公司应该使用 Rust 吗?
我不是创业顾问。
我在本文开头写道,为初创公司选择一种语言可能会令人生畏,尤其是当你认为最适合的语言有点小众而且比较年轻的时候。从目前使用 Rust 的经验来看,我们团队不想使用其他任何东西。Rust 可能很难学,但投资回报也极大。
在经验丰富的团队手中,Rust 就像是一种超能力。
在下一篇文章中,我们将讨论使用 Rust 的一些缺点。
查看英文原文:Why Rust is a great choice for startups
评论 3 条评论