11481df6cSCarlos Bilbao.. include:: ../disclaimer-sp.rst 21481df6cSCarlos Bilbao 31481df6cSCarlos Bilbao:Original: :ref:`Documentation/process/programming-language.rst <programming_language>` 4*5bc23521SBilbao, Carlos:Translator: Carlos Bilbao <carlos.bilbao.osdev@gmail.com> 51481df6cSCarlos Bilbao 61481df6cSCarlos Bilbao.. _sp_programming_language: 71481df6cSCarlos Bilbao 81481df6cSCarlos BilbaoLenguaje de programación 91481df6cSCarlos Bilbao======================== 101481df6cSCarlos Bilbao 111481df6cSCarlos BilbaoEl kernel está escrito en el lenguaje de programación C [sp-c-language]_. 121481df6cSCarlos BilbaoMás concretamente, el kernel normalmente se compila con ``gcc`` [sp-gcc]_ 131481df6cSCarlos Bilbaobajo ``-std=gnu11`` [sp-gcc-c-dialect-options]_: el dialecto GNU de ISO C11. 141481df6cSCarlos Bilbao``clang`` [sp-clang]_ también es compatible, consulte los documentos en 151481df6cSCarlos Bilbao:ref:`Building Linux with Clang/LLVM <kbuild_llvm>`. 161481df6cSCarlos Bilbao 171481df6cSCarlos BilbaoEste dialecto contiene muchas extensiones del lenguaje [sp-gnu-extensions]_, 181481df6cSCarlos Bilbaoy muchos de ellos se usan dentro del kernel de forma habitual. 191481df6cSCarlos Bilbao 201481df6cSCarlos BilbaoHay algo de soporte para compilar el núcleo con ``icc`` [sp-icc]_ para varias 211481df6cSCarlos Bilbaode las arquitecturas, aunque en el momento de escribir este texto, eso no 221481df6cSCarlos Bilbaoestá terminado y requiere parches de terceros. 231481df6cSCarlos Bilbao 241481df6cSCarlos BilbaoAtributos 251481df6cSCarlos Bilbao--------- 261481df6cSCarlos Bilbao 271481df6cSCarlos BilbaoUna de las comunes extensiones utilizadas en todo el kernel son los atributos 281481df6cSCarlos Bilbao[sp-gcc-attribute-syntax]_. Los atributos permiten introducir semántica 291481df6cSCarlos Bilbaodefinida por la implementación a las entidades del lenguaje (como variables, 301481df6cSCarlos Bilbaofunciones o tipos) sin tener que hacer cambios sintácticos significativos 311481df6cSCarlos Bilbaoal idioma (por ejemplo, agregar una nueva palabra clave) [sp-n2049]_. 321481df6cSCarlos Bilbao 331481df6cSCarlos BilbaoEn algunos casos, los atributos son opcionales (es decir, hay compiladores 341481df6cSCarlos Bilbaoque no los admiten pero de todos modos deben producir el código adecuado, 351481df6cSCarlos Bilbaoincluso si es más lento o no realiza tantas comprobaciones/diagnósticos en 361481df6cSCarlos Bilbaotiempo de compilación). 371481df6cSCarlos Bilbao 381481df6cSCarlos BilbaoEl kernel define pseudo-palabras clave (por ejemplo, ``__pure``) en lugar 391481df6cSCarlos Bilbaode usar directamente la sintaxis del atributo GNU (por ejemplo, 401481df6cSCarlos Bilbao``__attribute__((__pure__))``) con el fin de detectar cuáles se pueden 411481df6cSCarlos Bilbaoutilizar y/o acortar el código. 421481df6cSCarlos Bilbao 431481df6cSCarlos BilbaoPor favor consulte ``include/linux/compiler_attributes.h`` para obtener 441481df6cSCarlos Bilbaomás información. 451481df6cSCarlos Bilbao 461481df6cSCarlos Bilbao.. [sp-c-language] http://www.open-std.org/jtc1/sc22/wg14/www/standards 471481df6cSCarlos Bilbao.. [sp-gcc] https://gcc.gnu.org 481481df6cSCarlos Bilbao.. [sp-clang] https://clang.llvm.org 491481df6cSCarlos Bilbao.. [sp-icc] https://software.intel.com/en-us/c-compilers 501481df6cSCarlos Bilbao.. [sp-gcc-c-dialect-options] https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html 511481df6cSCarlos Bilbao.. [sp-gnu-extensions] https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html 521481df6cSCarlos Bilbao.. [sp-gcc-attribute-syntax] https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html 531481df6cSCarlos Bilbao.. [sp-n2049] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2049.pdf 54