Warning

此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。

Note

如果您发现本文档与原始文件有任何不同或者有翻译问题,请联系该文件的译者, 或者请求时奎亮的帮助:<alexs@kernel.org>。

Original:

Documentation/process/programming-language.rst

Translator:

Alex Shi <alex.shi@linux.alibaba.com>

程序设计语言

内核是用 C 编程语言编写的 [zh_cn_c-language]。更准确地说,内核通常使用 gcc [zh_cn_gcc] 编译, 并且使用 -std=gnu11 [zh_cn_gcc-c-dialect-options]:这是 ISO C11 的 GNU 方言。 clang [zh_cn_clang] 也得到了支持,详见文档: 使用 Clang/LLVM 构建 Linux

这种方言包含对 C 语言的许多扩展 [zh_cn_gnu-extensions],当然,它们许多都在内核中使用。

属性

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

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

内核定义了伪关键字(例如, pure ),而不是直接使用GNU属性语法(例如, __attribute__((__pure__)) ),以检测可以使用哪些关键字和/或缩短代码, 具体 请参阅 include/linux/compiler_attributes.h

Rust

内核对 Rust 编程语言 [zh_cn_rust-language] 的支持是实验性的,并且可以通过配置选项 CONFIG_RUST 来启用。Rust 代码使用 rustc [zh_cn_rustc] 编译器在 --edition=2021 [zh_cn_rust-editions] 选项下进行编译。版本(Editions)是一种 在语言中引入非后向兼容的小型变更的方式。

除此之外,内核中还使用了一些不稳定的特性 [zh_cn_rust-unstable-features]。这些不稳定 的特性将来可能会发生变化,因此,一个重要的目标是达到仅使用稳定特性的程度。

具体请参阅 Rust