難解プログラミング言語

難解プログラミング言語 (なんかいプログラミングげんご)とは、意図的に読解が困難なように設計されたプログラミング言語である。英語では、Esoteric programming language （略してesolangとも）と言われる。
基本的には、実用性を目指したものではなく、冗談プログラミング言語の一種で、いわゆるハッカーの間では、この種のジョークはたしなみとみなされており、難解プログラミング言語に区分されるプログラミング言語はいくつも作られてきた。
歴史.
INTERCALは最初期から現在に至るまで標準的な難解プログラミング言語の一つである。1972年にとジェイムズ・リヨンによって、慣れ親しんだ如何なる言語とも異なる言語にしようという意図のもとで設計された。その当時に確立された言語であった、Fortran、COBOL、アセンブリ言語といった言語の各要素をパロディー化していた。
長年、INTERCALは論文の言語マニュアルが存在するのみであった。しかし、1990年にUnix上でC言語により実装されると、INTERCALは再び注目された。これが刺激となり難解プログラミング言語の設計が世界的に流行した。
1993年にWouter van Oortmerssenは小規模なであるFALSEを作成した。コードが理解しにくく紛らわしくなるように構文規則が設計された。コンパイラはわずか1024バイトであった。FALSEに触発され、Urban Müllerは更に小規模で名高いBrainfuckを作成した。Brainfuckのプログラムはたった8種類の文字のみで構成される。Chris PresseyのBefunge (FALSEに似ているが、二次元の命令ポインタがある)とともに、Brainfuckは現在、最もサポートされている難解プログラミング言語の一つとなった。これらはチューリング陥穽の正統的な例であり、プログラミング言語の不必要に分かりにくい側面を示していた。Brainfuckはチューリング機械の一種のP′′言語と関係が深い。
用語.
チューリング陥穽.
チューリング陥穽とは、任意の計算可能な機能が記述できるが、一方でその記述が非実用的なほど難しいような、チューリング完全なプログラミング言語のこと。難解プログラミング言語について、言語機能を最小化しようとする場合に、チューリング陥穽と評されることがある。
言語パラダイム.
言語パラダイムには多くのカテゴリがあり、特定の言語がどのように利用されているのかを理解するのに役立つ。
これらのカテゴリには、以下のようなものが含まれる。
OISC.
OISCは唯一つの命令をサポートするような計算機のことである。
文化的文脈.
難解プログラミング言語の文化的な文脈については、Geoff Coxなどによって研究されている。Coxは、難解プログラミング言語をのmezangelleのようなコード芸術やコード詩と類似のものとみなしており、その著書の中で難解プログラミング言語について「人々の関心を命令や制御から文化的な表現や拒絶へと移行させた」と評している。Daniel Temkinは、brainfuckについて「人間的な表現とアセンブリ言語の境界を取り除くことを拒否しているがために、我々を滑稽な論理の探求へと誘ってくれる」と述べ、人間の思考と計算機の論理の間にある固有の矛盾を明示した。Temkinは難解プログラミング言語によるプログラミングを、例えばフルクサス運動における演奏のような、楽譜の演奏と関連付けていた。コードの中で論理規則を使い倒すことでその言語の視点を明確にできるのだ。