编程语言

内核是用 C 编程语言编写的 [c-language]。更准确地说,内核通常使用 gcc [gcc]-std=gnu11 [gcc-c-dialect-options] 下编译:ISO C11 的 GNU 方言。clang [clang] 也被支持,请参阅关于 使用 Clang/LLVM 构建 Linux 的文档。

这种方言包含许多语言扩展 [gnu-extensions],其中许多在内核中被理所当然地使用。

属性

内核中常用的扩展之一是属性 [gcc-attribute-syntax]。属性允许将实现定义的语义引入到语言实体(如变量、函数或类型),而无需对语言进行重大的语法更改(例如,添加一个新关键字) [n2049]

在某些情况下,属性是可选的(即,不支持它们的编译器仍然应该生成正确的代码,即使它速度较慢或执行的编译时检查/诊断较少)。

内核定义了伪关键字(例如 __pure)而不是直接使用 GNU 属性语法(例如 __attribute__((__pure__))),以便检测可以使用哪些属性和/或缩短代码。

请参阅 include/linux/compiler_attributes.h 获取更多信息。

Rust

内核在 CONFIG_RUST 下对 Rust 编程语言 [rust-language] 提供了实验性支持。它在 --edition=2021 [rust-editions] 下使用 rustc [rustc] 编译。版本是引入不向后兼容的语言小更改的一种方式。

除此之外,一些不稳定的特性 [rust-unstable-features] 在内核中使用。不稳定的特性将来可能会发生变化,因此达到只使用稳定特性的目标非常重要。

请参阅 Rust 获取更多信息。