Linux内核加入了Rust语言支持


Rust作为第二语言的支持的补丁系列已经加入到 Linux 内核。
Linux创始人Linus一直非常挑剔,甚至对C以外的系统编程语言不屑一顾。但是对于 Rust,他则不同,这可能是一个很好的迹象,表明 Rust 正在做一些非常值得尊敬的事情。无论如何,Rust语言似乎有潜力在几年内成为一种新的主​​流系统编程语言。
 Rust相对于 C++可专门解决Linux的几个特点:

  • Rust 特性使对通用代码的推理比 C++ 模板更容易。在 C++ 中,您只需编写模板,然后在实例化站点解析模板。如果它不是一个有效的类型,那么编译器会告诉你你使用了错误的模板,但找出原因仍然是你的责任。然而,在 Rust 中,泛型类型必须受到 trait 的约束;其中列出了泛型类型需要什么。因此,如果您滥用泛型类型,编译器只会说“好吧,您需要在此处添加参数 T 来调用它”,并且错误将始终出现在您使用的类型上,而不是某个依赖的泛型类型上。
  • Rust 的核心目标之一是“零成本抽象”。它做得很好,但它也有一些非零成本的抽象。这些归类为“透明且可预测的成本抽象”。例如: Rust 以其借用检查器而闻名,它提供内存安全的编译时验证。然而,这些可能不是最灵活的内存管理解决方案。因此它还通过引用计数提供共享所有权。这确实有相关的成本,但很容易推理和明确说明。他们甚至提供了原子和非原子引用计数选项,因为后者的相关成本更低。
  • C++ 使用围绕堆栈展开构建的异常处理模型,这要求所有代码维护一个有效的堆栈,C++ 运行时可以始终展开该堆栈。这可能会给内核带来问题,内核几乎肯定会对编译器无法完全理解的堆栈做一些奇怪的事情。虽然 Rust 有异常(Panicking)并支持C++ 风格的展开,但它还允许您将异常处理模型更改为仅终止程序,这与 Linux 内核处理异常的方式更好地匹配。
  • - Rust 还非常不鼓励使用与 C++ 相关的异常。Panicking主要用于实际异常(即意外)的错误条件,预期的错误条件可以使用返回类型(如 Option 和 Result)发出信号。甚至还有特殊的语言语法(称为 Try 或 ? 运算符),如果值发出错误信号,它将自动返回。