Movatterモバイル変換


[0]ホーム

URL:


Přeskočit na obsah
WikipedieWikipedie: Otevřená encyklopedie
Hledání

Interpret (software)

Z Wikipedie, otevřené encyklopedie

Interpret je v informatice speciálnípočítačový program, který umožňuje přímo vykonávat (interpretovat) zápis jiného programu v jehozdrojovém kódu ve zvolenémprogramovacím jazyce. Program proto není nutné převádět dostrojového kódu cílovéhoprocesoru, jako je tomu v případěpřekladače. Interpret tak umožňujeprogramování kódu, který je snadno přenositelný mezi různýmipočítačovými platformami. Interpret je použit též proshell, který vytvářípříkazový řádek.

Rozdíl mezi interpretem a kompilátorem můžeme vztáhnout též na programovací jazyky, které podle toho můžeme rozdělit nainterpretovanékompilované. Teoreticky je možné pro jakýkoliv programovací jazyk naprogramovat jak interpret, tak kompilátor, avšak interpretované jsou obvyklevyšší programovací jazyky.

Typy interpretů

[editovat |editovat zdroj]

Interprety se mohou chovat třemi různými způsoby podle toho, jak zpracovávají zdrojový kód programu:

  1. provádějí přímozdrojový kód
  2. přeloží zdrojový kód do efektivnějšího mezikódu, který následně spustí
  3. přímo spustí předem vytvořený předkompilovaný mezikód[1], který je produktem části interpretu

Perl,Python neboMATLAB jsou interprety 2. typu.UCSD PascalJava jsou 3. typu (zdrojové kódy jsou kompilovány předem, uloženy ve strojově nezávislém tvaru, který je po spuštěnílinkován a interpretován nebo kompilován v případě použitíJIT). Některé programovací jazyky (napříkladSmalltalk neboPython) mohou kombinovat 2. a 3. typ. Příkladem interpretů 1. typu jeunixový shell,COMMAND.COM nebo interprety jazykaBASIC.

Výhody interpretace

[editovat |editovat zdroj]

Interpretace kódu má proti překladu do strojového kódu a přímému spuštění některé výhody:

  • Rychlost vývoje – zejména u větších projektů je při interpretaci rychlejší cyklus editace – spuštění – oprava chyb.
  • Laditelnost – stav interpretu je jednoznačně definován, jeho činnost přesně odpovídá zdrojovému kódu (nebývají použityoptimalizace, které mohou původní strukturu kódu zakrýt nebo pozměnit).
  • Kompatibilita – stejný program může být bez problémů spuštěn na mnoha cílových architekturách, jazyk obvykle zakrývá rozdíly mezi různými operačními systémy.
  • Správa paměti – při běhu interpretovaného programu nemusí být proměnné vázány na fyzickou adresu v operační paměti, proto je možné přemapování proměnných, což může zabránit fragmentaci paměti.
  • Jednoduchost – obecně je mnohem snadnější vytvořit interpret jazyka, než kompilátor; interpretace značně zjednodušuje vytváření aplikačních nebo experimentálních jazyků, přičemž jednoduchost vytváření a modifikace interpretů na druhou stranu může vést k problémům s kompatibilitou.

Efektivita

[editovat |editovat zdroj]

Hlavní nevýhodou interpretu je, že v případě, kdy je program interpretován, zpravidla probíhá pomaleji, než když je kompilován. Rozdíl v rychlosti závisí na velikosti programu. Obvykle trvá déle spouštět program přes interpret než spouštět kompilovaný kód, ale může trvat kratší dobu, než je celková doba potřebná ke kompilaci a spuštění. To je důležité zejména při prototypování a testování kódu, při cyklu editace–interpretace–ladění může být často mnohem kratší, než je cyklus editace – kompilace – spuštění – ladění.

Interpretovaný kód je pomalejší než běh kompilovaného kódu, protože interpret musí analyzovat každý program při každém spuštění a pak provést požadovanou akci, vzhledem k tomu, že kompilovaný kód právě provádí akci ve stanovené souvislosti určené na základě kompilace. Tatorun-time analýza je známá jako „interpretační režie“. Přístup k proměnné je také pomalejší, protože v interpretu musí být provedeno mapování identifikátorů na paměťová místa opakovaně za běhu (kompilovaný kód přistupuje k proměnným přímo na cílovou adresu bez nutnosti vyhledávání).

Existují různé kompromisy mezi rychlostí vývoje při použití interpretu a rychlostí provedení programu při použití kompilátoru. Některé jazyky (např. Lisp) umožňují interpretovaný a kompilovaný kód volat navzájem a sdílet proměnné. To znamená, že jednou je program testován a odladěn pod interpretem, lze jej kompilovat a tím využívat rychlejšího provedení programu, zatímco je program vyvíjen. Mnohé interprety nebudou vykonávat zdrojový kód tak, jak je napsán, ale převedou si jej do nějaké kompaktnější vnitřní formy. Například některé interpretyBASICu nahradíklíčová slova jednobytovým znakem, který lze použít k nalezení instrukce ve skoku v tabulce. Interpret může používat stejnýlexikálnísyntaktický analyzátor jako kompilátor a pak interpretovat výsledný abstraktní syntaktický strom.

Interpret bytekódu

