【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

基础设施SIG月度动态:龙蜥官网新增CSDN第三方账号登录,内核CI新增测试任务停止功能

OpenAnolis小助手

开源 基础设施 内核 abs 龙蜥sig

火山引擎 DataLeap 构建Data Catalog系统的实践(三):关键技术与总结

字节跳动数据平台

企业号 7 月 PK 榜

[低代码平台、国产化]基于JPA的简易伪低代码模块

alexgaoyh

jpa 国产化 低代码开发平台 QUERYDS 动态列搜索

手把手教你落地大模型应用创意!全新AI达人创造营限时招募

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

如何用java校验SQL语句的合法性?(提供五种解决方案)

EquatorCoco

Java 教程 SQL语句

安装使用舞台租赁LED显示屏的8大事项

Dylan

测试 安装 结构 LED显示屏

如何写好代码

阿里技术

代码 如何写好代码

达观曹植大模型正式对外公测!专注于长文本、多语言、垂直化发展

NLP资深玩家

大模型 达观数据 曹植大语言模型

袋鼠云产品功能更新报告06期|数栈产品功能升级,做产品我们是认真的!

袋鼠云数栈

大数据 产品 数据中台

机器学习之PyTorch和Scikit-Learn第3章 使用Scikit-Learn的机器学习分类器之旅Part 1

Alan

人工智能 机器学习 PyTorch scikit-learn

长达 1.7 万字的 explain 关键字指南!

不在线第一只蜗牛

sql 关键字 教程

Web前端常用的组态软件工具(可视化)

2D3D前端可视化开发

JavaScript web前端 组态软件 前端可视化 组态工具

ES 数据太敏感不让看,怎么办?

极限实验室

ES hash 数据脱敏; 敏感数据 正则脱敏

10大功能特性,助力开发者玩转华为云API Explorer

华为云PaaS服务小智

API 华为云 华为开发者大会2023

Netty入门之可写事件以及多线程版的通信

派大星

【会议】《卧龙:苍天陨落》制作人山际真晃与总监平山正和将联袂出席 2023 中国游戏开发者大会(CGDC)

CGDC中国游戏开发者大会

设计 开发 游戏开发 ChinaJoy

智能网卡在分布式 SDN 网络的应用与实践 | 龙蜥技术

OpenAnolis小助手

云计算 sdn 龙蜥大讲堂 浪潮数据 智能网卡

如何有效检测、识别和管理 Terraform 配置漂移?

SEAL安全

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