Yleensä kun joku viittaa prosessoriin laskennassa, se tarkoittaa jonkinlaista piisirua, joka suorittaa laskelmia. P CPU:ssa, GPU:ssa, APU:ssa, NPU:ssa ja monissa muissa logiikkasiruissa tarkoittaa "Processing", eli keskusyksikköä. Jokainen niistä on tietyntyyppinen prosessori, joka on optimoitu sen tiettyyn toimintoon. Esiprosessorilla ei kuitenkaan ole mitään tekemistä fyysisten prosessorien, kuten CPU:n tai GPU:n, kanssa. Sen sijaan se on ohjelmointitermi, joka liittyy erityisesti käännettyihin kieliin.
Mikä on kääntäjä?
Kääntäjä on ohjelmisto, joka kääntää tietyn ohjelmointikielen konekoodiksi. Kaikki ohjelmointikielet on muunnettava konekoodiksi, koska ihmisen luettavissa olevat käskyt, jotka muodostavat käyttökelpoisia ohjelmointikieliä, eivät ole suoraan suoritettavissa tietokoneella. Jotkut on suunniteltu tulkittaviksi lennossa, kun koodia ajetaan. Tämä lähestymistapa on erittäin joustava, joten pienten muutosten tekeminen on helppoa. Monet muut ohjelmointikielet on kuitenkin käännettävä, jotta ne voidaan suorittaa. Pienissä ohjelmissa tämä ei välttämättä vie kauan. Suuremmilla ohjelmilla kokoaminen voi kuitenkin kestää minuutteja tai jopa tunteja.
Joten miksi haluat käyttää kieltä, joka vaatii kääntämistä? No, on vaikeampaa käännellä. Tulkittujen ohjelmointikielten koodi on usein jaettu sellaisenaan, mikä tekee siitä helppoa "varastaa". Yrityksille, jotka haluavat suojella immateriaalioikeuksiaan, kääntäminen lisää monimutkaisen ja epäluotettavan käänteissuunnitteluvaiheen todellisen koodin näkemiseksi. Käännetty ohjelmisto on myös yleensä pienempi, koska se on optimoitu suoritusta varten. Tämä ei varsinaisesti ole ongelma pienissä skripteissä, mutta kun käsitellään suuria, satojen megatavujen tai jopa gigatavujen ohjelmistoja, tällä voi olla huomattava vaikutus.
Joten mitä esiprosessori tekee?
Esiprosessori on apuohjelma, joka ajetaan koodin yli ennen sen kääntämistä. Yleensä kääntäjä kutsuu esiprosessoria automaattisesti sen käynnistyessä, mutta niitä voidaan ajaa myös erikseen. Esiprosessorin tehtävänä on määrittää koodi täsmälleen tarkoitetulla tavalla. Se tekee sen ensisijaisesti suorittamalla haku- ja korvaustoimintoja.
Esimerkiksi C:ssä on vakiokäytäntö käyttää useita vakiokirjastoja. Nämä kirjastot määrittelevät joukon toimintoja, jotka tarjoavat vakiotoiminnot. Näiden kirjastojen tuomiseen käytetään avainsanaa "#include", jota seuraa kirjaston nimi. Esiprosessori etsii koodista lauseita, kuten "#include" ja korvaa ne. "#include" tapauksessa esiprosessori lisää määritetyn kirjaston koko sisällön.
Tämän avulla voit pitää todella kirjoitetun koodin helposti luettavana ja hyödyntää monia tehokkaita ja olemassa olevia työkaluja. Se säästää sinua joutumasta keksimään pyörää uudelleen jokaiselle sovellukselle tai joutumasta liittämään osaa tai koko kirjastosta koodipohjaan.
Toinen esiprosessorin mahdollinen käyttötapa on poistaa tai lisätä tiettyjä toimintoja koontirakenteen tarkoituksesta riippuen. Jos esimerkiksi haluat testata uutta koontiversiota, voi olla todella hyödyllistä sisällyttää joukkoon virheenkorjausvaiheita. Näitä ei vain tarvita julkaisuversioissa, vaan ne itse asiassa tekevät käännetystä ohjelmistosta suuremman. Esiprosessori voi tarkistaa kääntäjän argumentit ja määrittää, onko tiettyjä toimintoja sisällytettävä vai jätettävä huomiotta. Esiprosessori tyypillisesti poistaa kommentit ennen kääntäjää, koska niitä ei pitäisi sisällyttää koontiversioon.
Johtopäätös
Esiprosessori on kääntäjän käyttämä työkalu koodin manipuloimiseksi ennen kuin se käännetään. Vaikka esiprosessoria voidaan kutsua erikseen, sitä kutsutaan tyypillisesti osaksi käännösprosessia. Esiprosessori etsii tiettyjä määriteltyjä merkkijonoja ja korvaa ne vakiosisällöllä. Kommenteille ei ole korvausta, mutta ulkoisia kirjastoja sisältävien lauseiden kohdalla esikäsittelijä korvaa käskyn varsinaisen kirjaston sisällöllä. Esiprosessori voi myös käyttää käännösajan argumentteja tiettyjen toimintojen portittamiseen. Tätä käytetään usein virheenkorjaustoimintojen sisällyttämiseen tai poissulkemiseen testi- tai julkaisuversioista.