Rust本身难度会影响其工程性吗? - jmmv


Rust 因学习曲线陡峭而臭名昭著。借用检查器是您必须击败的第一个 Boss,但如果对内存如何工作、对象如何移动以及借用检查器执行的规则有一个良好的心智模型,它很快就会成为第二天性。这些规则听起来可能很复杂,但实际上,它们是关于理解计算机工作原理的基础知识。

想象如果我们在一个处理大型代码库(数十万个 SLoC)的大型团队(比如数十人)中使用 Rust 会发生什么。

一个明显的担忧是,为大型项目添加新语言……非常困难:对抗惯性、开发工具、培训人员、移植代码而不重写……这些都是非常艰苦的工作。但还有一个更微妙的担忧:即使我们完成了整个工作,我们的开发人员是否能够学习到足够多的 Rust 来以有意义的方式为代码库做出贡献?同样,乍一看,这门语言很复杂,我们不应该期望每个人都能掌握它。

第一个观察结果是,在一个足够大的团队中,无论哪种语言,我们都会有具有不同专业水平的开发者。这是预料之中的,也是有意为之的,但是根据不同的语言,其后果也是不同的。比如说。C++也是一种非常复杂的语言。当然,它可能比Rust更容易编写,因为编译器更宽容,但也更难保证其正确性。这在以后会反过来咬开发者团队一口,因为现在你需要找专家来调试崩溃和竞争条件。

第二个观察结果来自于我在Rust中写的辅助项目。我发现我的大部分时间都花在了编写简单的业务逻辑和重构测试上,对于这些,Rust并不碍事。只有在项目生命周期的某些部分,我才不得不建立基础(抽象、分层、异步结构等)或进行大规模的重新设计,也只有在这些时候我才会与Rust发生争执。

换句话说:在一个足够大的项目或团队中,不管是什么语言,总会有一组核心维护者来设计、编写和维护基础。这组人知道项目的来龙去脉,也应该知道语言及其生态系统的来龙去脉。这组人是必要的。但是,一旦这些基础到位,所有其他贡献者就可以专注于构建功能的令人兴奋的方面。Rust的复杂性可能仍然会妨碍到它,但不会比其他语言的复杂性多多少。

最后,我希望你再次考虑,学习一门语言不仅仅是学习其语法的问题。掌握一门编程语言需要对该语言的特异性及其库有数月的专业知识,在对长期可维护性进行比较之前,必须经历这些。但是,是的,Rust可以更简单,而且人们正在努力使它变得更简单!