こんにちは、NAEです。
プログラミング教育という言葉をよく聞くようになりました。そろそろプログラミングを勉強しようかな、という方もいらっしゃると思います。
CやC++、JavaやJavascript、Python、Ruby、GoLang・・・有名便利で使いやすい言語は実にいろいろあります。さて、それらとは一線を画したキワモノプログラミング言語が存在するのをご存知ですか?
今回はそんなお話。
プログラミング言語とは
プログラミング言語とは、アプリやシステムで実行される処理を記述するための言語です。コンピュータに対して命令を下し動かすための指示書を書くための言葉、とイメージしてもらうとわかりやすいかもしれません。
その種類は実に多く、Wikipediaによるとその数なんと278個。掲載されていないマイナー言語を含めると500個は超えるんじゃないでしょうか。
アプリやシステムの部位によって適切な言語が違ったり、時代とともに流行する言語が変わったり、言語ごとの派閥に分かれた宗教論争があったり・・・プログラミング言語そのものの特性やそれを取り巻く文化は調べてみると実に奥深いのですが、今回はそこらへんは割愛します。
ここでは、プログラミング言語によって記述された処理をソースコードと呼ぶ、ということだけ覚えておいてください。
プログラミング言語が満たすべき条件
コンピュータはソースコードに記載された処理を忠実に実行するのですが、ここでひとつ大事な条件があります。プログラミング言語で記述された内容をコンピュータが最後まで実行できること(計算可能性が確保されていること)です。
詳しいことはWikipedia先生に譲るとして、要するに一定のルールを守っていないときちんとしたプログラミング言語とは呼べませんよ、ということ。(そうでないプログラミング言語も一部存在しますが、ここでは割愛)
ちなみに、このルールに則っている(計算可能であることが数学的に証明されている)状態を「チューリング完全」と呼びます。この名前は、現在存在するコンピュータの基礎理論を確立した超有名数学者であるアラン・チューリングの名前をから取られました。
ちなみにアラン・チューリングの功績と人となりについてはこちらの映画で実によく描かれています。
話を戻します。大事なのは、この一定のルールさえ満たしていればプログラミング言語で使う言葉尻はなんでもいいという点。
たとえば「Hello World!」と表示する処理を書いたソースコードを見てみましょう。
System.out.println("Hello World!");
puts 'Hello World!'
echo Hello World!
これらを実行するといずれも同じ結果をもたらすのですが、プログラミング言語ごとに実に表現に幅があることがわかっていただけると思います。
ぶっ飛んだプログラミング言語たち
さて、本題です。型にはまっていれば表現は自由。ルールさえ守っていればなにやってもいい。ならば最高にふざけてみようじゃないか!
というノリで作られた、ネタに全振り&実用性ゼロのぶっ飛んだプログラミング言語たちをご紹介します。
ファイルを開くとそこは雪国だった「Whitespace」
ソースコードといえば処理が文字で書かれているものである、という先入観を見事に裏切るプログラミング言語。ソースファイル(ソースコードの書かれたファイル)を開くと、そこには真っ白な世界が広がっています。
それもそのはず。この言語で使われる文字はなんと
- 半角スペース
- 改行
- タブ(Tab)
の3つだけです。いずれも真っ白、なにも見えません。そしてこれら以外の文字は全て無視されるというおまけ付き。
たとえばHello Worldと表示するためのソースコードはこちら。
(以下略)
真っ白ですね。ここまで真っ白だと禅の世界に入れそうな気がします。
このファンタスティックなソースコードの全文が見たい方はコチラからどうぞ。
参考:https://ja.wikipedia.org/wiki/Whitespace
笑えば、いいと思うよ「Grass」
「Whitespace」の類型です。この言語で使われるのは以下の3文字のみ。これ以外は無視されます。
- W
- w
- v
さて、どのようなソースコードになるのでしょうか。さっそくソースコード見てみましょう。
この言語の名前はちょっと草植えときますね型言語Grass。笑いを表す「www」が草に見えることから、笑う=草生える。それを全面に押し出した笑いに溢れた言語です。
プログラミングしているとW、w、vがゲシュタルト崩壊を起こしてしまいそう。
参考:http://www.blue.sky.or.jp/grass/doc_ja.html
いつからソースコードはファイルの中に書くものだと思っていた?「Pxem」
ソースコードといえば、通常はファイルの中に記載されているもの。その既成概念をぶち壊しにかかったのが「Pxem」です。
Pxemでは、なんと処理の内容をファイル名に記述します。たとえば"Hello World!"を出力するプログラムのソースコードはこちら。
ファイル名:Hello World!.pxe
ファイルの中身:
なんと0バイトのソースコードでHello Worldが出力できていまいました。効率的!
ちなみにプログラミングの練習問題として有名なFizzBuzzと呼ばれる処理の場合、ファイル名は
`ak.-akbuzz.-ak4.-akfizz.-ak2.-1.p05.-.tab.z01.-.c.m.+.c.t05.-.%.w.s01.-.m03.-.%.W.s.m.nak.-.p00.-.c.c.c.a.wak.-fizz.p00.-.c.c.a.a.w01.-.m03.-.%.w.sak.-buzz.p00.-.c.c.a.wak.-fizzbuzz.p00.-.c.a.a.md2.-02.-.!.a.d.pxe
となるそうです。読めない。
参考:https://ja.wikipedia.org/wiki/Pxem
これからはアートの時代だよ「Piet」
ソースコードは文字列である必要なんてない!画像でやって何が悪い!というアウトローでアーティスティックなプログラミング言語が「Piet」です。
論より証拠。さっそく"Hello World!"を出力するソースコード(画像)を見てみましょう。
出典:http://www.dangermouse.net/esoteric/piet/samples.html
なんだか現代アートそのものという感じですね。
その他にも見た目がキレイなソースコード(画像)がたくさん紹介されています。ぼく個人的なお気に入りはコチラ。
素数を出力する
Hello World!を出力する(別バージョン)
"Tetris"という文字列を出力する:画像の構成要素がすべてテトリスのブロックになっている点に注目。
いずれも出典:http://www.dangermouse.net/esoteric/piet/samples.html
ここまでくるとプログラミングというより本当にアートの世界ですね。キレイなソースコードを書く、というのはプログラマの至上命題ですが、これもひとつの解になりうるのでしょうか。
参考:http://www.dangermouse.net/esoteric/piet.html
まとめ:暇を持て余したプログラマーの遊び
というわけで、まさに誰得のキワモノプログラミング言語のご紹介でした。
プログラマーっていうと難しい顔しながらキーボードを叩くとっつきにくい人間というイメージがありますが、プログラマーにはプログラマーの遊びやユーモアがあるんですね。
ちなみに、「Whitespace」や「Grass」のように使う文字や言葉を限定するタイプのプログラミング言語はほかにもさまざまな派生があります。たとえば
興味がある方はぜひ見てみてください。
今回は以上です。