Copy & Paste Engineer

難解プログラミングの Whitespace を触ってみる

難解プログラミングの Whitespace を触ってみる

スペース、タブ、改行のみで書く難解プログラミングの Whitespace を触ってみる。 このプログラミング言語、勉強するしたりするのはだいぶ辛いものに…

環境構築

構築しなくてもオンラインエディタが存在します。 Whitespace - Try It Online

GitHub からコードをインストールすることも可能ですが僕はDockerで構築いたしました。

docker run -it --rm -it esolang/whitespace

Whitespaceの実行環境を含むDockerイメージをダウンロードしてコンテナ内に入ってくれます。

文法

IMP (Instruction Modification Parameter)、コマンド、パラメータの3つ組で命令を表現する 数値は二進記数法で表現する。 [Space]が0で、[Tab]が1で、[LF]が終端記号です。

スタック操作

演算

コメント

コメントはありませんがスペース、タブ、改行以外はすべて無視するので普通に文字を書いていけば問題ないです。

ただしコメント部分にスペースなどを入れてしまうと読み取られてしまうのでご注意ください。

サンプルコード

実際に動かしてみます。

英語版のWikipediaにいい感じのサンプルコードがあったのでそちらを使用します。

以下のコードは Hello, world! と出力してくれます。

コンテナ内で vi を使うかDockerにマウントしてやってください。

S S S T	S S T	S S S L:Push_+1001000=72='H'_onto_the_stack
T	L
S S :Output_'H';_S S S T	T	S S T	S T	L:Push_+1100101=101='e'_onto_the_stack
T	L
S S :Output_'e';_S S S T	T	S T	T	S S L:+1101100=108='l'
T	L
S S S S S T	T	S T	T	S S L:+1101100=108='l'
T	L
S S S S S T	T	S T	T	T	T	L:+1101111=111='o'
T	L
S S S S S T	S T	T	S S L:+101100=44=','
T	L
S S S S S T	S S S S S L:+100000=32=Space
T	L
S S S S S T	T	T	S T	T	T	L:+1110111=119='w'
T	L
S S S S S T	T	S T	T	T	T	L:+1101111=111='o'
T	L
S S S S S T	T	T	S S T	S L:+1110010=114='r'
T	L
S S S S S T	T	S T	T	S S L:+1101100=108='l'
T	L
S S S S S T	T	S S T	S S L=+1100100=100='d'
T	L
S S S S S T	S S S S T	L:+100001=33='!'
T	L
S S :Output_'!';_L
L
L:End_the_program

実行する際は whitespace [ファイル名] で実行されます。

感想

可読性最悪、コードはとても分かりづらく、それはそれでおもしろいですね。

参考