Interpretovaný jazyk je programovací jazyk, u něhož je pro spuštění programu nezbytný jeho zdrojový kód a zvláštní program zvaný interpret, který zdrojový kód provádí (interpretuje).
Protikladem k interpretovaným jazykům jsou kompilované jazyky, u nichž je nutné zdrojový kód programu nejdříve přeložit překladačem do strojového kódu. Strojový kód je spustitelný soubor, který po zavedení do paměti může přímo provádět procesor počítače.
Výhody interpretačního zpracování programů jsou snadnost provádění úprav v programu, snazší hledání a odstraňování chyb v programu (ladění programu) a obvykle dobrá přenositelnost programu na jinou platformu (pokud pro ni existuje interpret příslušného jazyka); nevýhody jsou nutnost mít interpret programovacího jazyka a pomalejší běh programu.
Historický vývoj pohledu na interpretaci a kompilaci programů V počátcích počítačů byl návrh programovacího jazyka často významně ovlivněn rozhodnutím, zda jazyk bude kompilovaný nebo interpretovaný. Ve většině kompilovaných jazyků je například typ proměnných pevně určen deklarací nebo prvním použitím, a každou proměnnou lze používat pro ukládání hodnot pouze jednoho typu. Naproti tomu některé interpretované jazyky s výhodou využívaly dynamické aspekty interpretace, aby se deklaracím proměnných vyhnuly. Například jazyk Smalltalk (1980) navržený jako interpret dovoluje, aby spolu mohly interagovat libovolné objekty.
V současnosti pro mnoho jazyků existují kompilátory i interprety – příkladem jsou jazyky BASIC, C, Lisp, Pascal a Python. Teoreticky může být každý jazyk kompilovaný i interpretovaný, takže by se toto rozlišování mělo používat pouze pro označení konkrétního způsobu implementace, ne jako základní vlastnost programovacího jazyka. U některých programovacích jazyků je navíc jen malý rozdíl ve výkonu mezi zkompilovaným a interpretovaným programem.
Interpretované jazyky byly zpočátku kompilovány po jednotlivých řádcích; pokud byl určitý řádek uvnitř cyklu, byl kompilován při každém průchodu cyklem. V současnosti většina interpretovaných jazyků používá mezikód a tak kombinuje kompilační a interpretační přístup. Kompilátor pak vytváří určitou formu mezikódu, například bytový kód (bytecode) nebo zřetězený kód, a ten je pak interpretován interpretem mezikódu.
Příklady:
JavaScript Python Ruby (používá jako mezikód syntaktický strom)
Mezikód může být překládán jen jednou (např. u Javy), před každým spuštěním (např. u Perlu nebo Ruby) nebo pokaždé, když se zjistí, že byl změněn zdrojový kód (např. u Pythonu).
U jazyka Java je program převeden do tvaru, ve kterém je následně interpretován. Nebo je možné vytvořit strojový kód pomocí just-in-time překladu. Také jazyky, které jsou součástí .NET Framework firmy Microsoft se kompilují do Common Intermediate Language (CIL), který je pak metodou just-in-time přeložen do nativního strojového kódu. Mnoho implementací jazyka Lisp umožňuje volně kombinovat interpretovaný a kompilovaný kód. Tyto implementace používají překladač, který umožňuje při běhu programu přeložit libovolný zdrojový kód na strojový kód.
Výhody interpretovaných jazyků Implementace jazyka pomocí interpretu poskytuje ze své podstaty určitou pružnost oproti implementaci pomocí překladače. Obvykle je snazší implementovat následující vlastnosti pomocí interpretu než pomocí překladače:
nezávislost na platformě (např. bytecode jazyka Java) reflexe a reflektivní použití evaluátoru (např. funkce eval) dynamické typování menší velikost proveditelného programu (protože implementace si mohou volně zvolit instrukční kód) dynamické řízení oblasti platnosti identifikátorů
Nevýhody interpretovaných jazyků Hlavní nevýhodou interpretovaných jazyků je mnohem pomalejší běh programu v porovnání s rychlostí běhu strojového kódu nativního pro příslušný procesor. Tato nevýhoda může být zmenšena technikou just-in-time kompilace, která převádí části programu do strojového kódu před jejich prováděním.
Seznam nejrozšířenějších interpretovaných jazyků APL – jeden z nejstarších jazyků; vektorově orientovaný jazyk používající neobvyklou sadu symbolů pro zápis programu ASP skriptovací jazyk na vytváření webových stránek BASIC (původní verze, Dartmouth BASIC, byla kompilovaná, stejně jako mnoho moderních implementací) ECMAScript ActionScript (verze 3.0 není interpretovaná, proto z ní byla odstraněna funkce eval()) E4X JavaScript (původně Mocha a LiveScript) JScript
Systémy pro manipulaci s rovnicemi a řešení rovnic GNU Octave Interactive Data Language (IDL) Mathematica MATLAB
Euphoria Interpretovaný nebo kompilovaný. Forth (programovací jazyk) (tradičně interpretovaný pomocí zřetězeného kódu) Game Maker Language Lava Madness Script Perl PHP PostScript Python Lisp Logo Scheme MUMPS (tradičně interpretovaný, moderní verze jsou kompilované) REXX Ruby JRuby (implementace Ruby v Javě) Seed7 interpretovaný nebo kompilovaný Smalltalk (čistě objektově orientovaný, původně od firmy Xerox PARC, často podporuje ladění z jiného stroje) Squeak Skriptovací jazyky WebDNA Spreadsheets Excel interpretuje vzorce S R Tcl XMLmosaic – jazyk podobný C# přenášený v XML interpretovaný konzolovou aplikací napsanou ve Visual Basic .NET
Jazyky obvykle kompilované do kódu virtuálního stroje Mnoho interpretovaných jazyků je nejdříve zkompilováno do tvaru kódu pro určitý virtuální stroj, který je potom buď interpretován nebo kompilován do strojového kódu.
Java (je obvykle překládána do Bytecode, ale může být i kompilována na nativní strojový kód pomocí překladače AOT) Groovy ColdFusion Scala Lua jazyky patřící do .NET Framework (kompilované do kódu CIL) C++/CLI C# Visual Basic .NET Pike Python Squeak Smalltalk Visual FoxPro Lisp
Související články Programovací jazyk Programování Zdrojový kód Interpret (software) Kompilovaný jazyk Skriptovací jazyk
Reference
Kategorie:Programovací jazyky