přihlásit 17419/823008

Interpretovaný jazyk

Jazyky mohou být kompilované nebo interpretované. U kompilovaných jazyků se napsaný kód jednou zkompiluje (přeloží) do instrukcí procesoru (binární kód). Tento binární kód (ve Windows např. exe soubory) je možno spustit, což znamená, že procesor vykonává předepsané instrukce.

U interpretovaných jazyků je to složitější, existuje různá řešení. Obecně se napsaný kód překládá do tzv. bajtového kódu a tento kód pak provádí interpret jazyka. Interpret jazyka je obvykle kompiovaný program, který bajtový kód převádí na instrukce procesoru.

Překlad do bajtového kódu má řadu podob. Může ho provádět interpret jazyka na pozadí. To znamená, že takový bajtový kód je jen v operační paměti počítače a kód programu se do bajtového kódu převádí vždy při jeho spuštění. To je obvyklé u skriptovacích jazyků. Výhodou je, že s napsaným programem se nemusí nic dělat, lze ovnou snadno spustit. Nevýhodou je, že překlad chvilku trvá (třeba překlad OpenOffice.org trvá několik hodin), takže toto řešení je použitelné jen u malých prográmků, skriptů, kde je zpoždění způsobené překladem nepatrné.

Alternativní řešení, které nás tímto neomezuje je, že se kód interpretovaného jazyka přeloží do bajtového kódu překladačem do souboru, podobně jako je tomu u kompilovaných jazyků. Takový překlad se provádí jen jednou a interpet jazyka dostává k dispozici rovnou bajtový kód, který umí rychle načíst. Tak to dělá třeba Java. To nám umožní psát rozsáhlejší programy, ale zas je s tím víc obtěžující práce. Představte si, že byste ve Windows museli kompilovat bat soubory před jejich použitím.

Python tuto záležitost originálně řeší tak, že oba přístupy kombinuje a bere si z nich to lepší. Překlad do bajtového kódu dělá automaticky sám interpret (snadné spouštění). Bajtový kód se ale zároveň uloží i do souboru a při dalším spuštění programu se znova nepřekládá, ale načte se z toho souboru (rychlé spuštění). Dokonce to jde tak daleko, že interpret podle času souboru pozná, jestli jste neudělali v programu změnu a když ano, tak ho automaticky přeloží do bajtového kódu znovu (žádné starosti).

Výsledkem pythoního řešení je, že můžete psát větší programy a zároveň je to programování tak snadné, jako u skriptovacích jazyků. Python tak lze snadno použít jak na psaní skriptů, tak na psaní větších aplikací a u těch větších aplikací navíc díky snadnému použití (absenci kompilace) zvyšuje produktivitu programování. To je charakteristická ukázka promyšleného přistupu k řešení protichůdných požadavků, které činí Python výborným jazykem.

Další obecnou vlastností interpretovaných programů je, že jsou více nebo méně pomalejší než kompilované programy. Ta interpretace holt něco stojí. Takže tu vyvstává otázka, proč se vůbec interpretovanými jazyky zabývat. Odpověď je jednoduchá, ten rozdíl výkonu nemusí být prakticky ani pozorovatelný a interpretované jazyky to vyvažují tím, že jsou produktivnější (programy v nich se píší snadněji a rychleji). Je rozdíl mezi tím, jestli program napíšete za měsíc nebo za půl roku. Jak je to důležitý rozdíl pochopíte hned, když si necháte napsat nějaký software na zakázku, často vyjde podstatně levněji koupit silnější hardware, než platit čas programátora. Zde záleží hodně na tom, na kolika počítačích program poběží. Když na jednom (obvyklý případ serverových aplikací), je to jasné. Proto taky webovým aplikacím dominují programy psané v interpretovaných jazycích, jako je např. PHP nebo Java. A i když odhlédneme od peněz, tak to, že program který potřebujete máte mnohem dřív, to také není k zahození. Jinými slovy, výkon není všechno, a který jazyk je vhodnější použít se musí posoudit individuálně na konkrétní situaci.

Otázka výkonu je ale komplexnější, záleží i na dalších vlastnostech a rozdíly výkony mezi různými interpretovanými jazyky jsou řádové, takže výkonu pythoních aplikací věnuji samostatnou stránku.

Mezi interpretované jazyky patří C# a ostatní .NET jazyky, Java, PHP, Perl, JavaScript, Ruby, TCL, bash, awk a řada dalších.


Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /web/htdocs2/wraithcz/home/www/python/data/sessions/sessions1.php on line 2