Interpretovaný jazyk
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:
- Java
- 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
- 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)
- Skriptovací jazyky
- WebDNA
- Spreadsheets
- Excel interpretuje vzorce
- S
- Tcl
- XMLmosaic Archivováno 2. 8. 2009 na Wayback Machine – 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)
- Lua
- jazyky patřící do .NET Framework (kompilované do kódu CIL)
- Pike
- Python
- Squeak Smalltalk
- Visual FoxPro
- Lisp
Související články
Reference
V tomto článku byl použit překlad textu z článku Interpreted language na anglické Wikipedii.