Dynamický programovací jazyk

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Dynamický programovací jazyk je termín používaný v informatice popisující třídu vyšších programovacích jazyků, který v běhu vykonává spoustu běžných operací, jako statické programovací jazyky provádí během kompilace. Toto chování umožňuje rozšířit program následujícím způsobem: přidáním nového zdrojového kódu, rozšířením objektů a jejich definic nebo modifikací typového systému. Toto chování může být emulováno takřka v každém rozmanitém jazyce, ale musí poskytovat přímé nástroje k jejich využívání. Mnoho z těchto nástrojů bylo nejdříve implementováno jako nativní funkce pro programovací jazyk Lisp.

Většina dynamických jazyků jsou také dynamicky typované, ale není to pravidlem. Dynamické programovací jazyky jsou často (ale ne vždy) označovány jako skriptovací jazyky, i když pojem „skriptovací jazyk“ v jeho nejužším smyslu se odkazuje na jazyky specifické pro zmíněné běhové prostředí.

Příklady[editovat | editovat zdroj]

Populární dynamické programovací jazyky zahrnují JavaScript, Python, Ruby, PHP, Lua a Perl. Níže uvedené příklady jsou obecné považovány za dynamické programovací jazyky:

Implementace[editovat | editovat zdroj]

Funkce eval[editovat | editovat zdroj]

Některé dynamické programovací jazyky poskytují funkci eval. Tato funkce převezme řetězcový parametr obsahující kód v daném jazyce a provede ho. Pokud tento kód odpovídá syntaxi programovacího jazyka, vrátí návratovou hodnotu. Avšak Erik Meijer a Peter Drayton naznačují programátorům, že používání funkce eval je chudá náhrada za funkce vyšších řádů.

Změna objektu za běhu[editovat | editovat zdroj]

Typ nebo objekt může být typicky modifikován v průběhu vykonávání programu v dynamickém programovacím jazyce. To může znamenat vytváření nových objektů z definice běhového prostředí nebo na základě mixinu existujících typů či objektů. Toto může vést ke změně dědičnosti nebo ke stromovému přetypování a tím lze měnit způsob, jak se budou už existující typy chovat (zejména pokud jde o volání metod).

Funkcionální programování[editovat | editovat zdroj]

Funkcionální programování je typickým rysem mnoha dynamických programovacích jazyků a také pochází z Lispu.

Uzávěry[editovat | editovat zdroj]

Jedním z nejvíce používaných aspektů funkcionální programování v dynamických programovacích jazycích je uzávěr, který umožňuje vytvořit novou instanci funkce, která si zachovává přístup ke kontextu, ve kterém byl vytvořen. Jednoduchým příkladem je generování funkce pro skenování textu pro "slovo":

function new_scanner (slovo)
  temp_function = function (vstup)
    scan_for_text (vstup, slovo)
  end function
  return temp_function
end function

Všimněte si, že vnitřní funkce nemá žádné jméno a místo toho je uložena v proměnné temp_function. Pokaždé, když je funkce new_scanner provedena, vrátí novou funkci, která si pamatuje hodnotu parametru slovo, který byl předán, když to bylo definováno.

Uzávěry jsou jedním z hlavních nástrojů funkcionálního programování a mnoho programovacích jazyků podporuje alespoň tento stupeň funkčního programování.

Continuations[editovat | editovat zdroj]

Dalším rysem některých dynamických programovacích jazyků je Continuation. Continuation představuje spuštěný stav, který může být znovu vyvolán. Například, parsovač může vrátit průběžný výsledek a když je znovu vyvolán, bude nadále analyzovat vstup. Continuation se provádí velmi složitým způsobem, zejména s ohledem na uzávěry. Z tohoto důvodu mnoho dynamických programovacích jazyků neposkytuje Continuation.

Reflexe[editovat | editovat zdroj]

Reflexe je běžná v mnoha dynamických programovacích jazyků a obvykle zahrnuje analýzu typů a metadata generických nebo polymorfních dat. Může ale obsahovat úplnou úpravu kódu programu jakožto dat pomocí funkcí, které poskytuje Lisp při analýze symbolických výrazů.

Makra[editovat | editovat zdroj]

Omezený počet dynamických programovacích jazyků nabízejí funkce, které kombinují kód introspekce a eval ve funkci nazvanou makro. Většina programátorů, kteří dnes jsou si vědomi termínu makro se s nimi setkají v programovacím jazyce C nebo C ++, kde jsou statické funkce, které jsou postaveny v malé podmnožině jazyka a jsou schopny pouze řetězcových substitucí na textu programu. Nicméně v dynamických programovacích jazycích poskytují přístup k vnitřnímu fungování překladače a plný přístup k interpretovi, virtuálnímu stroji nebo k běhovému prostředí, což umožňuje definovat programovací jazyk konstruktem, který může optimalizovat kód nebo upravovat syntaxi či gramatiku programovacího jazyka.

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Dynamic_programming_language na anglické Wikipedii.

  1. Chapter 24. Dynamic language support. Static.springsource.org. Retrieved on 2013-07-17.
  2. <http://groovy.codehaus.org/