Ninja (sestavení systému)

Ninja
Typ sestavit automatizační nástroj [d] anástroj
Vývojář Evan Martin [d] [1][2]
Zapsáno v C++ [3] a Python
Rozhraní CLI
Operační systém Operační systém podobný Unixu [4] a Microsoft Windows [4]
Jazyky rozhraní Angličtina
První vydání 8. května 2012 [5] [6]
Hardwarová platforma multiplatformní
Nejnovější verze
Stát aktivní
Licence Licence Apache 2.0 [2]
webová stránka ninja-build.org
 Mediální soubory na Wikimedia Commons

Ninja ( MFA [ n ˈ i ɪ n ʤ ə ]; z  angličtiny  -  „ ninja “) je multiplatformní konzolový nástroj , který je systémem pro vytváření softwaru ze zdrojového kódu . Nástroj Ninja vyvinul Evan Martin z Google [8] [9] .

Ninja je vylepšená a vylepšená verze nástroje Make . Hlavním cílem je zautomatizovat sestavení a urychlit jej, stejně jako urychlit následné přestavby na základě souborů generovaných obslužným programem a řešení typických problémů při vývoji napříč platformami.

Historie

Sestavovací systém Ninja byl navržen tak, aby nahradil starší sestavovací systémy, které nebyly navrženy pro velké projekty se spoustou kódu. Kódová základna takových projektů, jako je prohlížeč Google Chrome a operační systém Android , již v té době (2007-2012) činila několik milionů řádků kódu a více než 40 tisíc záznamů. Zpočátku vývojáři používali systém sestavení SCons založený na Pythonu , ale podle Evana Martina se SCons ukázaly být příliš pomalé a jejich spuštění trvalo asi 40 sekund těsně před zahájením samotného sestavení. Poté byl učiněn pokus o převedení projektů do systému Make, ale po provedení dalších testů se ukázalo, že spuštění Make také trvalo asi 10 sekund a inkrementální sestavení 10-20 sekund. Make a SCons navíc často způsobovaly různé problémy s vývojem napříč platformami. To Evanovi nevyhovovalo a přimělo ho k vývoji nového build systému, který takové nedostatky nemá [8] [10] .

Evan Martin poprvé oznámil plány a důvody vývoje Ninja na svém blogu 6. února 2011 [11] . Následující rok (8. května 2012) proběhlo první vydání Ninja [12] verze 120508 a bylo umístěno do úložiště GitHub [12] .

O systému sestavení

Během vývoje získal systém sestavení Ninja mnoho nových funkcí, které zvýšily rychlost sestavení [13] [14] [15] . Mezi tyto funkce patří:

Sám Evan nedoporučuje psát skripty pro vytváření Ninja ručně, a to z prostého důvodu, že syntaxe skriptů Ninja zůstává podobná syntaxi Make. S největší pravděpodobností to bylo provedeno za účelem zjednodušení překladu programů z Make do Ninja a z důvodu rychlosti provádění, protože Make má poměrně jednoduchou syntaktickou strukturu a je podobný jazyku symbolických instrukcí . Z tohoto důvodu může být psaní skriptů pro člověka obtížné, zatímco čtení a analýza syntaxe programy zůstává triviální. Místo ručního psaní se doporučuje používat Ninja v kombinaci s chytřejšími meta-build systémy ( GYP , CMake , Meson atd.), které mají vestavěný generátor souborů Ninja [18] .

Filosofie

Hrubý překlad části filozofie z Ninja manuálu.

Evan Martin. "Příručka k systému sestavení Ninja: Filosofický přehled" [19] :

Tam, kde jsou jiné montážní systémy jazyky na vysoké úrovni, Ninja se snaží být assemblerem.

Sestavování systémů je pomalé, když potřebují dělat rozhodnutí. Když se nacházíte v cyklu úprav a kompilace, chcete, aby to bylo co nejrychlejší – chcete, aby systém sestavování vykonal minimum práce nutné k tomu, aby přesně určil, co je třeba okamžitě sestavit.

Ninja obsahuje minimální funkcionalitu potřebnou k popisu libovolných grafů závislostí. Absence jejich syntaxe znemožňuje vyjádření složitých řešení.

Původní text  (anglicky)[ zobrazitskrýt]

Tam, kde ostatní sestavovací systémy jsou jazyky na vysoké úrovni, Ninja si klade za cíl být assemblerem.

