突然だがこれをご覧いただきたい。
このブログを読んでいる聡明な皆様なら、ここにハローワールドが存在していることにお気づきであろう。そう……、みなさんご存知のハローワールドがここにある……。そこには何もないように見えるけどもまぎれもなくハローワールドがあるのだ。ここには無がありプログラムがあるのだ。
試しにコピペしてこちらで試してみてほしい。
Whitelips the Whitespace IDE
はい……今回、僕が頭おかしくなって手を出してしまったやつはこれです。
Whitespace(ホワイトスペース)は、プログラミング言語のひとつであり、またそれを動作させるインタプリタを指している。WhitespaceはGPLにより配布されている。実用言語ではない難解プログラミング言語のひとつ。
本来 "whitespace" とは「空白」や「余白」を意味する英単語である。多くの一般的なプログラミング言語では空白に相当する文字(スペース、タブ、言語によっては改行も)は他の言語要素間の区切りとして使われている。しかし、言語 Whitespace においてはプログラムは空白文字だけで構成される(それ以外の文字列はコメント扱いで無視される)。そのため、一見するとプログラムであることすらわからないという珍しい言語である。
とりあえず参考になりそうなサイトとかをざっと眺めていたんですけど見事に真っ白で意味わかんなかった。ただ、[IMP(Instruction Modification Parameter)][コマンド][パラメータ]でなんとなることを知ったのは大きな収穫でした。これを使うことでこのように「Hello Work」に書き換えだってできちゃうんですよ。やばくないですか?
IMP | 種別 |
---|---|
スタック操作 | [Space] |
整数演算 | [Tab][Space] |
ヒープアクセス | [Tab][Tab] |
フロー制御 | [LF] |
入出力 | [Tab][LF] |
コマンド例
■ スタックにプッシュ
[Space][Space][数値*1]
■ スタックトップの文字を出力
[Tab][LF][Space][Space]
とりあえず上の二つさえ分かればかろうじて文字出力ができます。あぁ……まだ僕は、簡単なスタックマシンとしての使い道しか見いだせない。サブルーチンとかついていてなんか高機能な言語なんだけど、いかんせん読めない……。嫌がらせのごとくスライド形式やpdfとかいう謎形式の資料ばかりヒットする……。まあ、これやるだけでもバイナリでの数値表現ができるようになったり、こんなのやるくらいならアセンブリ言語触ってる方がマシだと思えたりして得することだらけですけどね(?)。
今日のところはそんな感じです。
*1:[space] が 0、[tab] が 1の二進数表記