Ninja (sistem de construcție)

Ninja
Tip de construiți instrument de automatizare [d] șiutilitar
Dezvoltator Evan Martin [d] [1][2]
Scris in C++ [3] și Python
Interfață CLI
Sistem de operare Sistem de operare asemănător Unix [4] și Microsoft Windows [4]
Limbi de interfață Engleză
Prima editie 8 mai 2012 [5] [6]
Platformă hardware multiplatformă
ultima versiune
Stat activ
Licență Licență Apache 2.0 [2]
Site-ul web ninja-build.org
 Fișiere media la Wikimedia Commons

Ninja ( MFA [ n ˈ i ɪ n ʤ ə ]; din  engleză  -  " ninja ") este un utilitar de consolă multiplatformă care este un sistem pentru construirea de software din codul sursă . Utilitarul Ninja a fost dezvoltat de Evan Martin de la Google [8] [9] .

Ninja este o versiune îmbunătățită și îmbunătățită a utilitarului Make . Scopul principal este de a automatiza construcția și de a o accelera, precum și de a accelera reconstrucțiile ulterioare pe baza fișierelor generate de utilitar și de a rezolva probleme tipice în dezvoltarea multiplatformă.

Istorie

Sistemul de construcție Ninja a fost conceput pentru a înlocui sistemele de construcție vechi care nu au fost concepute pentru proiecte mari cu mult cod. Baza de cod a unor proiecte precum browserul Google Chrome și sistemul de operare Android deja la acel moment (2007-2012) se ridica la câteva milioane de linii de cod și peste 40 de mii de intrări. Inițial, dezvoltatorii au folosit sistemul de compilare SCons bazat pe Python , dar conform lui Evan Martin, SCons s-a dovedit a fi prea lent și a durat aproximativ 40 de secunde pentru a rula chiar înainte de a începe construcția în sine. După aceea, s-a încercat transferul proiectelor în sistemul Make, dar după efectuarea următoarelor teste , s-a dovedit că Make-ul a durat, de asemenea, aproximativ 10 secunde pentru lansare și 10-20 de secunde pentru construirea incrementală. În plus, Make și SCons au cauzat adesea diverse probleme cu dezvoltarea multiplatformă. Acest lucru nu i s-a potrivit lui Evan și l-a determinat să dezvolte un nou sistem de construcție care nu are astfel de neajunsuri [8] [10] .

Evan Martin a anunțat pentru prima dată planurile și motivele din spatele dezvoltării Ninja pe blogul său pe 6 februarie 2011 [11] . În anul următor (8 mai 2012) a avut loc prima lansare a Ninja [12] versiunea 120508 și a fost plasată în depozitul GitHub [12] .

Despre sistemul de construcție

În timpul dezvoltării, sistemul de construcție Ninja a dobândit multe caracteristici noi care au crescut viteza de construcție [13] [14] [15] . Aceste caracteristici includ:

Evan însuși nu recomandă să scrieți manual scripturile Ninja build , din simplul motiv că sintaxa script-ului Ninja rămâne similară cu sintaxa Make. Cel mai probabil, acest lucru a fost făcut pentru a simplifica traducerea programelor din Make în Ninja și de dragul vitezei de execuție, deoarece Make are o structură sintactică destul de simplă și este similară cu limbajul de asamblare . Din acest motiv, scrierea de scripturi pe el de către un om poate fi dificilă, în timp ce citirea și analizarea sintaxei de către programe rămâne trivială. În loc să-l scrieți de mână, este recomandat să utilizați Ninja în combinație cu sisteme meta-build mai inteligente ( GYP , CMake , Meson , etc.) care au un generator de fișiere Ninja încorporat [18] .

Filosofie

Traducere aproximativă a secțiunii de filosofie din manualul Ninja.

Evan Martin. „Manualul sistemului de construcție Ninja: Prezentare generală filozofică” [19] :

Acolo unde alte sisteme de asamblare sunt limbaje de nivel înalt, Ninja își propune să fie un asamblator.

Sistemele de construcție sunt lente atunci când trebuie să ia decizii. Când vă aflați într-un ciclu de editare-compilare, doriți să fie cât mai rapid posibil - doriți ca sistemul de construire să facă munca minimă necesară pentru a determina exact ce trebuie construit imediat.

Ninja conține funcționalitatea minimă necesară pentru a descrie graficele de dependență arbitrare. Absența sintaxei lor face imposibilă exprimarea soluțiilor complexe.

Text original  (engleză)[ arataascunde]

Acolo unde alte sisteme de construcție sunt limbaje de nivel înalt, Ninja își propune să fie un asamblator.

