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.
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] .
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] .
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í.
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 . CNinja 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ě.
Montážní automatizační systémy | |
---|---|