编程语言¶
内核是用 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¶
内核对 Rust 编程语言具有实验性支持 [rust-language],由 CONFIG_RUST
控制。它使用 rustc
[rustc] 在 --edition=2021
[rust-editions] 下编译。版本是一种引入对语言进行不向后兼容的小改动的方式。
此外,内核中还使用了一些不稳定特性 [rust-unstable-features]。不稳定特性在未来可能会改变,因此达到只使用稳定特性的阶段是一个重要目标。
请参阅 Rust 以获取更多信息。