Ninja (byggesystem)

Ninja
Type bygge automatiseringsværktøj [d] oghjælpeprogram
Udvikler Evan Martin [d] [1][2]
Skrevet i C++ [3] og Python
Interface CLI
Operativ system Unix-lignende operativsystem [4] og Microsoft Windows [4]
Interface sprog engelsk
Første udgave 8. maj 2012 [5] [6]
Hardware platform på tværs af platforme
nyeste version
Stat aktiv
Licens Apache-licens 2.0 [2]
Internet side ninja-build.org
 Mediefiler på Wikimedia Commons

Ninja ( MFA [ nˈiɪnʤə ] ; fra  engelsk  -  " ninja ") er et konsolværktøj tværs af platforme , som er et system til at bygge software fra kildekode . Ninja-værktøjet blev udviklet af Evan Martin fra Google [8] [9] .

Ninja er en forbedret og forbedret version af Make -værktøjet . Hovedmålet med dette er at automatisere opbygningen og fremskynde den, samt fremskynde efterfølgende genopbygninger baseret på de filer, der genereres af værktøjet og løse typiske problemer i udvikling på tværs af platforme.

Historie

Ninja-byggesystemet blev designet til at erstatte ældre byggesystemer, der ikke var designet til store projekter med masser af kode. Kodebasen for sådanne projekter som Google Chrome-browseren og Android -operativsystemet udgjorde allerede på det tidspunkt (2007-2012) flere millioner linjer kode og mere end 40 tusinde poster. Oprindeligt brugte udviklerne det Python - baserede SCons -byggesystem , men ifølge Evan Martin viste SCons sig at være for langsomt og tog omkring 40 sekunder at køre, lige før selve bygningen begyndte. Herefter blev der forsøgt at overføre projekter til Make-systemet, men efter at have gennemført de næste test viste det sig, at Make også tog omkring 10 sekunder at lancere og 10-20 sekunder til inkrementelle builds. Derudover forårsagede Make og SCons ofte forskellige problemer med udvikling på tværs af platforme. Dette passede ikke Evan og fik ham til at udvikle et nyt byggesystem, der ikke har sådanne mangler [8] [10] .

Evan Martin annoncerede først planerne og årsagerne bag udviklingen af ​​Ninja på sin blog den 6. februar 2011 [11] . Året efter (8. maj 2012) fandt den første udgivelse af Ninja [12] version 120508 sted og blev placeret på GitHub - lageret [12] .

Om byggesystemet

Under udviklingen fik Ninja-byggesystemet mange nye funktioner, der øgede byggehastigheden [13] [14] [15] . Disse funktioner omfatter:

Evan selv anbefaler ikke at skrive Ninja build scripts i hånden, af den simple grund, at Ninja script syntaks forbliver magen til Make syntaks. Dette blev højst sandsynligt gjort for at forenkle oversættelsen af ​​programmer fra Make til Ninja og af hensyn til hurtig udførelse, da Make har en ret simpel syntaktisk struktur og ligner assemblersprog . Af denne grund kan det være svært at skrive scripts på det af et menneske, mens læsning og parsing af syntaksen efter programmer forbliver trivielt. I stedet for at skrive det i hånden, anbefales det at bruge Ninja i kombination med smartere meta-build-systemer ( GYP , CMake , Meson , etc.), der har en indbygget Ninja-filgenerator [18] .

Filosofi

Groft oversættelse af filosofiafsnittet fra Ninja-manualen.

Evan Martin. "Ninja-byggesystemets manual: Filosofisk overblik" [19] :

Hvor andre assemblersystemer er sprog på højt niveau, sigter Ninja efter at være en assembler.

Opbygning af systemer er langsomme, når de skal træffe beslutninger. Når du er i en redigerings-kompileringscyklus, vil du have, at det skal være så hurtigt som muligt - du vil have, at byggesystemet skal udføre det minimumsarbejde, der er nødvendigt for at bestemme præcis, hvad der skal bygges med det samme.

Ninja indeholder den minimale funktionalitet, der er nødvendig for at beskrive vilkårlige afhængighedsgrafer. Fraværet af deres syntaks gør det umuligt at udtrykke komplekse løsninger.

Originaltekst  (engelsk)[ Visskjule]

Hvor andre byggesystemer er sprog på højt niveau, sigter Ninja efter at være en assembler.

