编程语言¶
内核是用 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 获取更多信息。