PCon全球产品创新大会开幕在即,查看大会全部精彩内容这里直达 了解详情
写点什么

为什么 Rust 是初创公司的绝佳选择

The Daily Edit

  • 2022 年 6 月 26 日
  • 本文字数:2899 字

    阅读完需:约 10 分钟

为什么 Rust 是初创公司的绝佳选择

本文最初发布于 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

 

2022 年 6 月 26 日 22:036154

评论 4 条评论

发布
用户头像
初创公司基本上都是php呀!文档多,开源多,二次开发快。这文章不是瞎扯吗
2022 年 07 月 03 日 18:04
回复
用户头像
Infoq是退步了么
2022 年 06 月 29 日 19:41
回复
用户头像
居然全盘不提 PHP
2022 年 06 月 28 日 09:05
回复
用户头像
居然全盘不提 go
2022 年 06 月 27 日 08:36
回复
没有更多了
发现更多内容

自动驾驶感知功能一般都有啥?(28天写作 Day9/28)

mtfelix

自动驾驶 28天写作

28天瞎写的第二百二十天:独立设计维哈柯文云输入法的故事

树上

28天写作

生产服务器内存泄漏的排查过程与优化解决方案

冰三郎

Java jdk 问题排查 jetty

使用DevSecOps保护CI / CD管道

啸天

DevSecOps 应用安全 开发安全

第十三周作业

Jack

Redis 学习笔记 05:整数集合

架构精进之路

redis 七日更 28天写作

读《一入阿里“误终生”》,我喜欢上了小马哥

李忠良

28天写作

架构师训练营第十三周作业

丁乐洪

聊聊“公平感”

熊斌

学习 企业文化 管理 管理工具 28天写作

HDFS杂谈:ACL访问控制列表

罗小龙

hadoop hdfs acl 28天写作

项目管理系列(4)-另类减肥法

Ian哥

28天写作

药物研发的商业模式问题

lidaobing

28天写作 药物研发

股票作手回忆录读书笔记

.

28天写作

mvn install & mvn package

哼干嘛

微信视频号知识地图 | 视频号28天(10)

赵新龙

28天写作

【CSS】多重边框

德育处主任

CSS css3 html/css CSS小技巧 28天写作

性能优化-3

raox

实时数仓|架构设计与技术选型

大数据老哥

大数据 实时数仓

不确定怎么选择,该怎么办?

Justin

不确定性 心理学 决策 28天写作

架构师训练营第 13 周学习总结

菜青虫

春天到底会在何时抵达「幻想短篇 9/28」

道伟

28天写作

Reactive Spring实战 -- WebFlux使用教程

binecy

响应式编程 Reactive Spring

Windows文件夹还能更改颜色?

程序员的时光

程序员 七日更 28天写作

精选算法面试-哈希表

李孟

面试 算法 哈希 28天写作

第二课@听课笔记

糯米~

Spring源码-@Configuration注解解析

魔曦

日语复习 Day03【~あまり(に)】

IT蜗壳-Tango

程序员 七日更 日语语法

智能合约业务场景探索(一)

石君

智能合约 28天写作

绩效管理,上下同心者胜(一)

一笑

管理 绩效 28天写作

概率论DEMO

rainbow

关于产品研发管理-《培思的力量》

Man

数字化转型 产品研发

金融行业数据库架构实践与运维

金融行业数据库架构实践与运维

为什么 Rust 是初创公司的绝佳选择_语言 & 开发_InfoQ精选文章