1 .. _programming_language: 1 .. _programming_language: 2 2 3 Programming Language 3 Programming Language 4 ==================== 4 ==================== 5 5 6 The kernel is written in the C programming lan 6 The kernel is written in the C programming language [c-language]_. 7 More precisely, the kernel is typically compil 7 More precisely, the kernel is typically compiled with ``gcc`` [gcc]_ 8 under ``-std=gnu11`` [gcc-c-dialect-options]_: 8 under ``-std=gnu11`` [gcc-c-dialect-options]_: the GNU dialect of ISO C11. 9 ``clang`` [clang]_ is also supported, see docs 9 ``clang`` [clang]_ is also supported, see docs on 10 :ref:`Building Linux with Clang/LLVM <kbuild_l 10 :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`. 11 11 12 This dialect contains many extensions to the l 12 This dialect contains many extensions to the language [gnu-extensions]_, 13 and many of them are used within the kernel as 13 and many of them are used within the kernel as a matter of course. 14 14 >> 15 There is some support for compiling the kernel with ``icc`` [icc]_ for several >> 16 of the architectures, although at the time of writing it is not completed, >> 17 requiring third-party patches. >> 18 15 Attributes 19 Attributes 16 ---------- 20 ---------- 17 21 18 One of the common extensions used throughout t 22 One of the common extensions used throughout the kernel are attributes 19 [gcc-attribute-syntax]_. Attributes allow to i 23 [gcc-attribute-syntax]_. Attributes allow to introduce 20 implementation-defined semantics to language e 24 implementation-defined semantics to language entities (like variables, 21 functions or types) without having to make sig 25 functions or types) without having to make significant syntactic changes 22 to the language (e.g. adding a new keyword) [n 26 to the language (e.g. adding a new keyword) [n2049]_. 23 27 24 In some cases, attributes are optional (i.e. a 28 In some cases, attributes are optional (i.e. a compiler not supporting them 25 should still produce proper code, even if it i 29 should still produce proper code, even if it is slower or does not perform 26 as many compile-time checks/diagnostics). 30 as many compile-time checks/diagnostics). 27 31 28 The kernel defines pseudo-keywords (e.g. ``__p 32 The kernel defines pseudo-keywords (e.g. ``__pure``) instead of using 29 directly the GNU attribute syntax (e.g. ``__at 33 directly the GNU attribute syntax (e.g. ``__attribute__((__pure__))``) 30 in order to feature detect which ones can be u 34 in order to feature detect which ones can be used and/or to shorten the code. 31 35 32 Please refer to ``include/linux/compiler_attri 36 Please refer to ``include/linux/compiler_attributes.h`` for more information. 33 37 34 Rust << 35 ---- << 36 << 37 The kernel has experimental support for the Ru << 38 [rust-language]_ under ``CONFIG_RUST``. It is << 39 under ``--edition=2021`` [rust-editions]_. Edi << 40 small changes to the language that are not bac << 41 << 42 On top of that, some unstable features [rust-u << 43 the kernel. Unstable features may change in th << 44 goal to reach a point where only stable featur << 45 << 46 Please refer to Documentation/rust/index.rst f << 47 << 48 .. [c-language] http://www.open-std.org/jtc1/s 38 .. [c-language] http://www.open-std.org/jtc1/sc22/wg14/www/standards 49 .. [gcc] https://gcc.gnu.org 39 .. [gcc] https://gcc.gnu.org 50 .. [clang] https://clang.llvm.org 40 .. [clang] https://clang.llvm.org >> 41 .. [icc] https://software.intel.com/en-us/c-compilers 51 .. [gcc-c-dialect-options] https://gcc.gnu.org 42 .. [gcc-c-dialect-options] https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html 52 .. [gnu-extensions] https://gcc.gnu.org/online 43 .. [gnu-extensions] https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html 53 .. [gcc-attribute-syntax] https://gcc.gnu.org/ 44 .. [gcc-attribute-syntax] https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html 54 .. [n2049] http://www.open-std.org/jtc1/sc22/w 45 .. [n2049] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2049.pdf 55 .. [rust-language] https://www.rust-lang.org !! 46 56 .. [rustc] https://doc.rust-lang.org/rustc/ << 57 .. [rust-editions] https://doc.rust-lang.org/e << 58 .. [rust-unstable-features] https://github.com <<
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.