Jezici programiranja obično spadaju u dvije vrste jezika - sabrani jezici ili tumačeni jezici. Međutim, razlika nije u jeziku; to je u provedbi. Nije pogrešno reći da su oba svojstva implementacije jezika, ali nisu svojstva samog jezika. Implementacija programskog jezika znači premošćivanje jaza od razmišljanja programera na visokoj razini do nule i razine stroja. Ako se provode učinkovito, programeri se mogu koncentrirati na stvarne probleme, umjesto na detalje strojeva. Dakle, programski jezik se može sastaviti ili interpretirati na temelju implementacije.
Pa, obje vrste programskih jezika imaju svoje prednosti. Neki jezici zahtijevaju sastavljanje vašeg koda prije nego što se bilo koji kôd može izvršiti. Ostali jezici tumače svaku uputu u vrijeme kada se kôd izvršava. U stvari, prevedene jezike programer obično sastavlja na računalu programera; kada programer dijeli softver, dijeli sastavljene 0 i 1, ali ne i izvorni kod. Međutim, uz interpretirani jezik, kod se sprema u istom obliku koji ste unijeli i mora biti preveden u vrijeme izvođenja. Pogledajmo detaljnu usporedbu između sastavljenih i interpretiranih jezika.
Računala su sposobna izvršiti samo strojni jezik, koji je jezik središnje procesne jedinice (CPU) i vrlo je jednostavan. Cilj bilo koje implementacije programskog jezika je prevesti izvorni program na strojni jezik da bi ga CPU mogao izvršiti. Sve jezične implementacije prevode izvorni program u neko posredničko predstavljanje prije prevođenja posrednog predstavljanja u strojni jezik. Najizravnija metoda prevođenja programa na strojni jezik naziva se kompilacija. Program napisan sastavljenim jezikom mora se prije pokretanja pretvoriti u drugi format. Prije izvršavanja izvorni se kôd mora pretvoriti u strojno čitljive upute. Ukratko, jezici čija su implementacija obično prevoditelji, a ne tumači, nazivaju se sabrani jezici.
Interpretator je program koji je napisan na nekom drugom jeziku i sastavljen u strojno čitljiv jezik. Sam tumač je program strojnog jezika i napisan je za čitanje izvornih programa s tumačenog jezika i njihovo tumačenje. Tumačeni jezik, naprotiv, ne sastavlja izvorni kod na strojni jezik prije pokretanja programa. On samo interpretira kod u letu. Dakle, ne ostvarujete prednosti ili nedostatke pogrešaka pri sastavljanju. Tumačeni jezici zahtijevaju dio softvera koji se zove interpreter, koji uzima izvorni kôd i izvršava jednu instrukciju. Kada pokrenete interpretirani izvorni program, zapravo pokrećete prevoditelja. Prevoditelj je program strojnog jezika koji izvršava sve programe koje pišete na interpretiranom jeziku.
- Program napisan sastavljenim jezikom mora se prije pokretanja pretvoriti u drugi format. Prije izvršavanja izvorni se kôd mora pretvoriti u strojno čitljive upute. Tumačeni jezik, naprotiv, ne sastavlja izvorni kod na strojni jezik prije pokretanja programa. On samo interpretira kod u letu. Tumačeni jezici zahtijevaju dio softvera koji se zove interpreter, koji uzima izvorni kôd i izvršava jednu instrukciju.
- S sastavljenim jezicima postoje najmanje dva koraka za prelazak od izvornog koda do izvršenja, dok s interpretiranim jezicima postoji samo jedno izvršenje. Program napisan na protumačenom jeziku nije sastavljen - interpretira ga drugi program dok se izvodi. Program napisan sastavljenim jezikom prolazi kroz proces da bi ga iz ljudsko čitljivog teksta pretvorio u strojno čitljiv format. Program koji se zove kompajler čini ovaj prijelaz.
- Sastavljeni programi pokreću se brže od interpretiranih programa, ali interpretirani se programi mogu mijenjati dok se program izvodi. To interpretira programe idealno za pisanje softvera za izvođenje uživo. Rad s kompajliranim jezicima može biti lijep jer se pronalazi mnogo grešaka kada se sastavi izvorni kod. Ove greške, nazvane pogreške u sastavljanju, sprječavaju sastavljanje koda. Suprotno tome, interpretirani jezici se ne sastavljaju, tako da ne biste ostvarili prednosti ili nedostatke pogrešaka pri sastavljanju.
- S interpretiranim jezicima, sve se uklanjanje pogrešaka događa u vrijeme izvođenja. Ne postoji korak sastavljanja tijekom kojeg možete izbaciti sve pogreške sintakse u vašem kodu; umjesto toga morate pokrenuti program da biste pronašli bilo kakve pogreške u njemu. To postaje problem kada interpretirani program mijenja datoteke ili unosi bilo kakve promjene u trajne resurse. Zbog toga je neke bugove teže uhvatiti, jer ih kôd ne treba kompilirati. Tumačeni jezici također predstavljaju određene sigurnosne probleme u mrežnom okruženju jer se zlonamjernom kodu može ubaciti usred izvršenja.
Ukratko, i sastavljeni i interpretirani jezici imaju svoje snage. Neki jezici zahtijevaju sastavljanje vašeg koda prije nego što se bilo koji kôd može izvršiti. Ostali jezici tumače svaku uputu u vrijeme kada se kôd izvršava. Glavna razlika između njih je da postoje najmanje dva koraka za prelazak od izvornog koda do izvršenja s kompajliranim jezicima. Međutim, s tumačenim jezicima postoji samo jedan korak - izvršavanje. Sastavljeni programi pokreću se brže od interpretiranih programa, ali interpretirani se programi mogu mijenjati dok se program izvodi.