Dynamický programovací jazyk
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 

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:

 ActionScript
 BeanShell
 Cobolscript
 Clojure
 ColdFusion Markup Language
 Common Lisp a mnoho dalších Lisps
 Dylan
 Groovy
 Gambas
 E
 Fancy
 JavaScript
 Julia
 Lua
 MATLAB / Octave
 Objective-C
 Perl
 PHP
 Powershell
 Python
 R
 Ruby
 Smalltalk
 Tcl
 VBScript
 Java (za použití Reflection)
 SuperCollider

Implementace

Funkce eval 

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 
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í 
Funkcionální programování je typickým rysem mnoha dynamických programovacích jazyků a také pochází z Lispu.

Uzávěry 
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 
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 
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 
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ří si dnes jsou vědomi termínu makro, se s nimi setká v programovacím jazyce C nebo C ++, kde jsou makra statické funkce, které jsou postaveny na malé podmnožině jazyka a jsou schopny pouze řetězcových substitucí nad textem zdrojového kódu 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 interpretru, 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 

Programování