ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
全てを空白文字(スペース、タブ、改行)のみで記述する、非常に稀有なプログラミング言語。
作者グループは、由来について次のように述べている。
最新の主要なプログラミング言語は、空白文字(スペース、タブ、改行)構文を考慮せず、まるで文字が無いかのように、それらを無視している。我々は、文字集合内で非常に友好的なメンバーであるはずのこれら空白文字に対する、甚だしい不公平だと考えている。
それらが無視されねばならないのは、それらが見えないからだろうか。Whitespaceは、均衡を取り戻そうとする言語である。あらゆる非空白文字は無視され、スペース、タブ、および改行のみが認識される構文となる。
公式サイトには、お約束ともいえるhello, worldを表示するサンプルソース「hworld.ws」が掲載されている。
頭に「Say hello.」とあるが、これはコメントであり、動作には無関係である。それ以降は全て空白文字で記述されているため、ただ背景が広がって見えるのみである。
しかし恐るべきことに、これは間違いなくソースリストなのであり、実際に動作する。
$ ./wspace hworld.ws
Hello, world of spaces!
Done.
Stack size 0
Heap size 24
$
知らない人がソースリストを見ても、プログラムであること自体分からないという、他に類例のないプログラミング言語である。
このソースを見たり、書いたりするためには、スペースやタブを、色を変える等して表示する機能を有したエディターが必要である。
これは2003(平成15)年4月1日というエイプリルフールに公開された。このためSlashdotのネタにされ、アレゲな連中が大挙して押し寄せ40万以上のヒットになった、としている。
作者たちは、「Is this an April Fool's Joke?」(これはエイプリルフールのジョークか)という問いに対しては、明確に「ノー」と回答している。理由は、コンパイラーは動作し、サンプルも動作し、そして本当に、利用者はプログラムを書くことが出来るからだ、としている。
この言語の実用性自体は皆無である(作者ら自体、これを日常的なプログラミング言語としては使っていないだろう)が、これでもチューリングコンプリートな言語であり、理論上は他の一般的なプログラミング言語と同等の能力を持っている。
命令は、「IMP(命令変更パラメーター)」「コマンド」「パラメーター」を組にして記述される。
様々な機能があるが、演算については値をスタックに積み、それに対して演算命令を発行するスタイルを採用している。
IMPには、次のものがある。
IMPごとに、続くコマンドは異なるものが使われる。
多くのコマンドで、パラメーターに数値かラベルが必要となる。
数値は二進数で表現され、[Space]で0、[Tab]で1を表わし、[LF]によって終端される。なお数値は常に符号付きであり、正の数は[Space]、負の数は[Tab]から始まる。形式は1の補数であることに注意。
ラベルは、[LF]で終端される、[Space]と[Tab]からなる文字列である。なお、名前空間は一つしかないので、ラベルはそれぞれがユニークでなければならない。
スタック操作は最も基本的な操作のため、IMPも[Space]一つと短くなっている。
処理系は、外部との交信が出来なければならない。そこで、数や文字を読み書きするためのI/O命令がある。これらを用いれば、文字列処理ルーチンを書くことが可能である。
拡張の余裕は、[LF]で終わるものと、[LF]から始まるものである。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます