最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

The Daily Edit

  • 2022-06-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-06-26 22:038280

评论 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
回复
没有更多了
发现更多内容

模块五设计微博评论高性能高可用计算架构

kitten

linux 工具之perf

webrtc developer

不会被开除吧?一顿饭换来“字节”面试题库Java岗,刷完直接入职大厂

Java架构师迁哥

校招失败,在小公司熬了2年后我终于进了字节跳动,竭尽全力(Java岗)

今晚早点睡

Java 编程 字节跳动 面试 计算机

阿里 Java 二面必问:8张图带你解决所有TCP可靠传输问题

编程 面试 TCP 网络 计算机

「模块化安装」,定义你自己的CloudQuery

BinTools图尔兹

sql 数据安全 数据库管理 polarDB

模块五作业

燕燕 yen yen

架构实战营

浪潮云说直播间丨智能运维专题来了!

浪潮云

云计算

微博评论场景高性能高可用架构

张文龙

#架构实战营

leetcode 最常见的前端基础算法面试题(上)

前端依依

面试 大前端 力扣 算法题 初阶

架构实战训练营模块五作业

Clarke

解决“百万富翁问题”—隐私比较高效算法解读

趣链科技

隐私计算 安全多方计算

架构实战营-模块5-作业

Cingk

架构实战营1期模块5作业——高性能计算架构

tt

架构实战营

音视频demo| 不一样的AR Call

anyRTC开发者

uni-app 音视频 移动开发 uni-app demo

Handler简单入门

W🌥

android 8月日更 Handler

前端基础三之JavaScript基础

ベ布小禅

8月日更

灵活且有趣,10分钟落地翻译能力,1分钟插件化

明道云

“人工智能+蛋白质组学”成科研热点课题,云计算发挥重要作用

北鲲云

实时语音质量监控

声网

crudapi增删改查接口零代码产品成功案例之金茶王投票系统

crudapi

Vue API crud crudapi 投票

我们可能是被工具耽误的一代

非著名程序员

深度思考 认知提升 成长笔记 8月日更

抖音快手截流获客系统软件开发

薇電13242772558

获客达人

HDFS API操作

Mike

干货|后互联网时代,运维工程师的必备性能优化指北

阿里巴巴中间件

阿里云 云原生 中间件

ipfs矿机配置标准如何?ipfs矿机配置带宽要求是什么?

ipfs矿机配置标准如何 ipfs矿机配置带宽要求

上游思维:预见问题的能力,识别真假警报

石云升

读书笔记 8月日更 上游思维

架构实战营模块 5 作业指导

华仔

#架构实战营

区块链钱包系统开发,imtoken去中心化钱搭建

我爬取了爬虫岗位薪资,分析后发现爬虫真香

Python研究者

8月日更

Flutter Android 端 FlutterView 相关流程源码分析

工匠若水

flutter android 8月日更

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