Linguagem de programação¶
O kernel Linux é escrito na linguagem de programação C [pt-c-language].
Mais precisamente, o kernel costuma ser compilado com gcc [pt-gcc]
usando -std=gnu11 [pt-gcc-c-dialect-options], que seleciona o dialeto
GNU do padrão ISO C11. clang [pt-clang] também é suportado; consulte
a documentação sobre
Compilando o Linux com Clang/LLVM.
Esse dialeto contém muitas extensões à linguagem [pt-gnu-extensions], muitas das quais são usadas rotineiramente no kernel.
Atributos¶
Os atributos [pt-gcc-attribute-syntax] estão entre as extensões mais comuns usadas em todo o kernel. Eles permitem introduzir semântica definida pela implementação em entidades da linguagem (como variáveis, funções ou tipos), sem exigir mudanças sintáticas significativas na linguagem (por exemplo, a adição de uma nova palavra-chave) [pt-n2049].
Em alguns casos, os atributos são opcionais (isto é, um compilador que não os suporte ainda deve gerar código correto, mesmo que o programa resultante seja mais lento ou o compilador realize menos verificações e diagnósticos em tempo de compilação).
O kernel define pseudopalavras-chave (por exemplo, __pure) em vez de
usar diretamente a sintaxe de atributos do GNU (por exemplo,
__attribute__((__pure__))), para detectar quais atributos são
suportados e/ou encurtar o código.
Consulte include/linux/compiler_attributes.h para mais informações.
Rust¶
O kernel oferece suporte à linguagem de programação Rust [pt-rust-language]
quando a opção CONFIG_RUST está habilitada. O código Rust é compilado
com rustc [pt-rustc] usando --edition=2021 [pt-rust-editions]. As
edições permitem introduzir pequenas mudanças na linguagem que não são
compatíveis com versões anteriores.
Além disso, alguns recursos instáveis [pt-rust-unstable-features] são usados no kernel. Esses recursos podem mudar no futuro; portanto, é importante chegar a um ponto em que apenas recursos estáveis sejam usados.
Consulte Rust para mais informações.