Sestavování systémů je pomalé, když potřebují dělat rozhodnutí. Když se nacházíte v cyklu úprav a kompilace, chcete, aby to bylo co nejrychlejší – chcete, aby systém sestavování vykonal minimální práci nezbytnou k tomu, aby zjistil, co je třeba sestavit okamžitě.

Ninja obsahuje nejskrytější funkce nezbytné k popisu libovolných grafů závislostí. Jeho nedostatek syntaxe znemožňuje vyjádřit složitá rozhodnutí.

Ukázkový kód

Následuje příklad základního souboru ".ninja" demonstrující hlavní část syntaxe [20] .

cflags = -Zeď pravidlo cc příkaz = gcc $cflags -c $in -o $out stavět foo.o : cc foo . C

Kritika

Ninja spouští sestavení ve výchozím nastavení paralelně a využívá všechny dostupné zdroje na stroji. Za určitých podmínek to může vést ke kritickým problémům, jako je přetečení vyrovnávací paměti nebo přehřátí výpočetního zařízení, k čemuž dochází u tepelných rozhraní , která nejsou schopna odvádět velké množství tepla. V důsledku toho se zvyšuje riziko softwarových chyb v důsledku přehřátí procesoru a v důsledku toho může dojít k nouzovému vypnutí zařízení.

Ninja nezobrazuje podrobný protokol o procesu sestavování kvůli rychlosti provádění, což ztěžuje analýzu při sestavování a křížové kompilaci tak složitých programů, jako je jádro operačního systému , kompilátor a podobně.

Viz také

Poznámky

  1. ↑ Skupiny Google : ninja-build 
  2. 1 2 GitHub:  KOPÍROVÁNÍ
  3. ↑ Ninja (sestavení systému ) na Open Hub: Stránka jazyků 
  4. 1 2 https://ninja-build.org/manual.html#_using_ninja_for_your_project  _
  5. GitHub: vydání-120508  (anglicky) - 2013.
  6. vydání: ninja v120508  (anglicky) - 2012.
  7. Vydání 1.11.1 – 2022.
  8. 1 2 Vývojáři ve společnosti Google vytvořili open-source systém sestavení Ninja . OpenNET (8. února 2011). Získáno 15. ledna 2022. Archivováno z originálu 16. ledna 2022.
  9. První vydání  . GitHub (8. května 2012). Získáno 15. ledna 2022. Archivováno z originálu 16. ledna 2022.
  10. Evan Martin. Ninja  (anglicky) . aosabook.org . Získáno 15. ledna 2022. Archivováno z originálu dne 3. října 2019.
  11. Evan Martin. Chromium Notes : Ninja, nový systém sestavování  . neugierig.org (6. února 2011). Získáno 15. ledna 2022. Archivováno z originálu dne 30. září 2019.
  12. 1 2 Evan Martin. Skupiny Google: ninja-build  (anglicky) . Skupiny Google (8. května 2012). Získáno 15. ledna 2022. Archivováno z originálu 18. ledna 2022.
  13. Ninja - malý stavební systém podobný make . OpenNET (18. února 2011). Získáno 15. ledna 2022. Archivováno z originálu 16. ledna 2022.
  14. Evan Martin. Návod k sestavení systému Ninja : Porovnání k provedení  . ninja-build.org _ Získáno 15. ledna 2022. Archivováno z originálu 16. ledna 2022.
  15. David Rothlis. Srovnávání sestavení systému Ninja  . rothlis.net (2016-11-4). Získáno 15. ledna 2022. Archivováno z originálu 18. ledna 2022.
  16. Benchmarky  . _ re2c.org . Získáno 31. ledna 2022. Archivováno z originálu dne 31. ledna 2022.
  17. Ulja Trofimovič. RE2C: Lexer generátor založený na lookahead-TDFA  (anglicky) (PDF). re2c.org (2020). Získáno 31. ledna 2022. Archivováno z originálu dne 27. ledna 2022.
  18. Evan Martin. Návod k sestavení systému Ninja: Použití Ninja pro váš  projekt . ninja-build.org _ Získáno 15. ledna 2022. Archivováno z originálu 16. ledna 2022.
  19. Evan Martin. Návod k sestavení systému Ninja: Filosofický přehled  (anglicky) . ninja-build.org _ Získáno 15. ledna 2022. Archivováno z originálu 16. ledna 2022.
  20. Evan Martin. Návod k sestavení systému Ninja: Příklad syntaxe  (anglicky) . ninja-build.org _ Získáno 15. ledna 2022. Archivováno z originálu 16. ledna 2022.

Odkazy