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ă.
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] .
Î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] .
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.
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 . cNinja 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.
Asamblare sisteme de automatizare | |
---|---|