難解プログラミング言語を整える
中級Whitespaceを整える。
= スペース・タブ・改行の3文字だけで書く「見えない言語」を、見える形にして実行する
① コードを入れる(見えない文字はS/T/L表示に切り替えて確認)
実際のスペース/タブ/改行を貼り付けても、S/T/Lの文字(大文字小文字どちらも可)を貼り付けても、どちらも読み取ります。
入力命令(readchar / readnum)はこのツールでは使えません。実行すると「入力なし」のエラーで止まります。 無限ループになっても、必ず一定の命令数で自動停止します。
実行結果
(まだ実行していません)
③ 命令の逆アセンブル
入力中のコードを、命令ごとに機能・色分けして表示します(最大300命令)。
| # | 命令 | 引数 | 意味 |
|---|
④ テキスト → Whitespace を生成する
1文字ずつ push して出力する、単純な構成のコードを作ります。
見えないところに意味がある・3つ
使える文字が3つだけ、という発想の面白さ。
- 1
命令はスペース・タブ・改行の組み合わせだけ
普通の言語は英数字や記号を使いますが、Whitespace は「見えない3文字」の並び方だけで スタック操作・算術・ヒープ・ジャンプ・出力のすべてを表現します。それ以外の文字(英数字や記号)は コメット扱いで完全に無視されるので、プログラムの中に好きな文章を"隠す"こともできます。
- 2
2003年、エイプリルフールに生まれた
Edwin Brady と Chris Morris が2003年4月1日に発表したジョーク言語ですが、スタックマシン・ ヒープ・サブルーチン呼び出し(call/ret)まで一通り揃った、れっきとした計算可能な言語です。 このツールの③(逆アセンブル)は、見た目には何も無いファイルの"中身"を暴いて見せています。
- 3
数値は2進数、文字は数値コードで出力する
push する数値は符号1桁+2進数の桁列という形で書きます。文字を出力する outchar は、 その数値を文字コードとして解釈して出力するだけなので、④の生成機能は「1文字ずつ push して outchar する」だけの単純な構成です。
送信ゼロ・入力命令は使えません
実行はすべてこの端末の中だけで完結します(送信ゼロ)。readchar / readnum (文字・数値を対話的に読み込む命令)はこのツールでは実行できず、出会った時点でエラー停止します。 無限ループになるコードでも、一定の命令数に達すると必ず自動停止します。
このツールについて
Whitespace は「スペース・タブ・改行」の3文字だけで書く、2003年エイプリルフールに発表されたエソラングです。それ以外の文字はすべて無視される(コメット扱い)ため、見た目には何も書いていないファイルが、実は立派なプログラムということが起こります。入力はこの端末の中だけで処理されます(送信ゼロ)。
スペース・タブ・改行の3文字だけで書く言語 Whitespace を実行。見えない実コードと S/T/L 表示を切り替えでき、逆アセンブル表とテキスト→コード生成つき。
主な機能
- 実コード⇄S/T/L 表示の切り替え
- スタック・算術・ヒープ・フロー制御・出力を実行
- 命令ごとの逆アセンブル表(色分け)
- テキスト→Whitespace コード生成
- 無限ループでも必ずステップ上限で停止
- 入力命令は非対応・送信ゼロ
よくある質問
Q. Whitespace とは何ですか?
A. スペース・タブ・改行の3文字だけで書くプログラミング言語です。2003年4月1日に Edwin Brady と Chris Morris が発表しました。それ以外の文字はすべて無視されるため、見た目は空のファイルが実はプログラム、ということが起こります。
Q. なぜ実コードは何も見えないのですか?
A. 命令がスペース・タブ・改行だけで構成されているためです。「S/T/L 表示に切り替える」ボタンで、見えない3文字を S(スペース)・T(タブ)・L(改行)の記号に置き換えて確認できます。
Q. キーボードからの入力はできますか?
A. できません。readchar・readnum という入力命令はこのツールでは実行できず、実行すると「入力なし」のエラーで停止します。
Q. 無限ループのコードを実行するとどうなりますか?
A. 一定の命令数(20万命令)に達すると自動的に停止し、エラーとして表示します。ブラウザが固まることはありません。
Q. 生成したコードは他の Whitespace 処理系でも動きますか?
A. 標準的な push(数値をスタックに積む)と outchar(文字として出力)だけで構成しているため、多くの処理系で動きます。入力命令などの対応状況は処理系によって差があります。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。