
Whitespace は、空白文字(スペース、タブ、改行)のみが意味を持つ構文を持つ難解なプログラミング言語です。これは、空白文字をほとんど無視する一般的な言語とは対照的です。[ 1 ] [ 2 ]
構文上の理由から、空白を無視する言語で書かれたコードの空白の中に、空白を含むソースコードを含めることができ、テキストは多言語になります。[ 2 ]
Whitespaceは命令型でスタックベースの言語です。プログラマは任意の幅の整数値をスタックにプッシュし、ヒープにアクセスしてデータを格納できます。
インタープリタとそのHaskellソースコードは、Whitespaceの開発者によって提供されています。
Kaya 言語とIdris言語も開発した Edwin Brady と Chris Morris は、2002 年にダラム大学で Whitespace を作成しました。Slashdot は2003 年4 月 1 日、レビュー記事を公開しました。[ 3 ]
C++言語の演算子として空白文字を使用するというアイデアは、 5年前にビャルネ・ストロヴストルップによって冗談めかして提案された。[ 4 ]
空白文字は、コマンドを空白文字のシーケンスとして定義します。たとえば、[Tab][Space][Space][Space]スタックの上位2つの要素の算術加算を実行します。
コマンドは、命令変更パラメータ(IMP)の後に操作、そして任意のパラメータが続く形で記述されます。 [ 1 ]
IMP配列には以下が含まれます。
IMP ごとに整理された演算子シーケンスには以下が含まれます: [ 1 ]
* Haskellは遅延評価されるため、スタックが小さすぎることの影響は、例えば数値を出力する副作用を呼び出したときにのみ現れる可能性があります。
**コピーとスライドの操作は Whitespace 0.3 で追加されました。[ 1 ]
space、tabおよび以外の文字はlinefeed無視されるため、コメントに使用できます。
数値は、0と1をそれぞれ表す文字spaceと文字のシーケンスで表され、末尾に が付きます。最初の文字は値の符号を表し、正の場合は 、負の場合は となります。末尾の文字より前の文字は、値の2進数を表します。tablinefeedspacetab
例えば:
space、バイナリでは 1001011 を表し、10 進数では 75 なので、正です。tab、バイナリでは -110010 を表し、10 では -50 なので、負です。ラベルは制御フローに使用されます。ラベルは、文字と文字linefeedで終わるシーケンスです。名前空間は 1 つしかないため、すべてのラベルは一意である必要があります。 [ 1 ]spacetab
以下のソースコードは、空白文字を使った「Hello, world!」Sプログラムのものです。分かりやすくするために、各 、、、 の前に、、、Tで注釈を付けています。Lspacetablinefeed
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 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_'!';_LL L:プログラムを終了
一部のブラウザでは、空白文字を含むソースコードを表示する際、タブ文字によって生成される水平方向の間隔は固定されておらず、次の水平タブ位置に対するテキスト内の位置によって変化します。また、ソフトウェアによっては、タブ文字が対応する可変数の空白文字に置き換えられる場合もあります。