东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

为什么 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:038273

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

大咖说·图书分享 | 精益产品开发:原则、方法与实施

大咖说

产品开发 落地方法

大型仿人机器人整机构型研究与应用

优必选科技

机器人

我们被一个 kong 的性能 bug 折腾了一个通宵

尔达Erda

程序员 运维 云原生 性能 bug

超越 Nginx!号称下一代 Web 服务器,用起来够优雅

冉然学Java

Java nginx GitHub 服务器 Web、

担心 GitHub?那就试试极狐GitLab 吧

极狐GitLab

git GitHub 开源 DevOps gitlab

使用python玩转文字类视频

技能实验室

签约计划第三季

TDengine 落地协鑫能科,数百亿数据压缩至 600GB

TDengine

数据库 tdengine 时序数据库

Plato Farm有望通过Elephant Swap,进一步向外拓展生态

小哈区块

双屏协作效率翻倍 灵耀X双屏Pro引领双屏科技新潮流

科技热闻

兆骑科创高端人才项目引进落地,双创大赛承办,线上直播路演

兆骑科创凤阁

双创大赛承办

AOP切入点表达式及五种通知类型解析

王小凡

一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持

网络安全 经验分享 签约计划第三季

如何通过ETL调度工具 TASKCTL 使用作业插件类型调用 kettle作业?

TASKCTL

数据仓库 kettle ETL #运维 TASKCTL

spark-streaming状态流之mapWithState

矛始

spark 状态流

Plato Farm有望通过Elephant Swap,进一步向外拓展生态

西柚子

次轮Okaleido Tiger即将登录Binance NFT,引发社区热议

西柚子

Java 将OFD转换为PDF

在下毛毛雨

Java PDF OFD 格式转换

DevSecOps,让速度和安全兼顾

SoFlu软件机器人

带你熟悉云网络的“电话簿”:DNS

华为云开发者联盟

云计算 后端 IP DNS 局域网

1对1直播源码——1对1语音聊天源码

开源直播系统源码

直播系统源码 语音聊天系统软件开发 一对一语音聊天软件

智能家居行业发展,密切关注边缘计算和小程序容器技术

Speedoooo

智能设备 边缘计算 智能家居 小程序容器

什么是传输层协议TCP/UDP???

C++后台开发

TCP 网络协议 udp 后端开发 C/C++开发

BSN IPFS(星际文件系统)专网简介、功能、架构及特性、接入说明

BSN研习社

BSN 分布式存储,

一文详解 Redis 中 BigKey、HotKey 的发现与处理

冉然学Java

Java redis 微服务 bigkey HotKey

共议公共数据开放,“数牍方案”亮相数字中国建设峰会

Jessica@数牍

隐私计算 数牍科技 公共数据开放

Qakbot新型感染链:使用Windows7系统侧加载感染设备

郑州埃文科技

dll Windows7 Qakbot

技术风向标 | 云原生技术架构成熟度模型解读

阿里巴巴云原生

阿里云 云原生 成熟度模型

netty入门之服务端启动过程分析

Hex

Java 后端 Netty

敏捷开发与DevOps的对比

码语者

DevOps 敏捷

实践GoF的23种设计模式:观察者模式

华为云开发者联盟

Web 设计模式 开发 GoF

研发效能的道与术 - 道篇

FreeW

架构 研发效能

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