Ninja (rendszer kiépítése)

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 [ 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.

Történelem

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 build rendszerről

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] .

Filozófia

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.

Mintakód

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 . c

Kritika

A 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.

Lásd még

Jegyzetek

  1. ↑ Google Csoportok : ninja-build 
  2. 1 2 GitHub:  MÁSOLÁS
  3. ↑ A Ninja (rendszer kiépítése ) az Open Hub: Nyelvek oldalon 
  4. 1 2 https://ninja-build.org/manual.html#_using_ninja_for_your_project  _
  5. GitHub: release-120508  (eng.) - 2013.
  6. kiadás: ninja v120508  (eng.) - 2012.
  7. Kiadás 1.11.1 – 2022.
  8. 1 2 A Google fejlesztői nyílt forráskódúak a Ninja build rendszert . OpenNET (2011. február 8.). Letöltve: 2022. január 15. Az eredetiből archiválva : 2022. január 16..
  9. Első kiadás  . GitHub (2012. május 8.). Letöltve: 2022. január 15. Az eredetiből archiválva : 2022. január 16..
  10. Evan Martin. Ninja  (angolul) . aosabook.org . Letöltve: 2022. január 15. Az eredetiből archiválva : 2019. október 3..
  11. Evan Martin. Chromium Megjegyzések : Ninja, egy új felépítésű rendszer  . neugierig.org (2011. február 6.). Letöltve: 2022. január 15. Az eredetiből archiválva : 2019. szeptember 30.
  12. 1 2 Evan Martin. Google Csoportok: ninja-build  (angol) . Google Csoportok (2012. május 8.). Letöltve: 2022. január 15. Az eredetiből archiválva : 2022. január 18..
  13. Ninja - kis építésű rendszer, hasonló a készítéshez . OpenNET (2011. február 18.). Letöltve: 2022. január 15. Az eredetiből archiválva : 2022. január 16..
  14. Evan Martin. A Ninja build rendszer kézikönyve : Összehasonlítás a Make-val  . ninja-build.org _ Letöltve: 2022. január 15. Az eredetiből archiválva : 2022. január 16..
  15. David Rothlis. A Ninja build rendszer  összehasonlítása . rothlis.net (2016-11-4). Letöltve: 2022. január 15. Az eredetiből archiválva : 2022. január 18..
  16. Referenciaértékek  _ _ re2c.org . Letöltve: 2022. január 31. Az eredetiből archiválva : 2022. január 31.
  17. Ulja Trofimovics. RE2C: Lookahead-TDFA  (angol) (PDF) alapú lexergenerátor. re2c.org (2020). Letöltve: 2022. január 31. Az eredetiből archiválva : 2022. január 27..
  18. Evan Martin. A Ninja build rendszer kézikönyve: A Ninja használata a  projekthez . ninja-build.org _ Letöltve: 2022. január 15. Az eredetiből archiválva : 2022. január 16..
  19. Evan Martin. A Ninja build rendszer kézikönyve: Filozófiai áttekintés  (angolul) . ninja-build.org _ Letöltve: 2022. január 15. Az eredetiből archiválva : 2022. január 16..
  20. Evan Martin. A Ninja build rendszer kézikönyve: Szintaxis példa  (angol) . ninja-build.org _ Letöltve: 2022. január 15. Az eredetiből archiválva : 2022. január 16..

Linkek