難解プログラミング言語

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

難解プログラミング言語 (なんかいプログラミングげんご)とは、意図的に読解が困難なように設計されたプログラミング言語である。英語では、Esoteric programming language (略してesolangとも)と言われる。

基本的には、実用性を目指したものではなく、冗談プログラミング言語の一種で、いわゆるハッカーの間では、この種のジョークはたしなみとみなされており、難解プログラミング言語に区分されるプログラミング言語はいくつも作られてきた。

歴史[編集]

INTERCALは最初期から現在に至るまで標準的な難解プログラミング言語の一つである [1] 。 1972年にドン・ウッズ英語版ジェイムズ・リヨンによって、 慣れ親しんだ如何なる言語とも異なる言語にしようという意図のもとで設計された [2] [3] 。 その当時に確立された言語であった、FortranCOBOLアセンブリ言語といった言語の各要素を パロディー化していた。

長年、INTERCALは論文の言語マニュアルが存在するのみであった。 しかし、1990年にUnix上でC言語により実装されると、 INTERCALは復び注目された。これが刺激となり難解プログラミング言語の設計が世界的に流行した。

1993年にWouter van Oortmerssenは小規模なスタック型プログラミング言語英語版であるFALSEを作成した。コードが理解しにくく紛らわしくなるよう構文規則が設計されてた。コンパイラはたったの1024バイトであった [4]。 FALSEに触発され、Urban Müllerは更に小規模で悪名の高いBrainfuckを作成した。Brainfuckのプログラムはたった8種類の文字のみで構成される。 Chris PresseyのBefunge (FALSEに似ているが、二次元の命令ポインタがある)とともに、 Brainfuckは現在、最もサポートされている難解プログラミング言語の一つとなった。 これらはチューリングの泥沼英語版 (: Turing tarpit)の正統的な例であり、 プログラミング言語の不必要に分かりにくい側面を示していた。 Brainfuckはチューリング機械の一種のP′′英語版言語と関係が深い。

用語[編集]

チューリングの泥沼[編集]

チューリングの泥沼英語版とは、任意の計算可能な機能が記述できるが、一方でその記述が非実用的なほど難しいような、チューリング完全なプログラミング言語のこと。 難解プログラミング言語について、言語機能を最小化しようとする場合に、チューリングの泥沼と評されることがある。

言語パラダイム[編集]

言語パラダイムには多くのカテゴリがあり、特定の言語がどのように利用されているのかを理解するのに役立つ。 これらのカテゴリには、 命令がデータの変更方法を記述する命令形言語(例:Brainfuck)、 データとコードは概ね交換可能であり関数適用を繰り返すことで実行される関数型言語(例:Unlambda)、 始状態に対して関数変換[訳語疑問点]が適用される書換え言語(例:Thue英語版) といったものが含まれる。

OISC[編集]

OISC英語版は唯一つの命令をサポートするような計算機のことである。

[編集]

'Piet'と出力するPietプログラム
PietによるHello worldプログラム
  • Brainfuck コンパイラが非常に小さい
  • Befunge 自己変更可能な2次元配列ソースコード
  • HQ9+ 実行可能な命令はH,Q,9,+の4つのみ
  • INTERCAL
  • KEMURI
  • Malbolge 3進数しか扱えず、プログラムの意味が逐次変わるので、人間の手では書くことができないと言われている
  • Piet 画像をソースコードとする
  • Pxem 0バイトのファイルでソースコードが記述できる
  • Unlambda
  • Lazy K 純粋関数型言語で、関数を新たに定義する構文はなく、組み込み関数が3つしか存在しない
  • Whitespace 半角スペース・タブ・改行のみでソースコードが作られる
  • Grass w,W,vのみでソースコードが作られる。スタックベースの関数型言語

文化的文脈[編集]

難解プログラミング言語の文化的な文脈については、Geoff Coxなどによって研究されている。 Coxは、難解プログラミング言語をMez Breeze英語版mezagelle英語版のようなコード芸術やコード詩と類似のものとみなしており、 その著書の中で難解プログラミング言語について「人々の関心を命令や制御から文化的な表現や拒絶へと移行させた」と評している[5]。 Daniel Temkinは、brainfuckについて「人間的な表現とアセンブリ言語の境界を取り除くことを拒否しているがために、我々を滑稽な論理の探求へと誘ってくれる」と述べ、人間の思考と計算機の論理の間にある固有の矛盾を明示した[6] 。 Temkinは難解プログラミング言語によるプログラミングを、例えばフルクサス運動における演奏のような、楽譜の演奏と関連付けていた。 コードの中で論理規則を使い倒すことでその言語の視点を明確にできるのだ[7]

参考文献[編集]

出典[編集]

  1. ^ Matthew Fuller, Software Studies, MIT Press, 2008
  2. ^ Eric S. Raymond (1996). The New Hacker's Dictionary. MIT Press. p. 258. ISBN 978-0-262-68092-9. https://books.google.com/books?id=g80P_4v4QbIC&pg=PA258. 
  3. ^ Woods, Donald R.; Lyon, James M. (1973), The INTERCAL Programming Language Reference Manual, Muppetlabs.com, オリジナルの2009-04-24時点によるアーカイブ。, http://www.webcitation.org/5gGhTDeaV?url=http://www.muppetlabs.com/~breadbox/intercal/intercal.txt 2009年4月24日閲覧。 
  4. ^ Interview with Wouter van Oortmerssen” (2015年7月1日). 2015年12月1日閲覧。
  5. ^ Cox 2013, p. 5
  6. ^ Temkin, Daniel (15 Jan 2014). “Glitch && Human/Computer Interaction”. NOOART: The Journal of Objectless Art (1). http://nooart.org/post/73353953758/temkin-glitchhumancomputerinteraction. 
  7. ^ Temkin, Daniel. “brainfuck”. Media-N Journal (Spring 2013). http://median.s151960.gridserver.com/?page_id=947 2014年5月6日閲覧。. 

関連項目[編集]