【Book】Rubyで作る奇妙なプログラミング言語〜Esoteric Language〜

原悠 著、
毎日コミュニケーションズ 刊、
日々増え続ける奇妙なプログラミング言語


 コンピュータが生まれて少ししてからプログラミング言語が発明された。自然言語とは比較にならないものの、今日では膨大な種類のプログラミング言語が存在する。
 「Programming Language Popularity」には様々な観点でどの言語に人気があるかを分析しており、大体おなじみの言語が上位を占めている。しかし世の中には奇妙としか言いようのない言語「Esoteric Language」も多数存する。


 本書は、そんな言語についての紹介とRuby言語による処理系実装方法の説明によって、プログラミング言語とはなにかを学ぶ内容となっている。
 なお、説明に用いている言語はRubyだがロジックは平易に書かれており、他の言語で同様のプログラムを書く際の参考としても十分に利用できる。


 趣味または仕事で新しい言語の開発を試みる人、プログラミング言語とはなにかを知りたい人、適当なプログラミング例題を求める人は一読することをお勧めしたい。


目次:
1.Esoteric Languageを知る
 3つの言語「HQ9+」「Brainf*ck」「Whitespace」によって、プログラミング言語の本質に迫る。


HQ9+
 4つの命令だけを持つ、機能を制限された言語。特定分野において世界最高速を実現する言語。本節で、プログラミング言語の最低条件を説明する。

Brainf*ck
 8つの命令を持ち、現在のコンピュータで解けるあらゆる問題を解くことが可能である「チューリング完全」を実現する言語。
 本節で、実用的プログラミング言語の最低条件と、インタプリタコンパイラトランスレータ)方式の実装を説明する。

Whitespace
 目に見えない命令で動作する、チューリング完全な言語。
 本節で、中間言語方式の実装を説明する。またEsoteric Languageの「奇妙さ」の味わいについて学ぶ。


2.Esoteric Languageを作る
 2つの本書独自の言語「Starry」「Bolic」について、開発方針検討から実装までを通して、Esoteric Languageを作る方法論を学ぶ。
 これは、一般的な言語作成の方法論と、「奇妙」であるための方法論を含んでいる。
 一般的な言語作成方法論だが、プログラミング言語は構文 (Syntax) と意味論 (Semantics) から構成される。これは、言語の見た目と内容のことだと本書では説明する。
 次にEsoteric Languageの作成だが、見た目と内容のどちらかに奇妙さやこだわりを持ち込めば、Esoteric Languageになるというわけである。


・Starry
 見た目にこだわった言語。ソースプログラムが「星空のように」見えることを念頭に使用可能な記号や命令語などを決めていく。

・Bolic
 Esoteric Languageの作成において「奇妙であること」が主目的である場合、どのような開発指針を取っても良いが、裏を返せば取っ掛かりがないということになる。
 そこで本節ではその発想方法を中心に示している。
 具体的には、どんな条件でも良いから適当な条件を決めてしまうことだ。本言語の作成においては、使用する文字に条件を付けている。


付録.Esoteric Language傑作選
 付録では、既存の様々な言語の内興味深い13の言語を示している。
 また説明にあたり、以下のような分類に基づいて説明している。


・2D系
 ソースコードが2次元以上に広がる。

  - 新次元のプログラミング言語Befunge
  - 文字を一種類しか使わない言語、Wierd


自然言語
 ソースコードが一見自然言語のテキストに見える。

  - 英文学的プログラミング言語Shakespeare
  - 数値を「調理」する言語、Chef


・関数系
 関数計算を基本とするもの。

  - 関数だけでできている言語、Unlambda
  - ちょっと草植えときますね型言語、Grass
  - 1キロバイトコンパイラが書ける言語、False


・シンプル系
 プログラミング言語を単純にすることを追求したもの。

  - 0次元のプログラミング言語NULL
  - A, AAA言語、AAAAAAAAAAAAAA!!!!


・難読系
 ソースコードの読みづらさを追求したもの。

  - 普通の言語に似て非なる言語、INTERCAL
  - 地獄から来た言語、Malbolge


・モチーフ系
 現実世界の様々なものをモチーフにしたもの。

  - 風にたなびく煙のような言語、KEMURI
  - データをドライブする言語、Taxi


■著者情報
Greenbear Laboratory
※著者のウェブサイト。


■作品情報
Rubyで作る奇妙なプログラミング言語〜Esoteric Language〜 - はてな


■書誌情報
Rubyで作る奇妙なプログラミング言語〜Esoteric Language〜(2008.12.20/2008.12.25)


■参考情報
Esoteric resources at esolangs.org
※Esolangs.orgのサイト。
Esolangs.org Wiki
※Esolangs.orgのWikiサイト。各種Esoteric Languageの情報を集積している。
HQ9+ - Wikipedia
Brainfuck - Wikipedia
Whitespace - Wikipedia
Befunge - Wikipedia
Wierd - Esolangs wiki
Shakespeare (プログラミング言語) - Wikipedia
Chef - Wikipedia [en]
Unlambda - Wikipedia [en]
Grass - Esolangs wiki
False - Wikipedia
NULL - Esolangs wiki
AAAAAAAAAAAAAA!!!! - Esolangs wiki
INTERCAL - Wikipedia
Malbolge - Wikipedia
KEMURI (プログラミング言語) - Wikipedia
Taxi - Esolangs wiki


■備考
・本文中の言語名からのリンク先は極力当該言語の原点サイトとしたが、いくつかは原点サイトが発見できない/消失している状態であった。
・参考情報には、Wikipedia(日本語)、Wikipedia(英語)、Esolangs.org Wikiへのリンクを記載した。


Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~