Nindzsa | |
---|---|
Típusú | build automatizálási eszköz [d] éssegédprogram |
Fejlesztő | Evan Martin [d] [1][2] |
Beírva | C++ [3] és Python |
Felület | CLI |
Operációs rendszer | Unix-szerű operációs rendszer [4] és Microsoft Windows [4] |
Interfész nyelvek | angol |
Első kiadás | 2012. május 8. [5] [6] |
Hardver platform | platformközi |
legújabb verzió |
|
Állapot | aktív |
Engedély | Apache License 2.0 [2] |
Weboldal | ninja-build.org _ |
Médiafájlok a Wikimedia Commons oldalon |
A Ninja ( MFA [ nˈ i ɪ n ʤ ə ]; angolul - " ninja ") egy többplatformos konzol - segédprogram , amely szoftverek forráskódból történő összeállítására szolgál . A Ninja segédprogramot Evan Martin, a Google fejlesztette [8] [9] .
A Ninja a Make segédprogram továbbfejlesztett és továbbfejlesztett változata . Amelynek fő célja a build automatizálása és felgyorsítása, valamint a későbbi újraépítések felgyorsítása a segédprogram által generált fájlok alapján és a cross-platform fejlesztések tipikus problémáinak megoldása.
A Ninja build rendszert arra tervezték, hogy leváltsa azokat a régebbi építési rendszereket, amelyeket nem nagy projektekhez terveztek sok kóddal. Az olyan projektek kódbázisa, mint a Google Chrome böngésző és az Android operációs rendszer már ekkor (2007-2012) több millió kódsort és több mint 40 ezer bejegyzést tett ki. Kezdetben a fejlesztők a Python - alapú SCons build rendszert használták , de Evan Martin szerint az SCons túl lassúnak bizonyult, és körülbelül 40 másodpercbe telt, mielőtt maga a build elkezdődött volna. Ezt követően kísérletet tettek projektek átvitelére a Make rendszerre, de a következő tesztek elvégzése után kiderült, hogy a Make-nak is körülbelül 10 másodpercig tartott az indítása és 10-20 másodpercig a növekményes buildek. Ezenkívül a Make és az SCons gyakran okozott különféle problémákat a platformok közötti fejlesztés során. Ez nem felelt meg Evannek, és arra késztette, hogy dolgozzon ki egy új build rendszert, amely nem rendelkezik ilyen hiányosságokkal [8] [10] .
Evan Martin először 2011. február 6-án jelentette be blogjában a Ninja fejlesztésének terveit és okait [11] . A következő évben (2012. május 8-án) megjelent a Ninja [12] 120508-as verziójának első kiadása, amely a GitHub tárhelyére került [12] .
A fejlesztés során a Ninja build rendszer számos új funkciót kapott, amelyek növelték az építési sebességet [13] [14] [15] . Ezek a funkciók a következők:
Maga Evan nem javasolja a Ninja build szkriptek kézi megírását, azon egyszerű oknál fogva, hogy a nindzsa szkriptek szintaxisa hasonló marad a Make szintaxishoz. Valószínűleg ezt a programok Make-ról Ninja-ra történő fordításának egyszerűsítése és a végrehajtás gyorsasága érdekében tették, mivel a Make meglehetősen egyszerű szintaktikai szerkezettel rendelkezik, és hasonló az assembly nyelvhez . Emiatt nehéz lehet az ember által ráírni a szkripteket, míg a szintaxis programok általi olvasása és elemzése triviális marad. A kézi írás helyett javasolt a Ninja használata intelligensebb meta-build rendszerekkel ( GYP , CMake , Meson stb.) kombinálva, amelyek beépített Ninja fájlgenerátorral rendelkeznek [18] .
A filozófia rész durva fordítása a Ninja kézikönyvből.
Evan Martin. "A Ninja build rendszer kézikönyve: Filozófiai áttekintés" [19] :
Ahol más összeállítási rendszerek magas szintű nyelvek, a Ninja arra törekszik, hogy assembler legyen.
A rendszerépítés lassú, amikor döntéseket kell hozniuk. Ha szerkesztés-fordítási ciklusban van, azt szeretné, ha a lehető leggyorsabb lenne – azt szeretné, ha az összeállítási rendszer elvégezné a szükséges minimális munkát annak meghatározásához, hogy pontosan mit kell azonnal felépíteni.
A Ninja tartalmazza a tetszőleges függőségi gráfok leírásához szükséges minimális funkcionalitást. Szintaxisuk hiánya lehetetlenné teszi az összetett megoldások kifejezését.
Eredeti szöveg (angol)[ showelrejt]Ahol más build rendszerek magas szintű nyelvek, ott a Ninja összeszerelő akar lenni.
Az építési rendszerek lelassulnak, amikor döntéseket kell hozniuk. Amikor egy szerkesztés-fordítás ciklusban van, azt szeretné, ha a lehető leggyorsabb lenne – azt szeretné, ha az összeállítási rendszer elvégezné a szükséges minimális munkát, hogy kitalálja, mit kell azonnal felépíteni.
A Ninja tartalmazza a tetszőleges függőségi gráfok leírásához szükséges legcsekélyebb funkcionalitást. A szintaxis hiánya lehetetlenné teszi az összetett döntések kifejezését.
A következő példa egy alapvető ".ninja" fájlra, amely bemutatja a szintaxis fő részét [20] .
cflags = -Fal szabály cc parancs = gcc $cflags -c $in -o $out build foo.o : cc foo . cA Ninja alapértelmezés szerint párhuzamosan futtatja a buildet, és felhasználja a gépen elérhető összes erőforrást. Bizonyos körülmények között ez olyan kritikus problémákhoz vezethet, mint például a memóriapuffer túlcsordulása vagy a számítástechnikai eszköz túlmelegedése, ami olyan termikus interfészeknél fordul elő , amelyek nem képesek nagy mennyiségű hőt eltávolítani. Ennek eredményeként megnő a szoftverhibák kockázata a processzor túlmelegedése miatt, és ennek eredményeként az eszköz vészleállításához vezethet.
A Ninja a végrehajtási sebesség érdekében nem jelenít meg részletes naplót az építési folyamatról, ami megnehezíti az elemzést olyan összetett programok felépítése és keresztfordítása során, mint az operációs rendszer kernel , fordító és hasonlók.
Szerelési automatizálási rendszerek | |
---|---|