编写完10万行代码,我发了篇长文吐槽Rust
Rust 语言因其并发安全性而深受众多开发者的喜爱,曾在多个榜单上获评最受欢迎编程语言。然而,现在有人花费大量时间编写 10 万行 Rust 代码之后,撰写博客阐明 Rust 语言的一系列缺点,以下是博客的主要内容。
我深入研究 Rust 是为了改进由 Xobs 编写的 Xous 操作系统。Xous 是一个用纯 Rust 编写的微内核消息传递操作系统,是为了轻量级 (IoT / 嵌入式规模) 的安全优先平台(例如 Precursor)而编写的,用于 MMU 的硬件强制型页面级内存保护。
一年来,我们为 Xous 操作系统添加了许多功能,包括网络 (TCP/UDP/DNS)、用于模态和多语言文本的中间件图形抽象、存储(以加密的形式)、PDDB、可信启动(trusted boot)以及密钥管理库等。
我们决定编写自己的操作系统而不是使用 SeL4、Tock、QNX 或 Linux 等现有实现,是因为我们想真正了设备中每一行代码都在做什么。特别是对于 Linux,它的源代码库非常庞大且动态,即使开源,也不可能搞清其内核中的每一行代码。因此,Xous 仅支持我们的平台,以尽可能避免内核不必要的复杂性。
这样减少应用范围还意味着我们还可以充分利用 CPU 在 FPGA 中运行的优势 。因此,Xous 以一种不寻常的 RV32-IMAC 配置为目标:具有 MMU AES 扩展的配置。
FPGA 意味着我们有能力在硬件级别上修复 API 错误,从而使内核更加精简。这对于从 RAM 中处理诸如挂起和恢复之类的抽象破坏(abstraction-busting)进程尤其重要。
我们创建 Xous 时研究了大量的系统编程语言,最终 Rust 脱颖而出。当时它刚刚开始支持 `no-std`,它的特点是强类型、内存安全,具有良好的工具和新型生态系统。我个人是强类型语言的忠实拥护者,而内存安全性不仅有利于系统编程,还能使优化器更好地生成代码,并且 Rust 适用于并发。
实际上,我希望 Precursor 有一个支持标记指针和内存功能的 CPU,类似于 CHERI。于是我们和 CHERI 研发团队进行了一些讨论,但显然他们非常专注于 C 语言,也没有足够的带宽来支持 Rust。总体而言,C 比 Rust 需要 CHERI 多得多,他们的选择是符合资源优先原则的。我们不使用 C 语言,但出于安全性考虑,我希望有一天 Rust 中会存在硬件强制型胖指针(fat pointer)。
然而,Rust 语言绝不是完美的,甚至给我们的开发带来了很多问题。下面我列举一下 Rust 的缺点。
语法混乱复杂
我发现 Rust 语法密集、繁重且难以阅读,例如:
Trying::to_read::