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.
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] .
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] .
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.
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 . cNinja 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.
Asennusautomaatiojärjestelmät | |
---|---|