Rust 近乎宗教般信仰的案例 亚历山大·西多罗夫
众所周知,Rust 社区对 Rust 非常热情,有些人甚至责怪我们偶尔表现得像一个邪教。
恐怕我不会打消这个印象。因为在这篇文章将证明 Rust 使您成为一个更好的工程师、更好的管理者和更好的人。
作者背景
我的背景是十多年的 C# 开发。从表面上看,在 Rust 之前,我有一个远大的职业生涯:
我一直在领导团队完成成功的项目,并在 .NET
的最前沿构建软件。
但在内心深处,我从未满足于我一直在做的事情。我一直认为这是冒名顶替者综合症,但不知何故,这种感觉在我切换到 Rust 后消失了。
感觉像魔术一样,对编码冷淡的状态消失了,我重新发现了我对软件开发的热爱。
经过长时间的自我反省,我发现了情绪变化背后的三个关键原因。
Rust之美
关于 Rust 与其他语言相比的技术方面的文章已经绰绰有余了,我不想重复相同的论点。
但是,所有这些绝妙的想法巧妙地组合在一起,恰到好处地让我再次对软件开发感到兴奋。
考虑到 Rust 从工程师那里得到的爱,我绝对不是唯一一个。
开源社区
与其他不太集中的生态系统相比,.NET 中的开源社区一直感觉非常不活跃。
公平地说,自从Microsoft开始在.NET Core上工作并变得更加开源友好以来,在过去的5 +年中有很多改进,但是浪费了很多时间。
相比之下,Rust 中的开源社区是如此健康和充满活力,你自然希望成为其中的一员。
我们正在开发开源交易基础设施,并计划尽可能多地开源我们的工作。
项目类型
随着 Rust 越来越主流,这个论点可能会被淡化,但现在 Rust 中的项目质量非常出色:许多雄心勃勃的想法正在专门在 Rust 中实现。
迁移
我当时经营着一家金融科技公司。事情进展顺利,但我们正在寻找进一步发展的方法。
考虑到我们正在开发高负载、延迟敏感的软件,在 Rust 中做一些严肃的事情的想法有明显的长期好处。
此外,这会让开发人员感到高兴,因为我们有越来越多的对 Rust 充满好奇的工程师。
大约两年前,一旦async/await
支持稳定下来,我们就开始构建第一个 Rust 团队。
最初我们没有计划将其作为从 C# 到 Rust 的完整迁移,但是,一旦我们开始朝着这个方向前进,就没有办法阻止它。
越来越多的开发人员开始要求加入 Rust 团队。告诉他们“不”,从而使他们失去动力绝对不是最好的选择。因此,我们承诺逐步将绝大多数软件迁移到 Rust。
现在可能很难意识到这一点,因为 Rust 似乎越来越主流,但两年前,从经营公司的角度来看,这是一个非常可怕的决定。
从一个你一直在工作的成熟生态系统的舒适区,转移到一个你经验很少的年轻生态系统,是很艰难的。
但悲惨的失败不是一种选择,所以我们继续前进。在最初的几个月里,我们看到了各种区块的惊人快速改进:我们对 Rust 的理解一天比一天好,Rust 生态系统正在迅速成熟。
我们迁移到 Rust 的激进程度肯定有赌博的成分。但是,幸运的是,大约半年后,就在我们开始适应新的生态系统时,Rust 起飞了。
从那时起,我们遇到的唯一问题是人才奇缺!
但即使是这个问题最终对我们来说也是一件好事。当我们用主流语言招聘时,我们一直希望得到一位经验丰富的工程师,他此时此地都非常适合。
回想起来,我们的招聘过程自私和近乎傲慢。由于我们刚开始的时候基本上没有经验丰富的 Rust 开发人员,这促使我们更加开放,投资于人,
提供机会并自己培养人才
不仅能改善我们的团队文化,使我们的团队更加平衡。即使现在不再严重缺乏 Rust 开发人员,我们也遵循这种方法。
当我与其他公司的同事讨论我们内部的 Rust 革命时,我最常被问到的问题是 Rust 团队是否比 C# 团队慢。
这是一个非常普遍和合理的问题。因为 Rust 是一种较低级别的语言,您必须手动执行 C# 等高级语言自动为您执行的操作。
但是我们没有遇到开发人员性能的任何显着下降。考虑到现代 C# 是一种非常好的语言,这更令人惊讶。
虽然我确实对C#有疑问,但现在 C# 可以说是复杂后端软件的最佳编程语言之一:
它相当快,跨平台,并且具有清晰的语法和现代功能。
我没有看到太多的竞争:
使用 Python 在生产中会很慢并且由于类型系统不佳而难以维护;
C/C++ 会降低开发速度并经常出现内存泄漏,即使是我们中最好的人也容易出现!
Go 在其舒适区之外往往是一个糟糕的选择(微服务等)
我唯一可以证明比较更好的语言是 Kotlin,但前提是你真的喜欢 Java 生态系统。
C#肯定做对了很多事情。它提出了一个问题,为什么在转向较低级别的语言后,开发过程没有减慢。
这是需要篇幅更长才能详细解释的文章,解释了为什么会这样。补充一点,当你在开发真正复杂的软件时,工程师很容易需要长达一年的时间才能熟悉代码库。
因此,重要的是人才保留,这主要基于工程师的满意度,这是 Rust 闪耀的另一个领域。
结论
与其深入技术细节,更适合从工程师和整个公司的角度分享一些较少有争论的、不太明显的转向 Rust 的话题。
总的来说,迁移到 Rust 是一次非常积极的体验:
一切都以绝对完美的方式结合在一起。
虽然 Rust 显然不是所有这些进步背后的唯一原因,但它绝对是其中的关键因素。
希望这篇文章的内容没有冒犯任何喜欢其他语言的人。虽然我们找到了对我们有用的方法,但没有一种永远通用且正确的方法来编写软件:
魔鬼在细节中,并且有各种语言的位置。
补充:
Async-Await 范式是编程发展中向前迈出的一大步。它不仅使您的异步代码“看起来”同步,增强了可读性,而且还提高了应用程序的响应能力和性能,特别是对于 IO 绑定用例。
但是,考虑到它在不同语言和框架中的处理方式,一开始可能有点令人生畏!
在我进一步讨论之前,我假设我们对 Rust 中的 Async-Await 有基本的了解,并且对 tokio、executors、futures 和任务等运行时有所了解。
什么是async/await 异步/等待? async/await 是 Rust 编程语言中一个强大的功能,它使开发人员能够编写高效并发运行的异步代码。
它是一种允许函数以非阻塞方式执行的技术,释放执行的主线程以在等待异步函数完成时执行其他任务。
这样,程序可以在等待异步函数的结果的同时继续执行其他操作。在 Rust 中,异步函数可以与 await 关键字结合使用,以在特定点暂停和恢复函数的执行。
此功能在处理 I/O 绑定或 CPU 密集型任务时特别有用,因为它允许程序在等待异步功能完成时执行其他任务。
为什么将Tokio与Async/Await一起使用?
虽然 Rust 的特性提供了一种编写异步代码的方法,但它不提供运行这些函数的执行器。这就是Tokio的用武之地。
Tokio 是 Rust 的一个流行的异步运行时,它提供了一个执行器和其他工具来帮助编写异步代码。
Tokio 的执行器提供了一种在不阻塞主线程的情况下有效地同时运行多个任务的方法。
它使用一种称为“反应器模式”的技术来管理 I/O 事件和计划任务。这使Tokio 能够以较低的开销有效地管理数千个任务。
信息论入门非常有帮助的书籍推荐如下:
《信息论、推理与学习算法》 - David J. C. MacKay 权威的信息论教材,内容全面,数学严谨,非常适合作为信息论的入门学习书籍。
《信息论基础》 - Thomas M. Cover 和 Joy A. Thomas 信息论的典范教材,内容从基础到进阶全面介绍信息论,理论推导严谨。
《信息论与可靠通信》 - Robert G. Gallager 更侧重于通信领域信息论内容,书写简洁明了,示例丰富形象生动。
《信息论与网络编码》 - Raymond W. Yeung 对各种网络编码做了详细阐述,内容新颖,对网络信息论感兴趣的人很适合。
《深入理解信息论》 - 张贤达 国人编著的信息论书籍,理论推导严谨,内容通俗易懂,对信息论入门很有帮助。
以上都是信息论领域非常经典和优质的著作,对理解和学习信息论理论非常有帮助。可以根据个人喜好和学习阶段选择合适的书籍进行学习。
本文由 mdnice 多平台发布