Sistemele de construcție devin lente atunci când trebuie să ia decizii. Când vă aflați într-un ciclu de editare-compilare, doriți să fie cât mai rapid posibil - doriți ca sistemul de construire să facă munca minimă necesară pentru a înțelege ce trebuie construit imediat.

Ninja conține cea mai simplă funcționalitate necesară pentru a descrie grafice de dependență arbitrare. Lipsa sa de sintaxă face imposibilă exprimarea deciziilor complexe.

Exemplu de cod

Următorul este un exemplu de fișier de bază „.ninja” care demonstrează partea principală a sintaxei [20] .

cflags = -Wall regula cc comanda = gcc $cflags -c $in -o $out construi foo.o : cc foo . c

Critica

Ninja rulează versiunea în paralel în mod implicit și folosește toate resursele disponibile pe mașină. În anumite condiții, acest lucru poate duce la probleme critice, cum ar fi depășirea memoriei tampon sau supraîncălzirea unui dispozitiv de calcul, ceea ce se întâmplă cu interfețele termice care nu pot elimina cantități mari de căldură. Ca urmare, riscul erorilor software crește din cauza supraîncălzirii procesorului și, ca urmare, poate duce la o oprire de urgență a dispozitivului.

Ninja nu afișează un jurnal detaliat despre procesul de construire, de dragul vitezei de execuție, ceea ce face dificilă analizarea la construirea și compilarea încrucișată a unor programe complexe precum nucleul sistemului de operare , compilatorul și altele asemenea.

Vezi și

Note

  1. ↑ Grupuri Google : ninja-build 
  2. 1 2 GitHub:  COPIERE
  3. ↑ The Ninja (sistem de construcție ) pe Open Hub: Pagina de limbi 
  4. 1 2 https://ninja-build.org/manual.html#_using_ninja_for_your_project  _
  5. GitHub: release-120508  (eng.) - 2013.
  6. lansare: ninja v120508  (eng.) - 2012.
  7. Versiunea 1.11.1 - 2022.
  8. 1 2 Dezvoltatorii de la Google au folosit sistemul de construcție Ninja . OpenNET (8 februarie 2011). Preluat la 15 ianuarie 2022. Arhivat din original la 16 ianuarie 2022.
  9. Prima lansare  . GitHub (8 mai 2012). Preluat la 15 ianuarie 2022. Arhivat din original la 16 ianuarie 2022.
  10. Evan Martin. Ninja  (engleză) . aosabook.org . Preluat la 15 ianuarie 2022. Arhivat din original la 3 octombrie 2019.
  11. Evan Martin. Note Chromium : Ninja, un nou sistem de construcție  . neugierig.org (6 februarie 2011). Preluat la 15 ianuarie 2022. Arhivat din original la 30 septembrie 2019.
  12. 1 2 Evan Martin. Grupuri Google: ninja-build  (engleză) . Grupuri Google (8 mai 2012). Preluat la 15 ianuarie 2022. Arhivat din original la 18 ianuarie 2022.
  13. Ninja - sistem de construcție mic similar cu marca . OpenNET (18 februarie 2011). Preluat la 15 ianuarie 2022. Arhivat din original la 16 ianuarie 2022.
  14. Evan Martin. Manualul sistemului de construcție Ninja : Comparație cu realizarea  . ninja-build.org _ Preluat la 15 ianuarie 2022. Arhivat din original la 16 ianuarie 2022.
  15. David Rothlis. Evaluarea comparativă a sistemului de construcție Ninja  . rothlis.net (2016-11-4). Preluat la 15 ianuarie 2022. Arhivat din original la 18 ianuarie 2022.
  16. Benchmarks  . _ re2c.org . Preluat la 31 ianuarie 2022. Arhivat din original la 31 ianuarie 2022.
  17. Ulya Trofimovici. RE2C: Un generator de lexer bazat pe lookahead-TDFA  (engleză) (PDF). re2c.org (2020). Preluat la 31 ianuarie 2022. Arhivat din original la 27 ianuarie 2022.
  18. Evan Martin. Manualul sistemului de construcție Ninja: Utilizarea Ninja pentru  proiectul dvs. ninja-build.org _ Preluat la 15 ianuarie 2022. Arhivat din original la 16 ianuarie 2022.
  19. Evan Martin. Manualul sistemului de construcție Ninja: Prezentare generală filozofică  (engleză) . ninja-build.org _ Preluat la 15 ianuarie 2022. Arhivat din original la 16 ianuarie 2022.
  20. Evan Martin. Manualul sistemului de construcție Ninja: exemplu de sintaxă  (engleză) . ninja-build.org _ Preluat la 15 ianuarie 2022. Arhivat din original la 16 ianuarie 2022.

Link -uri