難解プログラミング言語を整える
初級エソラングを整える。
= あえて読み書きしにくく作られたプログラミング言語16種を、コード例つきで一覧する図鑑
エソラングが初めての方は、先に そもそもエソラング(難解プログラミング言語)とは・何の役に立つのか をどうぞ。
そもそもエソラング(難解プログラミング言語)とは
役に立つためではなく、「こんな言語があってもいい」を形にした言語たち。
エソラング(esoteric programming language)は、日本語では「難解プログラミング言語」と呼ばれます。実用で使いやすくするためではなく、わざと読みにくくしたり、材料を極端に減らしたり、冗談や芸術として作ったりした言語の総称です。1972年の INTERCAL が最初期の例として知られています。
ふつうのプログラミング言語は、人が読み書きしやすく、間違えにくくなるように設計されます。エソラングはその逆に、「命令を数個しか持たない」「絵やレシピがそのままコードになる」「見えない文字だけで書く」といった制約を、あえて楽しむものです。仕事で使われることはほとんどありませんが、言語の仕組みを考える題材として世界中で作られ続けています。
何の役に立つのか
-
「プログラミング言語とは何か」を考え直せる
ふつうの言語が当たり前に持っている変数・条件分岐・繰り返しが、どこまで減らせるのかが見えてきます。
-
計算の本質を、最小の材料で確かめられる
材料がわずかでも、繰り返しと分岐があれば幅広い計算ができます。「計算できるとは何か」という理論の入口になります。
-
自作の実行環境(インタプリタ)の題材になる
命令が少ない言語は、実行するプログラムを自分で作る練習に向いています。言語の仕組みを手を動かして学べます。
-
パズル・芸術・ユーモアとして楽しめる
絵がコードになる言語、レシピがコードになる言語など、プログラミングの別の顔を見せてくれます。
-
話のネタ・研修のアイスブレイクになる
「画面に何も表示されないのに動く言語がある」といった話は、技術に詳しくない人とも盛り上がれます。
普通の言語と比べると
- ふつうの言語は「読みやすさ・書きやすさ・速さ」を目指しますが、エソラングは「最小」「難解」「遊び」など、別の目的で作られています。
- 仕事の道具として使われることはほぼありません。その代わり、作る・読むうちに言語の仕組みへの理解が深まります。
- 多くのエソラングは、ふつうの言語と同じ計算ができる(チューリング完全)ように作られています。ただし、あえて計算できる範囲を絞った言語もあります。
下の図鑑から気になる言語を選んで、読みにくさと書きにくさの違いを眺めてみてください。実行できる言語は「実行できる言語もあります」の欄からどうぞ。
記号系(7言語)
最小限の記号だけで書く言語
No.01 ・ 1993年
Brainfuck
= 命令が8つだけの言語
- 読みにくさ
- ●●●○○
- 書きにくさ
- ●●●●○
No.02 ・ 2003年
Whitespace
= 見た目に何も残らない言語
- 読みにくさ
- ●●●●○
- 書きにくさ
- ●●●●●
No.03 ・ 2012年
JSFuck
= 6文字だけで書くJavaScript
- 読みにくさ
- ●●●●○
- 書きにくさ
- ●●●●○
No.04 ・ 2002年
Lazy K
= 変数を持たない言語
- 読みにくさ
- ●●●●●
- 書きにくさ
- ●●●●●
No.13 ・ 2006年
Grass
= w・W・v の3文字で書く「草」の言語
- 読みにくさ
- ●●●●○
- 書きにくさ
- ●●●●●
No.15 ・ 2001年
HQ9+
= 命令が4つだけの冗談の言語
- 読みにくさ
- ●○○○○
- 書きにくさ
- ●○○○○
No.16 ・ 2003年
COW
= 牛の鳴き声でできた Brainfuck の仲間
- 読みにくさ
- ●●●○○
- 書きにくさ
- ●●●●○
視覚・構造系(5言語)
文字以外の形がそのまま構造になる言語
No.05 ・ 2002年
Piet
= 絵がそのままプログラムになる言語
- 読みにくさ
- ●●●●○
- 書きにくさ
- ●●●●●
No.06 ・ 1993年
Befunge
= 2次元の盤面を実行する言語
- 読みにくさ
- ●●●○○
- 書きにくさ
- ●●●○○
No.07 ・ 2015年
Folders
= フォルダの構造がプログラムになる言語
- 読みにくさ
- ●●●●○
- 書きにくさ
- ●●●●○
No.08 ・ 2009年
Velato
= 音楽がプログラムになる言語
- 読みにくさ
- ●●●●○
- 書きにくさ
- ●●●●○
No.14 ・ 2009年
><>(Fish)
= 盤面を走り、スタックを増やせる言語
- 読みにくさ
- ●●●○○
- 書きにくさ
- ●●●○○
文学・世界観系(4言語)
物語や設定がそのままコードになる言語
ふつうの言語と比べる
C・JavaScript・Python・Java という日常的に使われている言語は、この図鑑には含めていません。同じものさし(読みにくさ・書きにくさ)で比べたものを、別のページ プログラミング言語を整える にまとめています。
実行できる言語もあります
Brainfuck と Befunge は図鑑のページでその場で実行できます。もっとじっくり書きたいときは、専用の実行環境へどうぞ。
出典
各言語の解説・出典URLは esolangs.org ほか各言語の公式ドキュメントによります(個別ページに明記)。全16言語。
このページは静的な一覧で、入力欄はありません。閲覧数の計測(Google アナリティクス)についてはプライバシーポリシーをご覧ください。
このツールについて
プログラミング言語は、コンピュータに指示を出すためのことばです。ふつうは読みやすく、書きやすくなるように設計されます。ところが世の中には、あえて読み書きしにくく設計された言語があります。絵がそのままプログラムになる言語、料理のレシピがプログラムになる言語、画面に何も表示されない言語など、そうした難解プログラミング言語(エソラング)を16種類集めました。仕組みと成り立ちを、事実にもとづいて紹介します。
絵がコードになる言語、レシピがコードになる言語、画面に何も表示されない言語など、難解プログラミング言語16種を紹介する図鑑。読みにくさ・書きにくさの5段階評価とコード例つき。Brainf*ck と Befunge はその場で実行できる。
主な機能
- 16言語を記号系・視覚構造系・文学世界観系の3分類で紹介(C・JavaScript・Java・Python との比較は /prog-lang/)
- 読みにくさ・書きにくさの5段階評価とコード例
- Brainf*ck・Befunge はページ内で実行可能(自分のコードも実行できる)
- 各言語の誕生年・作者・国・学べること・出典を明記
- /brainfuck/ /befunge/ /ook/ /deadfish/ /malbolge/ /jsfuck/ /whitespace/ の実行ツールへ導線・送信ゼロ
よくある質問
Q. エソラングとは何ですか?
A. 実用性よりも、特定のアイデアや制約を追求するために設計されたプログラミング言語のことです。esoteric programming language(難解プログラミング言語)の略称で、この図鑑では16言語を紹介しています。
Q. 16言語の一覧を教えてください。
A. Brainf*ck・Whitespace・JSFuck・Lazy K・Piet・Befunge・Folders・Velato・Shakespeare・Chef・Malbolge・INTERCAL・Grass・><>(Fish)・HQ9+・COW の16言語です。C・JavaScript・Java・Python との比較は「プログラミング言語の比較を整える」(/prog-lang/)にまとめています。
Q. 「読みにくさ」「書きにくさ」はどう決めていますか?
A. それぞれ5段階の評価で、言語の設計上の特徴(命令数の少なさ、構文の特殊さなど)にもとづく当サイトの目安です。各言語のページで根拠を説明しています。
Q. この図鑑で実際に動かせる言語はありますか?
A. Brainf*ck と Befunge は各言語のページ内でコード例をそのまま実行でき、自分で書いたコードも実行できます。Ook!・Deadfish・Malbolge・JSFuck・Whitespace は専用のツールページを用意しています。
Q. コードはどこかに送信されますか?
A. 送信しません。コードの実行や表示はすべてブラウザの中だけで完結します(送信ゼロ)。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。