動的プログラミング言語
動的言語では、オブジェクトシステムや型システムを実行時に変更できるのが一般的である。これはすなわち、実行時定義に従って新たなオブジェクトを生成したり、既存の型やオブジェクトの合成に基づいて新たなオブジェクトを生成することを意味する。また、継承関係や型の木構造の変更も指していて、既存の型の振る舞いも(特にメソッド呼び出しの観点で)それによって変化する。Smalltalkのクラス登録などが顕著な例である。
上記はクラス定義用の専用構文ではなく、Objectというクラスオブジェクトにクラス登録用のメッセージを送っているだけである。実行中に登録しているが削除も実行中に可能である。
動的プログラミング言語(英: dynamic programming language)は、コンピュータ・プログラミング言語において、一般にコンパイルなどの準備段階に済まされることが多いことを、準備時ではなく実行時に行うプログラミング言語処理系(の言語)である。本来は実装(処理系)のことを指すべきであるが、一般にその言語を指して議論されることが多い。もっぱら高水準言語が多い。動的言語(英: dynamic language)とも。例えば、型システムによる型チェックや、値の型変換、名前束縛などを、コンパイルなどの実行準備時ではなく実行時に行う。そういった「動的さ」により、コードの追加やオブジェクトや定義の拡張や型システムの変更によるプログラムの拡張、といったことが行いやすい、ということが利点とされる。これらの動作は静的な処理系でも手間はかかるがエミュレート可能である(例えばJavaのJDK/JREでも、クラスローダーを活用すれば可能である)。一方、動的言語ではそういったことが、直接的にサポートされる。
動的言語と動的型付けは同じ概念ではないし、全ての動的言語が必ずしも動的型付き言語というわけではない。たとえばSmalltalk環境の一つであるStrongtalk(英語版)やGradualtalkは動的な言語にも拘わらず静的型検査が可能となっている。しかし多くの動的言語は動的型付き言語である。