【外评】Why Not Rust?
内容提要
这篇文章批评了Rust语言,指出其复杂性、编译时间、成熟度、替代语言、工具、集成、性能和不安全边界等问题。作者认为并不推荐批评Rust的文章,因为这会对真正好的论点产生不利影响。现代托管语言如Kotlin和Go可以提供不错的速度和内存安全。
延伸解读
Rust 的适用边界:并非所有编程都需要系统级控制
文章指出,Rust 作为系统编程语言,提供精确的数据布局控制和内存安全,但许多场景并不需要极致性能或硬件控制。在这些情况下,Kotlin 或 Go 等托管语言凭借垃圾回收实现内存安全,且编译速度更快,可能更合适。选择 Rust 前,应评估项目是否真正需要底层控制,避免为不需要的复杂性付出学习成本。
编译时间与成熟度:年轻语言的现实代价
Rust 编译时间较长,在大型项目中可能成为瓶颈,且缺乏类似 C++ pimpl 的机制,导致修改 crate 需重新编译所有反向依赖。此外,Rust 诞生仅五年,只有一个完整实现 rustc,缺乏官方规范,CPU 架构支持范围较窄。对于需长期维护的软件,选择新技术需谨慎考虑这些风险。
性能与集成:并非全面优于 C++
文章列举了 Rust 性能可能不如 C++ 的情况,如基于值的移动语义导致额外内存复制、缺乏放置新建、默认 ABI 有时更差,以及启用别名优化可能触发 LLVM 错误。集成方面,Rust 与 C/C++ 世界需通过不安全的桥接,Cargo 的固执世界观也可能增加与大型构建系统集成的难度。
不安全边界的理论隐忧
Rust 的不安全边界旨在隔离危险操作,实践中模糊测试发现的是恐慌而非缓冲区超限,但理论前景不乐观。Rust 未定义内存模型,无法正式检查不安全代码块的有效性,且不安全代码块并非真正模块化,功能强大的块可能扩展语言并导致组合时未定义行为。编译器错误也存在,这些因素可能影响长期可靠性。
Q&A
Rust语言的主要缺点是什么?
Rust语言的主要缺点包括复杂性、较长的编译时间、缺乏成熟度和官方规范,以及在某些情况下性能不如C++。
为什么Rust的编译时间较长会影响项目?
Rust的编译时间较长可能导致大型项目的构建效率降低,程序员需要花费更多时间进行优化。
Rust与其他编程语言相比有什么优势?
Rust提供内存安全性和对数据布局的精确控制,适合需要高性能和灵活性的系统编程。
Rust的复杂性对学习者有什么影响?
Rust的复杂性要求学习者投入大量时间和精力,可能会影响他们的学习进度和效率。
Rust的工具和集成支持如何?
Rust的基线工具和编译器被认为是一流的,但在某些运行时工具和集成开发环境的可靠性上仍显不足。
Rust的安全性如何与C++进行比较?
Rust在内存安全性方面比C++更强,但现代C++也提供了一些安全工具和指南,二者各有优劣。