Opbygning af systemer bliver langsommere, når de skal træffe beslutninger. Når du er i en redigerings-kompileringscyklus, vil du have, at det skal være så hurtigt som muligt - du vil have, at byggesystemet skal udføre det mindste arbejde, der er nødvendigt for at finde ud af, hvad der skal bygges med det samme.

Ninja indeholder den mest nødvendige funktionalitet til at beskrive vilkårlige afhængighedsgrafer. Dens mangel på syntaks gør det umuligt at udtrykke komplekse beslutninger.

Eksempelkode

Det følgende er et eksempel på en grundlæggende ".ninja"-fil, der demonstrerer hoveddelen af ​​syntaksen [20] .

cflags = -Væg regel cc kommando = gcc $cflags -c $in -o $out bygge foo.o : cc foo . c

Kritik

Ninja kører som standard bygningen parallelt og bruger alle tilgængelige ressourcer på maskinen. Under visse forhold kan dette føre til kritiske problemer såsom hukommelsesbufferoverløb eller overophedning af en computerenhed, hvilket sker med termiske grænseflader , der ikke er i stand til at fjerne store mængder varme. Som følge heraf øges risikoen for softwarefejl på grund af overophedning af processoren og kan som følge heraf føre til en nødstop af enheden.

Ninja viser ikke en detaljeret log om byggeprocessen af ​​hensyn til eksekveringshastigheden, hvilket gør det vanskeligt at analysere, når man bygger og krydskompilerer så komplekse programmer som operativsystemkernen , compileren og lignende.

Se også

Noter

  1. ↑ Google Grupper : ninja-build 
  2. 1 2 GitHub:  KOPIERING
  3. ↑ The Ninja (byggesystem ) på Open Hub: Languages-side 
  4. 1 2 https://ninja-build.org/manual.html#_using_ninja_for_your_project  _
  5. GitHub: release-120508  (eng.) - 2013.
  6. udgivelse: ninja v120508  (eng.) - 2012.
  7. Udgivelse 1.11.1 - 2022.
  8. 1 2 Udviklere hos Google åbnede Ninja-byggesystemet . OpenNET (8. februar 2011). Hentet 15. januar 2022. Arkiveret fra originalen 16. januar 2022.
  9. Første udgivelse  . GitHub (8. maj 2012). Hentet 15. januar 2022. Arkiveret fra originalen 16. januar 2022.
  10. Evan Martin. Ninja  (engelsk) . aosabook.org . Hentet 15. januar 2022. Arkiveret fra originalen 3. oktober 2019.
  11. Evan Martin. Chromium Notes : Ninja, et nyt byggesystem  . neugierig.org (6. februar 2011). Hentet 15. januar 2022. Arkiveret fra originalen 30. september 2019.
  12. 1 2 Evan Martin. Google-grupper: ninja-build  (engelsk) . Google Grupper (8. maj 2012). Hentet 15. januar 2022. Arkiveret fra originalen 18. januar 2022.
  13. Ninja - lille byggesystem, der ligner lave . OpenNET (18. februar 2011). Hentet 15. januar 2022. Arkiveret fra originalen 16. januar 2022.
  14. Evan Martin. Ninja-byggesystemets manual : Sammenligning med at lave  . ninja-build.org _ Hentet 15. januar 2022. Arkiveret fra originalen 16. januar 2022.
  15. David Rothlis. Benchmarking af Ninja-byggesystemet  . rothlis.net (2016-11-4). Hentet 15. januar 2022. Arkiveret fra originalen 18. januar 2022.
  16. Benchmarks  . _ re2c.org . Hentet 31. januar 2022. Arkiveret fra originalen 31. januar 2022.
  17. Ulya Trofimovich. RE2C: En lexer-generator baseret på lookahead-TDFA  (engelsk) (PDF). re2c.org (2020). Hentet 31. januar 2022. Arkiveret fra originalen 27. januar 2022.
  18. Evan Martin. Ninja-byggesystemets manual: Brug af Ninja til dit  projekt . ninja-build.org _ Hentet 15. januar 2022. Arkiveret fra originalen 16. januar 2022.
  19. Evan Martin. Ninja-byggesystemets manual: Filosofisk overblik  (engelsk) . ninja-build.org _ Hentet 15. januar 2022. Arkiveret fra originalen 16. januar 2022.
  20. Evan Martin. Ninja-byggesystemets manual: Syntakseksempel  (engelsk) . ninja-build.org _ Hentet 15. januar 2022. Arkiveret fra originalen 16. januar 2022.

Links