Iga kirjutatud koodirida tuleb tõlkida teie arvutile arusaadavasse keelde. Aga kuidas see juhtub?

Kõrgetasemeliste programmeerimiskeelte, nagu PHP, Swift ja JavaScript, lähtekood näeb välja nagu loomulik keel. Näete sellises koodis ingliskeelseid sõnu ja mõistate mõnda selle funktsiooni, isegi kui te keelt ise ei oska. Kuid selline lähtekood peab olema masinloetavas vormingus, et arvuti saaks lõplikku programmi käivitada.

Selleks vajab masin vahendajat, et tõlkida teie kood millekski, mida ta saab töödelda. See vahendaja võib olla tõlk, koostaja või koostaja. Nad kõik teevad sarnast asja: tõlgivad lähtekoodi inimesele loetavast vormist masinloetavaks. Kuid see, kuidas nad seda teevad, on täiesti erinev.

Mis on tõlk?

Tõlk loeb iga koodirida ükshaaval ja käivitab selle kohe käitamise ajal. Tõlk ei oota enne protsessorisse saatmist, kuni kogu lähtekood masinkoodiks teisendatakse. Selle asemel teisendab see iga koodirea tõlgipõhiseks baidikoodiks ja täidab iga käsu tõlgimisel. Kui täitmisülesanne toetub otse tõlgile, annab protsessor tõlgi enda toite.

Kuna see parsib ja käitab iga rida korraga, on protsess sageli suhteliselt aeglasem. Seda silmas pidades on tõlgendatud programmeerimiskeelte vigu lihtne märgata, kuna need annavad iga koodirea kohta kohest tagasisidet.

Selle käitumise tagasilöök on aga see, et käitusaja tõrge ajab programmi täitmise ajal kokku, mille tulemuseks on kehv kasutuskogemus, eriti kui teie projektil puudub piisav testimine.

Mis on kompilaator?

Kompilaator loeb teie lähtekoodi ja tõlgib selle masinloetavaks käivitatavaks failiks. Erinevalt tõlgist loeb see kogu lähtekoodi ühe korraga, genereerides masinkoodi hilisemaks töötlemiseks protsessori poolt. Kuna kompilaator täidab seda ülesannet vaid korra, on kompileeritud programmid tavaliselt kiiremad ja mälutõhusamad.

Kuid kompilaator ei arvesta käitusaja vigu. Selle asemel märgib see teatud vead kompileerimise ajal, mis on tavaliselt parem. Seda tüüpi tõrge ilmneb arenduse ajal, mitte programmi käivitamisel. Kuid pidage meeles, et käitusaegsed vead on endiselt võimalikud, isegi kompileeritud programmides.

Peamised erinevused

Tõlgid ja kompilaatorid on mõlemad tavalised, seega on kasulik teada nende peamisi erinevusi.

Koodi täitmine: sisendi ja väljundi töötlemine

Tõlk saab rea kohta ainult iga sisendi koguda, tõlkida ja täita. See käivitab iga lähtekoodi rea järgemööda ja lõplik väljund sõltub sellest, mida iga rida täitmise ajal väljastab.

Kompilaator koondab kogu lähtekoodi ja tõlgib selle ainult üks kord. Seega võtab see sisendiks kogu teie lähtekoodi, mille see teisendab ja väljundi saamiseks protsessorile saadab.

Silumine ja vigade jälgitavus

Tõlgendatud koodi puhul on vead paremini jälgitavad, kuna tõlk saab neist teatada, viidates otse algallikale. Kui aga täitmise ajal ilmneb tõrge, siis tõlk peatub. Seega võivad silumisvead olla pisut keerulised, kuna peate need tööajal taasesitama. See võib isegi hullemaks minna, kui käitusaja logimine on ebapiisav.

Teisest küljest võib kompileeritud keele käitusaegseid vigu olla raskem jälgida, kuna puudub tõlkija, kes neist aru annaks. Kuid kompileerimise ajal avastatud vigadega on tavaliselt lihtsam toime tulla, kuna kompilaator tuvastab need pidevalt.

Enamikul kompileeritud keeltel on ka mehhanism kasutamata muutujate, tüüpide kokkusobimatuse ja vigase süntaksi tuvastamiseks, vältides selliseid vigu varakult.

Jõudlus ja kiirus

