Can you summarize the following document?
        
  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:  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.

  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:

  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.

  

  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.
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).