本文へスキップ
totonoe.tech

難解プログラミング言語を整える

中級

Whitespaceを整える

= スペース・タブ・改行の3文字だけで書く「見えない言語」を、見える形にして実行する

① コードを入れる(見えない文字はS/T/L表示に切り替えて確認)

実際のスペース/タブ/改行を貼り付けても、S/T/Lの文字(大文字小文字どちらも可)を貼り付けても、どちらも読み取ります。

Whitespaceコード 実行するまで送信ゼロ
0 命令(解析後)

入力命令(readchar / readnum)はこのツールでは使えません。実行すると「入力なし」のエラーで止まります。 無限ループになっても、必ず一定の命令数で自動停止します。

実行結果

出力
(まだ実行していません)

③ 命令の逆アセンブル

入力中のコードを、命令ごとに機能・色分けして表示します(最大300命令)。

# 命令 引数 意味

④ テキスト → Whitespace を生成する

1文字ずつ push して出力する、単純な構成のコードを作ります。

出力させたい文字列 入力するそばから生成
S/T/L表示(見た目確認用)
 
実コード(見えない文字。コピーして使えます)

見えないところに意味がある・3つ

使える文字が3つだけ、という発想の面白さ。

  1. 1

    命令はスペース・タブ・改行の組み合わせだけ

    普通の言語は英数字や記号を使いますが、Whitespace は「見えない3文字」の並び方だけで スタック操作・算術・ヒープ・ジャンプ・出力のすべてを表現します。それ以外の文字(英数字や記号)は コメット扱いで完全に無視されるので、プログラムの中に好きな文章を"隠す"こともできます。

  2. 2

    2003年、エイプリルフールに生まれた

    Edwin Brady と Chris Morris が2003年4月1日に発表したジョーク言語ですが、スタックマシン・ ヒープ・サブルーチン呼び出し(call/ret)まで一通り揃った、れっきとした計算可能な言語です。 このツールの③(逆アセンブル)は、見た目には何も無いファイルの"中身"を暴いて見せています。

  3. 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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

KOINOBORI ECOSYSTEM

私たちが運営するサイト