架构决策记录:Rust 编程语言
决策编号:AR-001
决策标题:采用 Rust 编程语言
日期:2021 年 12 月 1 日
状态:已接受
问题陈述
随着我们继续开发软件应用,我们发现缓解潜在的安全漏洞和防止运行时错误变得越来越具有挑战性。在使用 C 和 C++ 等现有编程语言时,我们仍不断遇到缓冲区溢出、内存泄漏和导致应用崩溃的未定义行为等问题。我们需要一门提供内存安全保证、并且足够高效以支持性能关键型应用的编程语言。
考量
有若干编程语言旨在解决现有的问题。其中,Rust 编程语言因其独特的设计特性而受到开发者社区的极大关注。考量因素包括:
内存安全与安全性
性能与效率
社区支持与采用情况
学习曲线
工具与生态系统
与现有软件系统的兼容性。
约束
采用一门新的编程语言需要对开发人员进行再培训,这需要时间和资源。将该语言整合到现有的开发工作流程中可能是一项挑战。我们必须确保与现有系统的兼容性,并避免破坏性变更,以保持连续性。
实施
我们的开发团队将接受培训,学习并熟悉 Rust 编程语言。
我们将用 Rust 创建一个新项目作为试用,以评估其兼容性以及是否适合我们的开发目的。
我们将逐步把用 C 和 C++ 编写的现有系统迁移到 Rust。
我们将与 Rust 社区合作,探索可用的工具和库,以改进我们的开发工作流程。
我们将定期监控 Rust 的性能,并将其与现有编程语言的性能进行比较。
我们将采取长期的方法,在培训、集成的成本与使用 Rust 的潜在收益之间取得平衡。
理由
我们采用 Rust,是因为它的独特特性旨在提供内存安全和安全保证,同时保持性能和效率。Rust 强大的类型系统、借用检查器(borrow checker)和内存安全理念,使其非常适合开发性能关键型和安全关键型应用。此外,Rust 拥有庞大的开发者社区,使我们能够获得支持我们开发工作流程的各种工具、库和生态系统。虽然 Rust 有学习曲线,但我们相信采用 Rust 的收益超过成本,并为持续的成长和创新提供了绝佳的机会。
后果
采用 Rust 将需要在时间和资源上进行大量投入,用于培训开发人员并将该语言整合到现有的开发工作流程中。
采用 Rust 可能会在一定程度上造成与现有系统的兼容性问题,需要进行重构和修改。
采用 Rust 可能会吸引希望参与激动人心项目的 Rust 开发者,从而增加能够为我们的项目做出贡献的开发者数量。
与现有语言相比,采用 Rust 可能带来性能、效率和安全性的提升。
最后,采用 Rust 有可能减少我们应用中的安全漏洞。