“本文为 EuroRust 2022 大会的圆桌讨论,主题为 Rust in reality ,讨论真实世界中 Rust 的应用状况。原视频链接:https://www.youtube.com/watch?v=ubXvKRbULuo,视频也被搬运到了 B 站:https://www.bilibili.com/video/BV11e4y1W7i3/ 。因为本人不会制作视频字幕(或许是因为懒),所以就写文章记录讨论内容了。本文也不是逐句翻译,如有理解错误敬请指正。
“背景:Ferrous System 是一家 Rust 咨询公司。
Florian : 当然可以。哈哈。
我最喜欢的一篇关于编程语言的论文之一是讲「在商业层面,没有人会为实现一些功能而去改变编程语言」,这是一个残酷的现实,但是这种需求是存在的。我和商业投资人都看到的一个点是,现在很多公司都正在重新考虑技术工具栈,想让一切都变得更加快且连接更加紧密。
我们目前已经锚定的一个领域是汽车公司。汽车公司在考虑,“我们不能再进行五年的开发周期了,因为我们需要连到互联网去更新诸如 crash patch 之类的补丁”。而 Rust 语言既方便使用又拥有可靠性的语言,正好是一个新的工具方向。我们只需要选择一个靠谱的工具,而不需要不断地想要更换工具,可以专注在更有趣的事情上。
Luca: 我前东家是一家使用 C# 语言的电子商务网站,大概有100~150名开发人员,并且对 C# 语言有大量投入。几年前(大概 2019年)开始采用 Rust ,预计 2022年底 Rust 开发人员将达到 40~50 名开发力量。
我们选择 Rust 的理由和 Florian 类似。从技术角度看,我们需要更好的领域建模,所以我们需要代数数据类型、需要处理 Null 、需要一种比异常更加易于管理的处理错误的方式。同时,我们需要找到一些在 C# 社区很难找到的某些类型的工程师,但是在 Rust 社区很容易找到。但是我们又遇到了招人的难题,因为 Rust 语言生态非常新,没有那么多 Rust 开发者。但有很多人渴望成为 Rust 开发者,所以,我们也请 Florian 给我们做了很多内部的现场培训。
我们首先将 Rust 用在银行分类账相关的商业案例中,这个场景下,安全和公平很重要,Rust 对正确性的保证足以让我们下决心去尝试新事物。然后我们发现它编写起来并不比我们之前使用的语言难多少,然后 Rust 就在公司内部的开发人员中传播了起来。
Armin: 我们的业务之前都是用 Python 实现的,当时我玩 Rust 也有一段时间了,Rust 已经成为了我的兴趣爱好,因为我决定它很有趣。并且当时我发现自己出于兴趣爱好用 Rust 实现的 source map处理程序比生产环境的Python 实现更加优越。当时 Rust 和 Python 之间的交互已经非常方便。所以我们开始用 Rust 重新实现一些命令行和服务端的交互工作。接下来的几年,越来越多的 Rust 代码就出现在了我们的代码库中。
最初 Rust 带来的好处几乎就是性能提升。但是 Sentry 的核心组件是我们需要处理本地的stack traces,因此当你遇到 iOS 设备或其他设备崩溃时,你需要处理调试信息文件,这个领域大量的历史工具实际上旨在受信任的数据上运行,因此你将拥有自己的在本地运行的调试器,并且你相信你自己的编译器不会创建无效数据。但是如果你处理来自客户的调试符号,那么你会暴露一些固有的风险。Rust 生态系统开始构建越来越多的工具来安全地处理调试信息,我们也对此做了一些贡献。我很确定,我们除了一些非常小的组件之外,现在所有调试处理实际上都是基于 Rust 来处理的,而之前这部分工作是用 Cpp 实现的。
我认为 Rust 在公司的实际运作方式效果非常好,相对 Cpp 来说,大家都为 Rust 代码库工作更加兴奋。
“Meta 就是之前的 Facebook
Chris: 在 Meta 这是一个长期的过程,持续了很多年。
最早是 2016年源代码管理团队(源码管理工具 Mercurial )考虑使用 Rust 。Meta 的工程师在选择使用工具方面有很大的灵活性,包括选择编程语言。只是如果选择受官方“祝福”的语言更容易完成工作。别人不会问你为什么选择这个语言之类的问题。当时,团队中的 Python 工程师考虑提升性能,所以默认选项是 C++,其中一位工程师不喜欢将 C++ 引入到一堆 Python 代码中这样的想法。并且,在 Meta 中处理网络并发和async等在 Cpp 中是一项艰巨的工作。所以他们考虑选择 Rust ,并开始引入 Rust ,结果非常好。后来,其他团队将 Rust 编译器集成到了 Meta 的构建工具中,这项工作完成以后,引起了团队的跳跃欢呼,这个过程就好像星星之火逐渐形成燎原之势,最终,你在 Meta 团队中想找到一个对 Rust 不感兴趣的团队反而很难了。
我们有很多特定的针对 Rust 新手的训练营任务,新人从训练营出来以后,选择可以使用 Rust 的团队加入。
Rebecca: 所以 Rust 现在在 Meta 里已经是受“祝福”的语言了吗?哈哈。
Chris: 我想是的。
Chris: 我们可以从 Rust 新人训练营中去获得想要的工程师。
Florian: 我们可以轻松地用我们的个人资料去吸引 Rust 工程师。但是从我们的客户或潜在客户那里也有同样的问题,是否可以找到 Rust 工程师。我们目前对团队进行 Rust 培训,以便让他们很好地使用 Rust ,我认为这是一个非常合理的过程。因为公司不会通过雇佣新的团队来使用新的语言,他们通常会重新培训内部受信任的团队去用新语言,尝试一些小的项目,再去扩展到大的项目。然后才开始在某个时间点雇佣新的 Rust 开发者。在过去的两年中,我们为很多大型企业服务,将数百个团队重新培训为 Rust 开发者。
Luca: 绝对是这样的,我们做了同样的事情。你不可能给新人扔一个新项目让他用新语言去实现。通常都会从内部人员开始,你让他们这样做,也是出于信任问题。
Armin: 我通常觉得有越来越多的人都想做 Rust,在 Sentry 我们有很多 Rust 代码,也有很多 Python 和 Javascript 等其他语言的 SDK,所以每个加入我们公司的程序员都可以开始学习 Rust。
Luca: 如果你申请某个领域的职位,要么你需要了解语言,要么你需要了解领域知识,对于使用 Rust 的公司,要找到同时兼备的人是非常难的,我们在招聘的时候会考虑在一个团队里平衡“语言专家”和“领域专家”,让他们在工作中相互指导,然后你就可以得到一个独立的团队。
Armin: 如果你真的有这种想法,你可以先在当前的工作中去寻找可以用 Rust 解决的场景问题,尝试看使用 Rust 有什么改善,看你是否可以证明这项工作是对公司有益的。在没有经验的情况下用新语言构建新服务是非常困难的,但如果你能通过点点滴滴的逐步改进则可能成功。
Florian: 如果你正在找工作,我要强烈推荐两点建议:1. 猎头虽然很 bad,但他们也很专业,如果你想找到 Rust 工作,可以尝试联系他们。2. 因为 Rust 语言很年轻,现在正是一个最佳的时机,让你成为其他语言比如 java/javascript等不可能做到的领域的专家。
Chris: 如果你不喜欢 Rust ,那么你真的可以尝试一下 Rust ,然后确认下自己是不是真的不喜欢。Rust 虽然有学习曲线,但它真的值的你学习一下。
Florian: 其实现在 Rust 学习曲线已经趋于平缓,社区中有很多代码示例和教程。最难教育的那一部分人其实是,他们认为自己已经掌握了系统编程的全部奥义。因为你需要尝试告诉他们,“是的,你什么都知道,但是你也可以用另外一种语言(Rust)做到这一点”。
Armin: 我认为 Rust 对于那些编程零基础的人应该是一个有趣的入门语言。因为它的工具链非常好。
Luca: 我们害怕学习曲线就好像害怕传统语言那种“包罗万象的一门大的语言”,其实这取决于你想用它做什么,你只需要这些东西的一小部分,比如我不需要 FFi,我就不去看它。你不需要全部都知道,需要的时候再去学它。
Chris: 我从 2019年开始就专门写 Rust 代码。直到现在,我用生命周期的次数可以用一只手就能数出来。很多人在初学 Rust 时就被生命周期给扼杀了学习的兴趣。其实不要害怕,Rust 的文档很棒,编译器错误提示就像老师一样,有人也说编译器像一位跟你结对编程的高级工程师一样,都会帮助你。
Florian: 现在行业中遇到的一个大问题就是,大家都在讨论哪个平台哪个产品使用了 Rust ,Rust 就像是一种沉默的语言,很多公司在有效地使用 Rust ,但你不会通过他们的官网页面来找到这个信息,所以最重要的是,我们需要类似于 Conf 大会这样的交流空间,或者更专业的会议,人们可以积极地说:“嘿,我们公司使用了 Rust”。我们可以在更多的公开场合去讨论 Rust 被使用的地方。如果你的公司正在使用 Rust ,那么请鼓励你的公司公开讨论他们正在使用 Rust ,我认为这是一个巨大的推动力。
Luca: 虽然说学习曲线越来越平缓,但是有些地方其实非常陡峭。比如异步编程时遇到编译器错误。Rust 年轻的生态系统需要更多的维护,才能保证让更多公司使用它。
Armin: 我其实并不关心人们是否将 Rust 用于商业,但我知道人们肯定会这么做。目前我看到的挑战有两个:一方面我们很明显有一个开源的生态,这是一个发展方向,另一方面,你的公司经常受到某种形式的限制,它们并不像开源项目那么可见,比如不能经常升级编译器,并且编译时间也不是很理想。
Chris: 能够和其他语言交互是非常重要的。如果一家大型公司想采用 Rust ,它们不会在一个完全和现有系统隔离的独立环境中使用它。
Luca: 我的建议是从小处着手,从关键路径开始。比如用 Rust 做一些 cli 工具、构建工具等一些不会破坏你业务的事情。如果你喜欢它就继续,不喜欢就停下来以后再说,就这么简单。
Florian: 从我的角度(咨询角度)看,诚实地告诉我们是否有一个问题可以通过 Rust 解决是非常重要的。如果你有预感,这可能是个解决方案,现在就去研究它。
Armin: 可以搞一些代码大赛之类的事情,有时会产生一些有趣的事情。实际当你看到代码实现时,你会发现使用 Rust 的人有很多,我已经在公司内部的hackathon看到过这样的事情发生。
Chris: 对,这些活动也可以帮助你找到公司中对 Rust 感兴趣的人。