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:
- Java
- Pajton
- Rubi (Slično tome, koristi Apstraktno sintaksno drvo kao srednji prikaz)
- Fort
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):
- nezavisnost platforme (Javin bajtkod, na primer)
- odraz upotrebe evaluatora (npr Funkcija prvog reda eval)
- dinamično kucanje
- manja izvršna veličina programa (od kad implementacija ima fleksibilnost da izabere instrukciju koda)
- Obim (računarska nauka)
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
- APL Vektorski orijentisan jezik koji koristi skup neuobičajenih karaktera
- J APL varijanta u kojoj je prećutna definicija daje neke od prednosti prikupljanja
- Bejsik (iako je originalna verzija, Dartmouth BASIC, je napravljen, kao što su mnogi moderni BASIC-i)
- ECMAScript
- Actionscript
- E4X
- Javaskript (prvo nazvan Mocha, pa onda LiveScript)
- JScript
- Jednačina manipulacije i rešavanje sistema
- Euphoria Interpretirana ili kopilovana
- Forth
- Game Maker Language
- Lava
- Madness Script
- Perl
- PHP
- PostScript
- Python
- Lisp
- MUMPS
- REXX
- Ruby
- JRuby (Javina implementacija Rubija)
- Seed7
- Smalltalk
- Skriptni jezici
- Tabele
- S
- Tcl
- VBScript
- PowerShell
- XMLmosaic Hml sadrži, C # kao programski jezik interpretiran od konzole aplikacije napisane u Visual Basic .NET
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.
- Java (je sastavljen u Java bajtkodu i interpretiranod strane JVM)
- Lua
- .NET Framework jezici (prevedeni na bajtkod, nazvan CIL).
- Pike
- Pajton
- Squeak Smalltalk
- Visual FoxPro
- Lisp
- AppleScript
Vidi još uredi
Reference uredi
- Brown,P.J. . Writing Interactive Compilers and Interpreters,John Wiley. 1979. ISBN 978-0-471-27609-8.