[editovat |editovat zdroj]

Existuje celé spektrum možností mezi interpretací a kompilací, v závislosti na úrovni analýzy provedené před spuštěním programu. NapříkladEmacsLisp je kompilován dobytekódu, který je vysoce komprimovaná a optimalizovaná reprezentace zdrojového kódu v Lispu, ale není to strojový kód (a tedy není vázán na žádný konkrétníhardware). Tento „kompilovaný“ kód je pak interpretován v bytekódu interpreta (sám je napsán v jazyceC). Kompilovaný kód je v tomto případě strojový kód provirtuální stroj, který není realizován pro hardware, ale jako interpret bytekódu. Stejný přístup se používá veForth kódu používaném systémy Open Firmware: zdrojový jazyk je kompilován do „F kódu“ (bytekód), který je pak interpretován virtuálním strojem.

Interpret abstraktního syntaktického stromu

[editovat |editovat zdroj]

Mimo možnosti interpretace a kompilace lze využít i jiný přístup, a to transformace zdrojového kódu do optimálního abstraktního syntaktického stromu (abstract syntax tree – AST), a následné řízení výkonu programu podle této struktury. V tomto přístupu je třeba analyzovat každou větu pouze jednou. Hlavní výhodu oproti bytekódové interpretaci je, že AST udržuje globální program, strukturu a vztahy mezi instrukcemi (které se v bytekódové reprezentaci ztrácí) a poskytuje kompaktnější reprezentaci.

Proto byl navržen AST jako lepší průběžný formát projust-in-time kompilátory než bytekód. Rovněž umožňuje provádět lepší analýzu za běhu. Na interpretuJavy založeném na AST bylo dokázáno, že je rychlejší než obdobné interprety bytekódu, díky této silnější optimalizaci dovoluje mít kompletní strukturu programu, která je k dispozici již v průběhu spuštění.

Kompilacejust-in-time

[editovat |editovat zdroj]
Související informace naleznete také v článku Just-in-time kompilace.

Další možností, která využívá výhod interpretů, bytekódových interpretů a kompilací, je kompilacejust-in-time (JIT, anglickyprávě včas), což je technika, ve které je meziprodukt reprezentace programu kompilován do nativníhostrojového kódu za běhu. To vyrovnává účinnost běhu nativního kódu, vzhledem k nárokům na čas spuštění a paměť, pokud je bytekód nebo AST nejprve kompilován. Adaptivní optimalizace je doplňkovou technikou, ve které interpret profiluje běžící program a sestavuje své nejčastěji kompilované části do nativního kódu. Obě techniky jsou několik desítek let staré, byly uvedeny již v jazyceSmalltalk (1980).

Kompilacejust-in-time získala větší pozornost mezi implementátory jazyků v posledních letech. Například jazykyJava,Python.NET Framework nyní všechny obsahujíJIT.

Historie

[editovat |editovat zdroj]

Termín „interpret“ měl trochu jiný význam u elektromechanických výpočetních strojů, které se používaly před příchodem elektronických strojů po roce1940. V té době se prováděly sofistikované výpočty nad velkým množstvím dat (například sčítání lidu v USA v roce1890) s pomocíděrných štítků, které se ručně předávaly podle naplánovaného procesu mezi různými specializovanými stroji. Převod z děrných štítků do čitelné podoby zajišťovaly například stroje Numerický interpretIBM 550 (anglickyNumeric Interpreter, rok1930) a Znakový interpretIBM 557 (anglickyAlphabetic Interpreter, rok1954).

První elektronické počítače (tzv. mainframe) měly velmi malý výpočetní výkon, málo paměti a velmi jednoduchéoperační systémydávkovým zpracováním úloh, takže bylo nemožné mít v paměti počítače zároveň interpret a prováděný program a využívatmultitasking. Proto se v té době používalykompilátory a kompilované programovací jazyky, kdy bylo možné v prvním kroku nejprve ze zdrojového kódu vytvořit spustitelný program vestrojovém kódu a ten teprve pak samostatně spustit a vykonat. Přesto obsahovaly tyto první počítače interpretyskriptovacích jazyků, které interpretovaly a řídily zpracování dávkových úloh (napříkladJob Control Language,DIGITAL Command Language). Vzhledem k výkonu tehdejších počítačů ale byl zápis dávek poměrně obtížný a komplikovaný, protože se kladl důraz na snadnou a rychlou interpretaci zápisu počítačem a ne na pohodlí uživatele.

Reference

[editovat |editovat zdroj]
  1. V tomto významu jeprocesor také interpretemstrojových instrukcí

Související články

[editovat |editovat zdroj]

Externí odkazy

[editovat |editovat zdroj]
  • Obrázky, zvuky či videa k tématuinterpret na Wikimedia Commons
Pahýl
Pahýl
Tento článek je příliš stručný nebopostrádá důležité informace.
Pomozte Wikipedii tím, že jej vhodněrozšíříte. Nevkládejte všakbez oprávnění cizí texty.
Autoritní dataEditovat na Wikidatech
Citováno z „https://cs.wikipedia.org/w/index.php?title=Interpret_(software)&oldid=25130181
Kategorie:
Skryté kategorie:

[8]ページ先頭

©2009-2026 Movatter.jp