Ninja (rakenna järjestelmä)

Ninja
Tyyppi rakentaa automaatiotyökalu [d] jaapuohjelma
Kehittäjä Evan Martin [d] [1][2]
Sisään kirjoitettu C++ [3] ja Python
Käyttöliittymä CLI
Käyttöjärjestelmä Unix-tyyppinen käyttöjärjestelmä [4] ja Microsoft Windows [4]
Käyttöliittymäkielet Englanti
Ensimmäinen painos 8. toukokuuta 2012 [5] [6]
Laitteistoalusta cross-platform
uusin versio
Osavaltio aktiivinen
Lisenssi Apache License 2.0 [2]
Verkkosivusto ninja-build.org
 Mediatiedostot Wikimedia Commonsissa

Ninja ( MFA [ n ˈ i ɪ n ʤ ə ];  englanniksi  " ninja  " ) on monialustainen konsoliapuohjelma , joka on järjestelmä ohjelmistojen rakentamiseen lähdekoodista . Ninja-apuohjelman on kehittänyt Googlen Evan Martin [8] [9] .

Ninja on paranneltu ja paranneltu versio Make -apuohjelmasta . Sen päätavoite on automatisoida ja nopeuttaa rakentamista sekä nopeuttaa myöhempiä uudelleenrakennuksia apuohjelman luomien tiedostojen perusteella ja ratkaista tyypillisiä cross-platform-kehityksen ongelmia.

Historia

Ninja-rakennusjärjestelmä on suunniteltu korvaamaan vanhat rakennusjärjestelmät, joita ei ole suunniteltu suuriin, paljon koodia sisältäviin projekteihin. Sellaisten projektien kuin Google Chrome -selaimen ja Android - käyttöjärjestelmän koodikanta oli jo tuolloin (2007-2012) useita miljoonia koodirivejä ja yli 40 tuhatta merkintää. Aluksi kehittäjät käyttivät Python - pohjaista SCons - koontijärjestelmää, mutta Evan Martinin mukaan SConit osoittautuivat liian hitaiksi ja kesti noin 40 sekuntia ajaa juuri ennen kuin itse rakentaminen alkoi. Sen jälkeen yritettiin siirtää projekteja Make-järjestelmään, mutta seuraavien testien jälkeen kävi ilmi, että Maken käynnistyminen kesti myös noin 10 sekuntia ja 10-20 sekuntia inkrementaalisiin koontirakennuksiin. Lisäksi Make ja SCons aiheuttivat usein erilaisia ​​​​ongelmia alustojen välisessä kehityksessä. Tämä ei sopinut Evanille ja sai hänet kehittämään uuden rakennusjärjestelmän, jossa ei ole tällaisia ​​puutteita [8] [10] .

Evan Martin ilmoitti ensimmäisen kerran Ninjan kehityksen taustalla olevista suunnitelmista ja syistä blogissaan 6. helmikuuta 2011 [11] . Seuraavana vuonna (8. toukokuuta 2012) Ninja [12] -version 120508 ensimmäinen julkaisu julkaistiin ja se sijoitettiin GitHub - arkistoon [12] .

Tietoja rakennusjärjestelmästä

Kehityksen aikana Ninja-rakennusjärjestelmä sai monia uusia ominaisuuksia, jotka lisäsivät rakennusnopeutta [13] [14] [15] . Näitä ominaisuuksia ovat:

Evan itse ei suosittele Ninja build -skriptien kirjoittamista käsin siitä yksinkertaisesta syystä, että Ninja-skriptin syntaksi on samanlainen kuin Make syntax. Todennäköisesti tämä tehtiin ohjelmien kääntämisen yksinkertaistamiseksi Makesta Ninjaksi ja suoritusnopeuden vuoksi, koska Makella on melko yksinkertainen syntaktinen rakenne ja se on samanlainen kuin kokoonpanokieli . Tästä syystä skriptien kirjoittaminen siihen voi olla vaikeaa ihmisen toimesta, kun taas syntaksin lukeminen ja jäsentäminen ohjelmien avulla on triviaalia. Käsin kirjoittamisen sijaan on suositeltavaa käyttää Ninjaa yhdessä älykkäiden meta-build-järjestelmien kanssa ( GYP , CMake , Meson jne.), joissa on sisäänrakennettu Ninja-tiedostogeneraattori [18] .

Filosofia

Karkea käännös filosofian osiosta Ninja-käsikirjasta.

Evan Martin. "The Ninja build system manual: Filosofinen yleiskatsaus" [19] :

Siellä missä muut kokoonpanojärjestelmät ovat korkean tason kieliä, Ninja pyrkii olemaan kokoaja.

Rakennusjärjestelmät ovat hitaita, kun niiden on tehtävä päätöksiä. Kun olet muokkaus-käännössyklissä, haluat sen olevan mahdollisimman nopea - haluat rakennusjärjestelmän tekevän mahdollisimman vähän työtä määrittääkseen tarkalleen, mitä on rakennettava välittömästi.

Ninja sisältää vähimmäistoiminnot, joita tarvitaan mielivaltaisten riippuvuuskaavioiden kuvaamiseen. Niiden syntaksin puuttuminen tekee mahdottomaksi ilmaista monimutkaisia ​​ratkaisuja.

