Digitální počítače nerozumějí jazykům, kterými mluví lidé. Místo toho používají binární jazyk nazývaný strojový kód nebo strojový jazyk. strojový kód se skládá z posloupnosti jednoduchých počítačových instrukcí, přičemž každá instrukce je vyjádřena jako řetězec binárních číslic nebo bitů (tj. jedniček a nul). Různé počítače obvykle „mluví“ nebo „rozumí“ různým strojovým jazykům. Například jeden počítač může operaci ADD reprezentovat jako 10011111, zatímco jiný může tytéž operace reprezentovat jako 000110. Nejenže se bitové vzory obvykle liší od jednoho druhu počítače k druhému, ale dokonce i počet bitů použitých k reprezentaci operace se může lišit.

Při spuštění programu navíc operační systém (např. Windows, Linux, OS X atd.) funguje jako hostitelské prostředí, které programu poskytuje služby. tyto služby zahrnují základní podporu, jako je přístup ke klávesnici, obrazovce a pevným diskům. Bohužel způsob, jakým program k těmto službám přistupuje, se v jednotlivých operačních systémech liší. V důsledku rozdílů mezi strojovými jazyky a požadavky operačních systémů se programy napsané ve strojovém jazyce více zaměřují na systém, ve kterém program běží, než na to, jak program řeší problém. Navíc to také znamená, že není možné přenášet strojový kód mezi různými počítači bez poskytnutí nějaké překladatelské služby – obvykle v podobě virtuálního stroje.

Psaní programů ve strojovém jazyce je pomalé, zdlouhavé a náchylné k chybám. Řešením bylo vyvinout programovací jazyky vyšší úrovně, které se více soustředily na problém a méně na systém (hardware a operační systém), na kterém program běží (viz obrázek 2). Počítače však obvykle neprovádějí programy napsané v jazycích vyšší úrovně, takže musí existovat nějaký způsob, jak program napsaný v jazyce vyšší úrovně převést do strojového jazyka. Potřebný překlad provádějí dva druhy počítačových programů: překladače a interprety.

Překladač je program, který překládá jiné programy napsané ve vysokoúrovňovém programovacím jazyce, jako je C nebo C++, do strojového kódu nebo strojového jazyka. jiné jazyky, jako je Java a C#, jdou jinou cestou: Programy napsané v těchto jazycích se kompilují do mezilehlé reprezentace (reprezentace, která leží někde mezi jazykem vysoké úrovně a strojovým jazykem), která se často nazývá virtuální strojový kód. Kód virtuálního stroje se pak stává vstupem pro jiný program nazývaný interpret nebo virtuální stroj (VM, program, který simuluje hardwarový procesor). Některé jazyky, například Javascript a Perl, jsou zcela interpretované, to znamená, že se nekompilují, ale přímo interpretují.

Ilustrace znázorňující překladač, který čte soubor se zdrojovým kódem jazyka C++, překládá kód jazyka C++ do strojového kódu a vypisuje strojový kód do spustitelného souboru.
Překlad nebo převod programu napsaného v kompilovaném jazyce do strojového kódu. Překladač čte zdrojový kód jazyka C++ ze souboru, který končí .cpp, a vytváří soubor se strojovým kódem, který jevykonatelný. Na počítačích se systémem Windows končí spustitelné soubory vytvořené kompilátorem jazyka C++ na .exe; ostatní operační systémy se řídí jinými konvencemi pro pojmenování. Operační systémy jsou schopny spouštět spustitelné soubory bez dalšího zpracování.
Ilustrace překladače, který čte soubor se zdrojovým kódem jazyka Java a překládá kód jazyka Java do kódu virtuálního stroje, který je uložen do nového souboru. Virtuální stroj, další program, čte kód virtuálního stroje z nového souboru a interpretuje jej tak, aby provedl operace určené kódem virtuálního stroje.
Kompilování a spuštění programu napsaného v jazyce, který vytváří kód virtuálního stroje. Jazyky jako Java a C# se nejprve zkompilují do kódu virtuálního stroje, tj. do strojového kódu pro virtuální počítač – počítač, který ve skutečnosti neexistuje. Poté, co je zdrojový kód zkompilován, program nazývaný virtuální stroj (VM) spustí kód tak, že simuluje činnost skutečného počítače. Operační systém spouští virtuální počítač.
Obrázek ilustruje soubor se zdrojovým kódem jazyka Javascript, který je čten a zpracováván interpretem.
Spouštění programu napsaného v čistě interpretovaném jazyce. Jazyky jako Javascript a Perl nejsou vůbec kompilovány. Program nazývaný interpret čte soubor se zdrojovým kódem po jednotlivých příkazech a provádí nebo interpretuje každý příkaz tak, jak je čten, aniž by jej překládal do jiného jazyka. Interpret jazyka Javascript je součástí většiny webových prohlížečů, které spouští operační systém. U ostatních interpretovaných jazyků operační systém spouští interpret jako aplikační program.

Každý přístup ke spouštění programu napsaného ve vysokoúrovňovém programovacím jazyce má své výhody a nevýhody. Programy napsané v plně kompilovaných jazycích (např. C a C++) se spouštějí rychleji než programy napsané v částečně kompilovaných jazycích (např. Java a C#) a spouštějí se mnohem rychleji než programy napsané v plně interpretovaných jazycích (např. Javascript a Perl). Pro představu o rozdílu ve výkonu řekněme, že program v jazyce C++ se po zkompilování vykoná za čas 1,0 min. Ekvivalentní program napsaný v jazyce, který je zkompilován a následně interpretován, se zpravidla spustí v čase 3 až 10. Stejný program spuštěný jako čistě interpretovaný jazyk poběží v čase kolem 100. Současné implementace virtuálních strojů Java a C# používají interpreter JIT (just in time), který část virtuálního kódu kompiluje do strojového kódu během jeho zpracování. Procesory JIT zkracují dobu běhu přibližně na 1,5násobek doby běhu čistě kompilovaných jazykových systémů. Programovací jazyk Python je trochu jiný: hlavní část programu v jazyce Python je interpretovaná, ale je relativně malá, a tak má minimální vliv na celkovou dobu běhu. Většina knihoven jazyka Python, v nichž program tráví většinu času, je napsána v jazyce C, takže programy v jazyce Python běží téměř stejně rychle jako ekvivalentní program v jazyce C.

Na druhou stranu spustitelné programy vytvořené čistě kompilátorem nelze přenášet mezi různými platformami (např. program pro Windows nelze spustit na počítači Apple), zatímco programy napsané v interpretovaných jazycích lze mezi různými počítači přenášet snadněji. Této přenositelnosti je dosaženo tím, že pro každou platformu (kombinaci hardwaru a operačního systému) je k dispozici virtuální počítač nebo interpret. Interpretery a virtuální počítače jsou programy napsané v čistě kompilovaných jazycích, takže nejsou přenositelné, ale programy, které zpracovávají, ano.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.