Nagu oodatud, aitab kompilaator masinal programmikoodi kiiremini käivitada, kuna protsessor töötleb koodi ainult üks kord. See ei kehti tõlkide kohta, kes tõlgivad iga rida tööajal.

Kuigi neid on programmeerimispõhimõtted, mida saate kasutada tõlgendatud koodi optimeerimiseks kulutab tõlk ikkagi aega iga rea ​​sõelumisele ja täitmisele, enne kui järgmisele liigub. Tõlgitud keelte kiiremaks muutmiseks on aga olemas kompilaatori abilised.

Näiteks Chrome'i brauser töötleb JavaScripti V8 mootori abil; see töötab Just-In-Time (JIT) kompilaatoris. Pyinstalleri moodul on veel üks abimees, mis komplekteerib ja kompileerib Pythoni skripti käivitatavasse paketti.

Kuigi need abilised on tõlgitud keele kompilaatorisse koondamiseks käepärased, ei muuda see tõsiasja, et põhitõlk on ikkagi tõlk.

Mälu kasutamine

Tõlgi ja kompilaatori mälukasutuskäitumine on suhteline ja sõltub sageli lähtekoodist ja muudest teguritest. Kuigi mõned programmeerijad väidavad, et koodi tükeldamine tõlgendajates vähendab mälukasutust, salvestavad tõlgid ka kogumälu kasutust.

Näiteks kui uurite teie Pythoni koodi mälukasutusprofiil, võib selle tarbitav mälumaht teid üllatada.

Üldiselt aga nõuavad kompileeritud programmid vähem käitusaegset mälu. Kuna need teisendavad kogu lähtekoodi eelnevalt masinloetavaks koodiks, annavad need protsessorile vähem tööd. See on vastupidine interpretaatoritele, mis tõlgivad koodi ainult käitusajal.

Programmeerimiskeele tugi

Tõlgil ja koostajal on omajagu programmeerimiskeele levitamine. Mõned populaarsed kompileeritud keeled on C, C#, Rust ja Golang. Populaarsed on ka tõlgenduskeeled, nende hulgas Python, JavaScript ja PHP.

Rohkem programmeerijaid eelistab tõlgendatud keeli. Kuigi JavaScript ja Python kasutavad tõlke, on need kaks üldiselt enim ihaldatavat keelt 2023. aasta Stack Overflow Developer Survey. Rust ja C# esindavad koostatud gruppe viiendal ja kuuendal positsioonil.

Kus tõlgitud keeled säravad

Tõlgid säravad järgmistes valdkondades:

  • Need võimaldavad hõlpsat vigade jälgimist, kuna tõlk täidab iga koodirea eraldi.
  • Tõlgendatud keeltega on sageli kiirem saavutada minimaalne elujõuline toode varem, kuna nende süntaksid on kompileeritud keeltega võrreldes vähem keerulised.
  • Erinevalt staatiliselt tipitud kompileeritud keeltest kasutavad tõlgendatud keeled dünaamilist tippimist, vähendades koodi keerukust ja parandades loetavust.

Kui kompileeritud keeled võidavad

Aga kompilaatorid? Siin on mõned aspektid, mida nende keeled näitavad:

  • Kompileeritud keeled on tavaliselt täitmisel kiiremad, nõudes vähem käitusaegset mälu, kuna koodi tõlkimine toimub ainult üks kord.
  • Täitmine pärast koostamist aitab vigu varakult avastada. Kompilaator tagab, et tõrke korral juurutamine nurjub. See on parem kui vigade püüdmine käitusajal.
  • Kuigi kompileeritud keeled on staatiliselt trükitud, määratlevad need selgelt muutujate ja funktsioonide eesmärgid, muutes need paremini dokumenteerituks.

Projekti jaoks õige tõlkija valimine

Nagu olete näinud, on kompilaatoril ja tõlgil oma valdkonnad, kus nad silma paistavad. Kuigi mõned programmeerijad väidavad, et kompileeritud keeled on üldiselt kiiremad ja paremad, väidavad teised, et jõudlus sõltub koodi struktuurist ja platvormist.

Kuid mis veelgi olulisem, teie tõlkija valik peaks sõltuma ka mitmest muust tegurist peale nende tehniliste mehhanismide. Õppimise lihtsus, kogukond ja projekti eesmärk on ühed tegurid, mida tõlgitud ja koostatud keelte vahel valides arvestada.