Alkuperäinen teksti  (englanniksi)[ näytäpiilottaa]

Kun muut rakennusjärjestelmät ovat korkean tason kieliä, Ninja pyrkii olemaan kokoaja.

Rakennusjärjestelmät hidastuvat, kun niiden on tehtävä päätöksiä. Kun olet muokkaus-käännössyklissä, haluat sen olevan mahdollisimman nopea - haluat rakennusjärjestelmän tekevän mahdollisimman vähän työtä selvittääkseen, mitä pitää rakentaa välittömästi.

Ninja sisältää vähiten tarvittavat toiminnot mielivaltaisten riippuvuuskaavioiden kuvaamiseen. Sen syntaksin puute tekee monimutkaisten päätösten ilmaisemisen mahdottomaksi.

Esimerkkikoodi

Seuraavassa on esimerkki ".ninja"-perustiedostosta, joka esittää syntaksin pääosan [20] .

cflags = -Seinä sääntö cc komento = gcc $cflags -c $in -o $out rakentaa foo.o : cc foo . c

Kritiikki

Ninja suorittaa koontiversion oletusarvoisesti rinnakkain ja käyttää kaikkia koneen käytettävissä olevia resursseja. Tietyissä olosuhteissa tämä voi johtaa kriittisiin ongelmiin, kuten muistipuskurin ylivuotoon tai tietokonelaitteen ylikuumenemiseen, mitä tapahtuu lämpörajapinnoissa , jotka eivät pysty poistamaan suuria määriä lämpöä. Tämän seurauksena ohjelmistovirheiden riski kasvaa prosessorin ylikuumenemisen vuoksi ja voi tämän seurauksena johtaa laitteen hätäpysäytymiseen.

Ninja ei näytä yksityiskohtaista lokia rakennusprosessista suoritusnopeuden vuoksi, mikä vaikeuttaa analysointia luotaessa ja ristiinkäännettäessä monimutkaisia ​​ohjelmia, kuten käyttöjärjestelmän ydin , kääntäjä ja vastaavat.

Katso myös

Muistiinpanot

  1. ↑ Google-ryhmät : ninja-build 
  2. 1 2 GitHub:  KOPIOITAAN
  3. ↑ Ninja (rakennusjärjestelmä ) Open Hubissa: Languages Page 
  4. 1 2 https://ninja-build.org/manual.html#_using_ninja_for_your_project  _
  5. GitHub: julkaisu-120508  (eng.) - 2013.
  6. julkaisu: ninja v120508  (eng.) - 2012.
  7. Julkaisu 1.11.1 - 2022.
  8. 1 2 Googlen kehittäjät rakensivat avoimen lähdekoodin Ninja-rakennusjärjestelmän . OpenNET (8. helmikuuta 2011). Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 16. tammikuuta 2022.
  9. Ensimmäinen julkaisu  . GitHub (8. toukokuuta 2012). Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 16. tammikuuta 2022.
  10. Evan Martin. Ninja  (englanniksi) . aosabook.org . Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 3. lokakuuta 2019.
  11. Evan Martin. Chromium Notes : Ninja, uusi rakennusjärjestelmä  . neugierig.org (6. helmikuuta 2011). Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 30. syyskuuta 2019.
  12. 1 2 Evan Martin. Google-ryhmät: ninja-build  (englanniksi) . Google-ryhmät (8. toukokuuta 2012). Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 18. tammikuuta 2022.
  13. Ninja - pieni rakennusjärjestelmä samanlainen kuin tehdä . OpenNET (18. helmikuuta 2011). Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 16. tammikuuta 2022.
  14. Evan Martin. Ninja-rakennusjärjestelmän käsikirja : Vertailu malliin  . ninja-build.org _ Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 16. tammikuuta 2022.
  15. David Rothlis. Ninja  - rakennusjärjestelmän benchmarking . rothlis.net (2016-11-4). Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 18. tammikuuta 2022.
  16. Vertailuarvot  . _ re2c.org . Haettu 31. tammikuuta 2022. Arkistoitu alkuperäisestä 31. tammikuuta 2022.
  17. Ulja Trofimovitš. RE2C: Lexer-generaattori, joka perustuu lookahead-TDFA:han  (englanniksi) (PDF). re2c.org (2020). Haettu 31. tammikuuta 2022. Arkistoitu alkuperäisestä 27. tammikuuta 2022.
  18. Evan Martin. Ninja-rakennusjärjestelmän käsikirja: Ninjan käyttäminen  projektissasi . ninja-build.org _ Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 16. tammikuuta 2022.
  19. Evan Martin. Ninja-rakennusjärjestelmän käsikirja: Filosofinen yleiskatsaus  (englanniksi) . ninja-build.org _ Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 16. tammikuuta 2022.
  20. Evan Martin. Ninja-rakennusjärjestelmän käsikirja: Syntaksiesimerkki  (englanniksi) . ninja-build.org _ Haettu 15. tammikuuta 2022. Arkistoitu alkuperäisestä 16. tammikuuta 2022.

Linkit