Interpretirani programski jezik

Interpretirani jezik je programski jezik koji kod većine svojih implementacija izvršava instrukcije direktno, bez prethodnog kompilovanja programa u uputstvo mašinskog jezika. Interpretator izvršava program direktno, prevođenjem svake izjave u sekvencu jednog ili više potprograma koji je već preveden u mašinski kod.

Termini interpretirani jezik i kompilovani jezik nisu dobro definisani, jer u teoriji, svaki programski jezik može biti ili interpretiran ili kompilovan. U modernim implementacijama programskih jezika je sve popularnija platforma koja obezbeđuje obe opcije.

Interpretirani jezici mogu biti u suprotnosti sa mašinskim jezicima. Funkcionalno, i izvršenje i interpretacija imaju isto značenje — Nalaženje sledeće instrukcije/izjave iz programa i njegovo izvršenje. Iako je interpretirani bajtkod dodatno identičan mašinskom kodu u formi i ima prikaz asemblera, termin "interpretiran" je praktično rezervisan za "softverski obrađene" jezicike (od strane virtuelne mašine ili emulatora) na vrhu procesora.

U principu, programi u mnogim jezicima mogu biti kompilovani ili interpretirati, emulirani ili prirodno izvršeni, tako da se ova oznaka primenjuje isključivo na osnovu zajedničke implementacije, a ne predstavlja bitnu osobinu jezika.

Mnogi jezici su implementirani korišćenjem i kompilatora i interpretera, uključujući Bejsik, S, Lisp, Paskal i Pajton. Java i S # su kompilovani u bajtkod, u virtualnu mašinu-prijateljski interpretirani jezik. Lisp implementacije mogu slobodno mešati interpretirani i kompilovani kod.

Istorijat interpretiranog / kompilovanog uredi

U ranim danima računarstva, dizajn jezika je bio pod velikim uticajem odluke da li da koriste kompilovani ili interpretirani način izvršenja. Na primer, Smalltalk (1980), koji je dizajniran da bude interpretiran u run-time, dopušta opštim objektima da dinamički deluju jedan prema drugom.

U početku, interpretirani jezici su bili kompilovani liniju po liniju; to jest, svaka linija je kompilovana u trenutku izvršavanja, a ako petlja ili potprogram prouzrokuje određene linije koje treba da se izvše više puta, morale su da se prekompiliraju svaki put. Ovo je postalo mnogo ređe. Većina tzv interpretiranih jezika koriste srednju reprezentaciju, koja kombinuje kompilovanje i interpretiranje.

Neki primeri:

Srednji prikaz se može prevesti jednom za svagda (kao u Javi), svaki put pre izvršenja (kao u Perl ili Rubi), ili svaki put kada je promena u izvoru otkrivena pre izvršenja (kao u Pajton).

Prednosti interpretiranog jezika uredi

Interpretirani jezik daje neku dodatnu fleksibilnost implementaciji u odnosu na kompilovane implementacije. Funkcije koje su često lakše za sprovođenje u interpretatoru nego u kompilatorima uključuju i (ali nisu ograničene na):

Nedostaci interpretiranog jezika uredi

Nedostaci interpretiranog jezika su:

  • Bez statičkog tipa provere, koji obično obavlja kompilator, programi mogu biti manje pouzdani, jer tip provere eliminiše klasu programskih grešaka.
  • Interpreteri mogu da budu podložni napadima injekcija koda.
  • Sporije izvršenje u odnosu na direktno Mašinski jezik izvršenje na host procesor. Tehnika koja se koristi za poboljšanje performansi je just-in-time kompilacija koji pretvara često izvršene sekvence interpretiranih instrukcija u mašinski kod. JIT je najčešće kombinovan sa kompilacijom na bajtkodu, kao u Javi.
  • Izvorni kod se može čitati i kopirati (npr JavaSkript u veb stranicama), ili lakše projektovati unazad kroz odraz u aplikacijama gde intelektualna svojina ima komercijalnu prednost. U nekim slučajevima šifrovanje može da se koristi za skrivanje izvornog koda, ili zavaravanje zaposlenih da sakrije svoju svrhu.

Lista često korišćenih interpretiranih jezika uredi

Jezici obično kompilovani na bajtkod

Mnogi interpretirani jezici su prvo kompilovani u bajtkod. Ponekad, bajtkod može biti kompilovan prirodno binarno koristeći AOT kompilator ili prirodno izvršen, od strane procesora.

Vidi još uredi

Reference uredi