1*1481df6cSCarlos Bilbao.. include:: ../disclaimer-sp.rst 2*1481df6cSCarlos Bilbao 3*1481df6cSCarlos Bilbao:Original: :ref:`Documentation/process/programming-language.rst <programming_language>` 4*1481df6cSCarlos Bilbao:Translator: Carlos Bilbao <carlos.bilbao@amd.com> 5*1481df6cSCarlos Bilbao 6*1481df6cSCarlos Bilbao.. _sp_programming_language: 7*1481df6cSCarlos Bilbao 8*1481df6cSCarlos BilbaoLenguaje de programación 9*1481df6cSCarlos Bilbao======================== 10*1481df6cSCarlos Bilbao 11*1481df6cSCarlos BilbaoEl kernel está escrito en el lenguaje de programación C [sp-c-language]_. 12*1481df6cSCarlos BilbaoMás concretamente, el kernel normalmente se compila con ``gcc`` [sp-gcc]_ 13*1481df6cSCarlos Bilbaobajo ``-std=gnu11`` [sp-gcc-c-dialect-options]_: el dialecto GNU de ISO C11. 14*1481df6cSCarlos Bilbao``clang`` [sp-clang]_ también es compatible, consulte los documentos en 15*1481df6cSCarlos Bilbao:ref:`Building Linux with Clang/LLVM <kbuild_llvm>`. 16*1481df6cSCarlos Bilbao 17*1481df6cSCarlos BilbaoEste dialecto contiene muchas extensiones del lenguaje [sp-gnu-extensions]_, 18*1481df6cSCarlos Bilbaoy muchos de ellos se usan dentro del kernel de forma habitual. 19*1481df6cSCarlos Bilbao 20*1481df6cSCarlos BilbaoHay algo de soporte para compilar el núcleo con ``icc`` [sp-icc]_ para varias 21*1481df6cSCarlos Bilbaode las arquitecturas, aunque en el momento de escribir este texto, eso no 22*1481df6cSCarlos Bilbaoestá terminado y requiere parches de terceros. 23*1481df6cSCarlos Bilbao 24*1481df6cSCarlos BilbaoAtributos 25*1481df6cSCarlos Bilbao--------- 26*1481df6cSCarlos Bilbao 27*1481df6cSCarlos BilbaoUna de las comunes extensiones utilizadas en todo el kernel son los atributos 28*1481df6cSCarlos Bilbao[sp-gcc-attribute-syntax]_. Los atributos permiten introducir semántica 29*1481df6cSCarlos Bilbaodefinida por la implementación a las entidades del lenguaje (como variables, 30*1481df6cSCarlos Bilbaofunciones o tipos) sin tener que hacer cambios sintácticos significativos 31*1481df6cSCarlos Bilbaoal idioma (por ejemplo, agregar una nueva palabra clave) [sp-n2049]_. 32*1481df6cSCarlos Bilbao 33*1481df6cSCarlos BilbaoEn algunos casos, los atributos son opcionales (es decir, hay compiladores 34*1481df6cSCarlos Bilbaoque no los admiten pero de todos modos deben producir el código adecuado, 35*1481df6cSCarlos Bilbaoincluso si es más lento o no realiza tantas comprobaciones/diagnósticos en 36*1481df6cSCarlos Bilbaotiempo de compilación). 37*1481df6cSCarlos Bilbao 38*1481df6cSCarlos BilbaoEl kernel define pseudo-palabras clave (por ejemplo, ``__pure``) en lugar 39*1481df6cSCarlos Bilbaode usar directamente la sintaxis del atributo GNU (por ejemplo, 40*1481df6cSCarlos Bilbao``__attribute__((__pure__))``) con el fin de detectar cuáles se pueden 41*1481df6cSCarlos Bilbaoutilizar y/o acortar el código. 42*1481df6cSCarlos Bilbao 43*1481df6cSCarlos BilbaoPor favor consulte ``include/linux/compiler_attributes.h`` para obtener 44*1481df6cSCarlos Bilbaomás información. 45*1481df6cSCarlos Bilbao 46*1481df6cSCarlos Bilbao.. [sp-c-language] http://www.open-std.org/jtc1/sc22/wg14/www/standards 47*1481df6cSCarlos Bilbao.. [sp-gcc] https://gcc.gnu.org 48*1481df6cSCarlos Bilbao.. [sp-clang] https://clang.llvm.org 49*1481df6cSCarlos Bilbao.. [sp-icc] https://software.intel.com/en-us/c-compilers 50*1481df6cSCarlos Bilbao.. [sp-gcc-c-dialect-options] https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html 51*1481df6cSCarlos Bilbao.. [sp-gnu-extensions] https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html 52*1481df6cSCarlos Bilbao.. [sp-gcc-attribute-syntax] https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html 53*1481df6cSCarlos Bilbao.. [sp-n2049] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2049.pdf 54