ninja | |
---|---|
Tipo de | herramienta de automatización de compilación [d] yutilidad |
Desarrollador | Evan Martín [d] [1][2] |
Escrito en | C++ [3] y Python |
Interfaz | CLI |
Sistema operativo | Sistema operativo similar a Unix [4] y Microsoft Windows [4] |
Idiomas de la interfaz | inglés |
Primera edición | 8 de mayo de 2012 [5] [6] |
plataforma de hardware | multiplataforma |
ultima versión |
|
Estado | activo |
Licencia | Licencia Apache 2.0 [2] |
Sitio web | ninja-build.org _ |
Archivos multimedia en Wikimedia Commons |
Ninja ( MFA [ n ˈ i ɪ n ʤ ə ]; del inglés - " ninja ") es una utilidad de consola multiplataforma que es un sistema para crear software a partir del código fuente . La utilidad Ninja fue desarrollada por Evan Martin de Google [8] [9] .
Ninja es una versión mejorada y mejorada de la utilidad Make . El objetivo principal es automatizar la compilación y acelerarla, así como acelerar las reconstrucciones posteriores en función de los archivos generados por la utilidad y resolver problemas típicos en el desarrollo multiplataforma.
El sistema de compilación Ninja fue diseñado para reemplazar los sistemas de compilación heredados que no fueron diseñados para grandes proyectos con mucho código. El código base de proyectos como el navegador Google Chrome y el sistema operativo Android ya en ese momento (2007-2012) ascendía a varios millones de líneas de código y más de 40 mil entradas. Inicialmente, los desarrolladores utilizaron el sistema de compilación SCons basado en Python , pero según Evan Martin, SCons resultó ser demasiado lento y tardó unos 40 segundos en ejecutarse justo antes de que comenzara la compilación. Después de eso, se intentó transferir proyectos al sistema Make, pero después de realizar las siguientes pruebas , resultó que Make también tardó unos 10 segundos en iniciarse y entre 10 y 20 segundos en compilaciones incrementales. Además, Make y SCons a menudo causaron varios problemas con el desarrollo multiplataforma. Esto no convenía a Evan y lo impulsó a desarrollar un nuevo sistema de compilación que no tiene tales deficiencias [8] [10] .
Evan Martin anunció por primera vez los planes y las razones detrás del desarrollo de Ninja en su blog el 6 de febrero de 2011 [11] . Al año siguiente (8 de mayo de 2012) tuvo lugar el primer lanzamiento de Ninja [12] versión 120508 y se colocó en el repositorio de GitHub [12] .
Durante el desarrollo, el sistema de compilación Ninja adquirió muchas características nuevas que aumentaron la velocidad de compilación [13] [14] [15] . Estas características incluyen:
Evan mismo no recomienda escribir scripts de compilación Ninja a mano, por la sencilla razón de que la sintaxis del script Ninja sigue siendo similar a la sintaxis Make. Lo más probable es que esto se haya hecho para simplificar la traducción de programas de Make a Ninja y en aras de la velocidad de ejecución, ya que Make tiene una estructura sintáctica bastante simple y es similar al lenguaje ensamblador . Por esta razón, escribir scripts en él por parte de un humano puede ser difícil, mientras que leer y analizar la sintaxis por parte de los programas sigue siendo trivial. En lugar de escribirlo a mano, se recomienda usar Ninja en combinación con sistemas de metaconstrucción más inteligentes ( GYP , CMake , Meson , etc.) que tienen un generador de archivos Ninja incorporado [18] .
Traducción aproximada de la sección de filosofía del manual Ninja.
Eva Martín. "El manual del sistema de compilación Ninja: descripción general filosófica" [19] :
Donde otros sistemas de ensamblaje son lenguajes de alto nivel, Ninja pretende ser un ensamblador.
Los sistemas de compilación son lentos cuando necesitan tomar decisiones. Cuando se encuentra en un ciclo de edición y compilación, desea que sea lo más rápido posible: desea que el sistema de compilación haga el trabajo mínimo necesario para determinar exactamente lo que se debe compilar de inmediato.
Ninja contiene la funcionalidad mínima necesaria para describir gráficos de dependencia arbitrarios. La ausencia de su sintaxis hace que sea imposible expresar soluciones complejas.
Texto original (inglés)[ mostrarocultar]Donde otros sistemas de compilación son lenguajes de alto nivel, Ninja pretende ser un ensamblador.
Los sistemas de compilación se vuelven lentos cuando necesitan tomar decisiones. Cuando se encuentra en un ciclo de edición y compilación, desea que sea lo más rápido posible: desea que el sistema de compilación haga el trabajo mínimo necesario para descubrir qué se debe compilar de inmediato.
Ninja contiene la funcionalidad mínima necesaria para describir gráficos de dependencia arbitrarios. Su falta de sintaxis hace que sea imposible expresar decisiones complejas.
El siguiente es un ejemplo de un archivo ".ninja" básico que demuestra la parte principal de la sintaxis [20] .
cflags = -Pared regla cc comando = gcc $cflags -c $in -o $out construir foo.o : cc foo . CNinja ejecuta la compilación en paralelo de forma predeterminada y utiliza todos los recursos disponibles en la máquina. En determinadas condiciones, esto puede provocar problemas críticos, como el desbordamiento del búfer de memoria o el sobrecalentamiento de un dispositivo informático, lo que sucede con las interfaces térmicas que no pueden eliminar grandes cantidades de calor. Como resultado, aumenta el riesgo de errores de software debido al sobrecalentamiento del procesador y, como resultado, puede provocar un apagado de emergencia del dispositivo.
Ninja no muestra un registro detallado sobre el proceso de construcción, en aras de la velocidad de ejecución, lo que dificulta el análisis al construir y compilar de forma cruzada programas tan complejos como el kernel del sistema operativo , el compilador y similares.
Sistemas de automatización de montaje | |
---|---|