在FP Complete,我们长期以来一直在谈论一种软件开发语言的三大支柱:生产力、稳健性和性能。很多时候,这三大支柱是相互冲突的,或者至少看起来是这样。快速进入市场(生产力)往往涉及到对质量保证的吝啬(健壮性),或编写低效的代码(性能)。或者你可以写一些简单的代码,这很容易测试和验证(生产力和稳健性),但最终会有一个缓慢的算法(性能)。优化代码需要时间,并可能引入新的错误。
在我们公司的整个历史中,我们的论点是,虽然这里的某种程度的权衡是不可避免的,但我们可以利用更好的工具、语言和方法论来提高我们在所有这些支柱上的地位。我们最初关注的是Haskell,一种使用强大的类型系统并提供良好性能的函数式编程语言。我们仍然喜欢并继续使用Haskell。然而,意识到代码只是战斗的一半,我们开始采用DevOps方法和工具。
我们怀着极大的兴趣看着Rust编程语言的发展、成熟和在工业界的应用。几乎所有的主要技术公司现在都在为Rust投入大量精力。最近,微软已经相当公开地拥抱了Rust。
在这篇文章中,我想分享一些想法,说明为什么我们很高兴看到Rust在工业界的采用,我们在FP Complete使用Rust的原因,并给感兴趣的公司提供一些建议,说明他们如何能够开始采用这种语言。
为什么是Rust?
我们非常相信利用计算机本身来帮助我们编写更好的代码。其中一些可以通过测试驱动开发(TDD)这样的方法论来实现。但在TDD这样的技术链条中,有两个薄弱环节:
- 它需要积极的努力去思考什么需要被测试
- 有可能忽略这些测试的失败,并运送坏的代码
后者可能听起来很牵强,但我们已经看到它在工业中发生。测试的局限性是众所周知的,我们以前曾在博客中推荐过测试策略。不要误会我的意思:测试是软件开发的一个绝对重要的部分,你应该做更多的测试。
但是,行业经验告诉我们,许多bug都是通过测试溜走的。也许最常见和最危险的一类错误是内存安全问题。这些问题包括缓冲区超限、"使用后自由 "和 "双重自由"。这些类型的错误特别令人担忧的是,通常,最好的情况是你的程序崩溃。最坏的情况包括重大的安全和隐私漏洞。
工业标准的方法是通过使用托管语言来绕过这些错误。管理型语言绕过了显式内存管理,而是依靠垃圾回收。这引入了一些缺点,延迟是最大的一个。通常情况下,垃圾收集的语言对内存的需求也更大。这就是上面提到的典型的效率与正确性的权衡。我们一直很乐意自己做出这种权衡,使用像Haskell这样的语言,并接受一定程度的性能冲击。
Rust采取了一种不同的方法,我们对这种方法深感钦佩。通过引入所有权和借用的概念,Rust试图大幅减少内存安全错误的发生,而不引入垃圾收集的开销。这完全符合FP Complete的思维方式,即尽可能使用更好的工具。
这样做的坏处是复杂。了解所有权可能是一个挑战。但请看下面关于如何开始使用Rust的信息。这是FP Complete作为一家公司,以及我个人,对其非常感兴趣的一个领域。
然而,超越内存安全问题的是Rust语言的其他设计。作为一种相对较新的语言,Rust有机会向市场上许多其他语言学习。而在我们看来,它已经从其他语言中选择了一些最好的特性,尤其是我们所喜爱的Haskell。其中的一些特性包括:
换句话说。Rust已经完全接受了使用更好的方法来解决问题的概念,并窃取了已经被尝试和测试的伟大想法。我们相信Rust有可能极大地提高世界上的软件质量,并带来更多可维护的解决方案。我们认为Rust可以在解决全球软件危机方面发挥重要作用。
Rust在FP Complete
到目前为止,我们在FP Complete对Rust采取了三管齐下的方法。这包括:
- 为内部和外部受众制作教育材料
- 将Rust用于内部工具
- 用Rust编写产品代码
我们创建的主要教育产品是我们的Rust速成课程,我们将在这篇文章的最后提供。这个课程是为了解决我们看到的开发者在使用Rust入门时最常见的陷阱。
另外,作为一个个人项目,我决定看看Rust是否可以作为第一种编程语言来教,我认为它可以。
对于内部工具和产品代码,我们总是有这样的争论:我们应该使用Rust还是Haskell。在过去的一年里,我们一直给我们的工程师更多的自由,让他们自己做出这个决定。就个人而言,我还是更喜欢用Haskell,这其实并不令人惊讶。我在专业上使用Haskell的时间比Rust存在的时间长。但是我们看到Rust的进步--无论是在库的生态系统还是语言本身--意味着Rust几乎每个月都会变得更有竞争力。
在这一点上,我们有一些特定的时间,Rust是一个明显的赢家:
- 当性能很重要时,我们更喜欢Rust。Haskell通常足够快,但对Haskell代码进行微优化最终会比用Rust编写代码花费更多时间。
- 对于客户端代码(例如,命令行工具),我们一直倾向于Rust。总的来说,它比Haskell有更好的跨操作系统支持。
- 在某些领域,Rust的库覆盖率要比Haskell好得多,那么我们就会倾向于它们。(同样的情况也适用于其他方向)。
- 由于我们是喜欢玩闪亮的工具的工程师,如果有人想获得额外的乐趣,Rust通常就是这样。在世界上的大多数地方,Haskell可能会被认为是闪亮的玩具。FP Complete在那里是相当出色的。
在FP Complete,我们正开始向Rust的第四个领域拓展:咨询服务。在过去的几年里,Rust的市场一直在稳步增长。我们相信在这一点上,Rust已经准备好被更广泛地采用,我们渴望帮助企业采用这种美妙的语言。如果你有兴趣了解更多,请联系我们的咨询团队以获得更多信息。