Vsako vrstico kode, ki jo napišete, je treba prevesti v jezik, ki ga vaš računalnik razume. Toda kako se to zgodi?
Izvorna koda visokonivojskih programskih jezikov, kot so PHP, Swift in JavaScript, je nekoliko podobna naravnemu jeziku. V taki kodi boste videli angleške besede in razumeli boste nekatere njene funkcije, tudi če ne poznate samega jezika. Toda takšna izvorna koda mora biti v strojno berljivi obliki, da lahko računalnik izvaja končni program.
Za to stroj potrebuje posrednika, da prevede vašo kodo v nekaj, kar lahko obdela. Ta posrednik je lahko tolmač, prevajalnik ali asembler. Vsi delajo podobno: prevajajo izvorno kodo iz človeku berljive oblike v strojno berljivo. Kako pa to počnejo, je precej drugačen.
Kaj je tolmač?
Tolmač prebere vsako vrstico kode, eno za drugo, in jo izvede takoj med izvajanjem. Tolmač ne čaka, da se celotna izvorna koda pretvori v strojno kodo, preden jo pošlje v CPE. Namesto tega pretvori vsako vrstico kode v bajtno kodo, specifično za tolmač, in izvede vsako navodilo, ko je prevedeno. Medtem ko je naloga izvajanja neposredno odvisna od tolmača, CPE poganja tolmača samega.
Ker razčlenjuje in izvaja vsako vrstico naenkrat, je postopek pogosto relativno počasnejši. S tem v mislih je napake v interpretiranih programskih jezikih enostavno opaziti, saj zagotavljajo takojšnjo povratno informacijo za vsako vrstico kode.
Vendar je pomanjkljivost tega vedenja, da napaka med izvajanjem zruši program med izvajanjem, kar povzroči slabo uporabniško izkušnjo, še posebej, če vaš projekt nima ustreznega testiranja.
Kaj je prevajalnik?
Prevajalnik prebere vašo izvorno kodo in jo prevede v strojno berljivo izvršljivo datoteko. Za razliko od tolmača prebere celotno izvorno kodo naenkrat in ustvari strojno kodo za kasnejšo obdelavo s CPE. Ker prevajalnik to nalogo izvede le enkrat, so prevedeni programi običajno hitrejši in bolj pomnilniško učinkoviti.
Prevajalnik pa ne upošteva napak med izvajanjem. Namesto tega bo v času prevajanja označil določene napake, kar je običajno bolje. Ta vrsta napake se pokaže med razvojem in ne, ko se program začne izvajati. Vendar ne pozabite, da so napake med izvajanjem še vedno možne, tudi v prevedenih programih.
Ključne razlike
Tolmači in prevajalniki so pogosti, zato je koristno poznati ključne razlike med njimi.
Izvajanje kode: vhodna in izhodna obdelava
Tolmač lahko samo zbira, prevaja in izvaja vsak vnos na vrstico. Zažene vsako vrstico izvorne kode zaporedno, ko pride, in končni izhod je odvisen od tega, kaj vsaka vrstica izpiše med izvajanjem.
Prevajalnik združi celotno izvorno kodo in jo prevede samo enkrat. Torej kot vhod vzame vašo celotno izvorno kodo, ki jo pretvori in pošlje v CPE, da dobi izhod.
Odpravljanje napak in sledljivost napak
Pri interpretirani kodi so napake bolj sledljive, saj jih lahko tolmač sporoči z neposrednim sklicevanjem na izvirni vir. Ko pa na kateri koli točki med izvajanjem pride do napake, se tolmač ustavi. Tako je odpravljanje napak lahko nekoliko zahtevno, saj jih morate reproducirati med izvajanjem. Lahko se celo poslabša, če je beleženje časa izvajanja neustrezno.
Po drugi strani pa je napakam med izvajanjem v prevedenem jeziku morda težje izslediti, ker ni tolmača, ki bi o njih poročal. Toda napake, ki jih odkrijete med prevajanjem, je običajno lažje obravnavati, saj jih bo prevajalnik dosledno identificiral.
Večina prevedenih jezikov ima tudi mehanizem za odkrivanje neuporabljenih spremenljivk, nezdružljivosti tipov in napačne sintakse, s čimer že zgodaj prepreči tovrstne napake.
Zmogljivost in hitrost
Kot je bilo pričakovano, prevajalnik pomaga stroju hitreje zagnati programsko kodo, saj CPE obdela kodo le enkrat. To ne velja za tolmače, ki vsako vrstico prevedejo med izvajanjem.
Čeprav obstajajo načela programiranja, ki jih lahko uporabite za optimizacijo interpretirane kode bo tolmač še vedno porabil čas za razčlenjevanje in izvajanje vsake vrstice, preden se premakne na naslednjo. Vendar pa so na voljo pomočniki prevajalnika, ki pospešijo interpretirane jezike.
Na primer, brskalnik Chrome obdeluje JavaScript z motorjem V8; ta deluje na prevajalniku Just-In-Time (JIT). Modul Pyinstaller je še en pomočnik, ki združuje in prevaja skript Python v izvršljiv paket.
Čeprav so ti pomočniki priročni za združevanje interpretiranega jezika v prevajalnik, to ne spremeni dejstva, da je osnovni prevajalnik še vedno tolmač.
Poraba pomnilnika
Obnašanje porabe pomnilnika tolmača in prevajalnika je relativno in pogosto odvisno od izvorne kode in drugih dejavnikov. Medtem ko nekateri programerji trdijo, da razčlenjevanje kode v tolmačih zmanjša porabo pomnilnika, tolmači beležijo tudi skupno porabo pomnilnika.
Na primer, ko pregledujete profil porabe pomnilnika vaše kode Python, vas bo količina pomnilnika, ki jo porabi, morda presenetila.
Na splošno pa prevedeni programi zahtevajo manj izvajalnega pomnilnika. Ker celotno izvorno kodo vnaprej pretvorijo v strojno berljivo kodo, imajo CPE manj dela. To je v nasprotju s tolmači, ki prevajajo kodo samo med izvajanjem.
Podpora za programski jezik
Tolmač in prevajalnik imata pošten delež distribucija programskega jezika. Nekateri priljubljeni prevedeni jeziki vključujejo C, C#, Rust in Golang. Priljubljeni so tudi interpretirani jeziki, med njimi Python, JavaScript in PHP.
Več programerjev ima raje interpretirane jezike. Medtem ko JavaScript in Python uporabljata tolmače, sta glede na Anketa za razvijalce Stack Overflow 2023. Rust in C# predstavljata prevedeni skupini na petem in šestem mestu.
Kjer sijejo tolmačeni jeziki
Tolmači blestijo na teh področjih:
- Omogočajo preprosto sledenje napakam, saj tolmač izvede vsako vrstico kode posebej.
- Z interpretiranimi jeziki je pogosto hitreje doseči minimalno izvedljiv izdelek prej, saj imajo manj zapletene sintakse v primerjavi s prevedenimi jeziki.
- Za razliko od statično tipiziranih prevedenih jezikov, interpretirani jeziki uporabljajo dinamično tipkanje, kar zmanjša kompleksnost kode in izboljša berljivost.
Kjer zmagajo prevedeni jeziki
Kaj pa prevajalniki? Tukaj je nekaj vidikov, zaradi katerih njihovi jeziki kažejo nekaj moči:
- Prevedeni jeziki so običajno hitrejši pri izvajanju in zahtevajo manj izvajalnega pomnilnika, saj se prevod kode izvede le enkrat vnaprej.
- Izvedba po prevajanju pomaga pri zgodnjem odkrivanju napak. Prevajalnik zagotovi, da uvedba ne uspe, ko pride do napake. To je bolje kot lovljenje napak med izvajanjem.
- Čeprav statično tipizirani, prevedeni jeziki jasno definirajo namere spremenljivk in funkcij, zaradi česar so bolj dokumentirani.
Izbira pravega prevajalca za vaš projekt
Kot ste videli, imata prevajalnik in tolmač svoja področja, kjer se odlikujeta. Medtem ko nekateri programerji trdijo, da so prevedeni jeziki na splošno hitrejši in boljši, drugi trdijo, da je zmogljivost odvisna od strukture kode in platforme.
Še pomembneje pa je, da bi morala biti vaša izbira prevajalca poleg njihovih tehničnih mehanizmov odvisna tudi od številnih drugih dejavnikov. Med dejavniki, ki jih je treba upoštevati pri izbiri med interpretiranimi in prevedenimi jeziki, so enostavnost učenja, skupnost in namen projekta.