難解プログラミング言語
難解プログラミング言語 (なんかいプログラミングげんご)とは、意図的に読解が困難なように設計されたプログラミング言語である。英語では、Esoteric programming language (略してesolangとも)と言われる。
基本的には、実用性を目指したものではなく、ジョークのプログラミング言語の一種で、いわゆるハッカーの間では、この種のジョークはたしなみとみなされており、難解プログラミング言語に区分されるプログラミング言語はいくつも作られてきた。
歴史
INTERCALは最初期から現在に至るまで標準的な難解プログラミング言語の一つである[1]。1972年にドン・ウッズ(英語版)とジェイムズ・リヨンによって、慣れ親しんだ如何なる言語とも異なる言語にしようという意図のもとで設計された[2][3]。その当時に確立された言語であった、Fortran、COBOL、アセンブリ言語といった言語の各要素をパロディー化していた。
長年、INTERCALは論文の言語マニュアルが存在するのみであった。しかし、1990年にUnix上でC言語により実装されると、INTERCALは再び注目された。これが刺激となり難解プログラミング言語の設計が世界的に流行した。
1993年にWouter van Oortmerssenは小規模なスタック型プログラミング言語(英語版)であるFALSEを作成した。コードが理解しにくく紛らわしくなるように構文規則が設計された。コンパイラはわずか1024バイトであった[4]。FALSEに触発され、Urban Müllerは更に小規模で名高いBrainfuckを作成した。Brainfuckのプログラムはたった8種類の文字のみで構成される。Chris PresseyのBefunge (FALSEに似ているが、二次元の命令ポインタがある)とともに、Brainfuckは現在、最もサポートされている難解プログラミング言語の一つとなった。これらはチューリング陥穽の正統的な例であり、プログラミング言語の不必要に分かりにくい側面を示していた。Brainfuckはチューリング機械の一種のP′′言語と関係が深い。
用語
チューリング陥穽
チューリング陥穽とは、任意の計算可能な機能が記述できるが、一方でその記述が非実用的なほど難しいような、チューリング完全なプログラミング言語のこと。難解プログラミング言語について、言語機能を最小化しようとする場合に、チューリング陥穽と評されることがある。
言語パラダイム
言語パラダイムには多くのカテゴリがあり、特定の言語がどのように利用されているのかを理解するのに役立つ。
これらのカテゴリには、以下のようなものが含まれる。
- 命令がデータの変更方法を記述する命令形言語(例:Brainfuck)、
- データとコードは概ね交換可能であり関数適用を繰り返すことで実行される関数型言語(例:Unlambda)、
- 始状態に対して関数変換[訳語疑問点]が適用される書換え言語(例:Thue(英語版))
OISC
OISCは唯一つの命令をサポートするような計算機のことである。
例
![](http://upload.wikimedia.org/wikipedia/commons/d/d0/Piet_Program.gif)
![](http://upload.wikimedia.org/wikipedia/commons/4/48/Piet_Program_Hello_World.gif)
- Brainfuck コンパイラが非常に小さい
- Befunge 自己変更可能な2次元配列ソースコード
- COW Ook!の派生言語
- HQ9+ 実行可能な命令はH,Q,9,+の4つのみ
- INTERCAL
- KEMURI
- Malbolge 3進数しか扱えず、プログラムの意味が逐次変わるので、人間の手では書くことができないと言われている
- Piet 画像をソースコードとする
- Pxem 0バイトのファイルでソースコードが記述できる
- Unlambda
- Lazy K 純粋関数型言語で、関数を新たに定義する構文はなく、組み込み関数が3つしか存在しない
- Whitespace 半角スペース・タブ・改行のみでソースコードが作られる
- Grass w,W,vのみでソースコードが作られる。スタックベースの関数型言語
- JSFuck JavaScriptのような文法の言語。構成文字は
[
,]
,(
、)
、!
と+
のみ - Ook! Brainfuckの置き換え
- Shakespeare シェイクスピアの演劇のように見えるよう設計されている
- velato 音階を用いて記述する言語
- FRACTRAN 正の分数の列をソースコードとする
文化的文脈
難解プログラミング言語の文化的な文脈については、Geoff Coxなどによって研究されている。Coxは、難解プログラミング言語をMez Breeze(英語版)のmezangelleのようなコード芸術やコード詩と類似のものとみなしており、その著書の中で難解プログラミング言語について「人々の関心を命令や制御から文化的な表現や拒絶へと移行させた」と評している[5]。Daniel Temkinは、brainfuckについて「人間的な表現とアセンブリ言語の境界を取り除くことを拒否しているがために、我々を滑稽な論理の探求へと誘ってくれる」と述べ、人間の思考と計算機の論理の間にある固有の矛盾を明示した[6]。Temkinは難解プログラミング言語によるプログラミングを、例えばフルクサス運動における演奏のような、楽譜の演奏と関連付けていた。コードの中で論理規則を使い倒すことでその言語の視点を明確にできるのだ[7]。
出典
- ^ Matthew Fuller, Software Studies, MIT Press, 2008
- ^ 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
- ^ Woods, Donald R.; Lyon, James M. (1973), The INTERCAL Programming Language Reference Manual, Muppetlabs.com, オリジナルの2009-04-24時点におけるアーカイブ。, https://webcitation.org/5gGhTDeaV?url=http://www.muppetlabs.com/~breadbox/intercal/intercal.txt 2009年4月24日閲覧。
- ^ “Interview with Wouter van Oortmerssen” (1 July 2015). 1 December 2015閲覧。
- ^ Cox 2013, p. 5
- ^ Temkin, Daniel (15 Jan 2014). “Glitch && Human/Computer Interaction”. NOOART: The Journal of Objectless Art (1). http://nooart.org/post/73353953758/temkin-glitchhumancomputerinteraction.
- ^ Temkin, Daniel. “brainfuck”. Media-N Journal (Spring 2013). http://median.s151960.gridserver.com/?page_id=947 2014年5月6日閲覧。.
参考文献
- 『Rubyで作る奇妙なプログラミング言語: Esoteric Language』ISBN 978-4839927844
- Gödel numbers: a new approach to structured programming doi:10.1145/947631.947634 発表が1980年と、比較的古い資料のひとつ。なお、掲載されたのは学会の研究会誌であるが、エイプリルフール企画号で他にもケッタイな記事が掲載されている。
- 飯澤恒 他、「難読プログラミング言語Malbolgeにおけるプログラム構成手法」(電子情報通信学会技術研究報告)…難読プログラミング言語を真面目な用途に使おうという技術論文…本文 (PDF)
- 水野貴明、「難解プログラミング言語の覚え書き:BrainF*ck」…Interface誌2002年9月号の「開発環境探訪」掲載の原稿の修正版
- Esolang, the esoteric programming languages wiki
- Camille Paloque-Bergès (2009). "Langages ésotériques". Poétique des codes sur le réseau informatique. Archives contemporaines. ISBN 978-2-914610-70-4.
- Cox, Geoff (2013). Speaking Code: Coding as Aesthetic and Political Expression. MIT Press. ISBN 978-0-262-01836-4. https://books.google.com/books?id=wgnSUL0zh5gC&pg=PA6
関連項目
- IOCCC - C言語のプログラムを書き、その読みにくさと複雑さを競うプログラミングコンテスト。
外部リンク
- Esolang
コンピュータ・プログラミング言語の関連項目 | |
---|---|
言語水準 | |
言語処理系 | |
言語分類 | |
その他 | |
関連項目 |
- 表示
- 編集