Whitespace

Whitespace是種深奥的编程语言。它由Edwin Brady和Chris Morris開發，2003年4月1日發佈。大部分的現代程式設計語言都不將空白字元視為語法的一部分。但Whitespace卻只視空格（space）、制表符（tabs）和換行（new lines）為語法的一部分，它的直譯器忽略所有非空白字元。

它本身是個指令式、基於堆疊的語言。其程式運行在上的虛擬機器均有一個堆疊（Stack）和堆（Heap）。程式員可自由將整數推進堆疊中（只可以是整數，因為暫時並無浮點數或實數工具）。使用者亦可通過堆作為變數和資料結構的暫存區。

这种语言有和Brainfuck一样的优点，能方便地写程序注释，写的注释根本不需要标识，编译器直接跳过你写的文字信息。还有，借助这种语言，可以在满篇空白的代码中插入一篇文章，从而在看起来完全无关的文章中隐藏一段代码。对于一些需要保证安全性的工作来说，这种语言帮助很大，因为它可以防止别人把代码打印出来拿走。

語法

IMP
IMP	( Instruction Modification Parameter)是whitespace語法中的一種特色，在每個指令前要指名要使用哪種形式的IMP，之後在進行屬於每個IMP裡的不同操作。

虛擬機（程式所運行的地點）中有一個堆疊與堆積. 
程式設計者可以任意的將整數放入堆疊( 只有整數 ,目前沒有浮點數與實數的實作). 
堆積也可以任意且永久的儲存變數或資料結構.
許多命令需要數字或是標籤（label）作為參數.
整數可以為任意長度的位元(bits),	以一系列的空白（Space）與製表符（Tab）表現, 以換行（LF）作為結束. 
空白代表數位上的"0",製表符則代表"1".給定的第一個字元代表整數的正負號,	空白為正號而製表符為負號. 
要注意兩號並非互補, 只是單純代表正負號.
標籤也是由一系列空白與製表符組成而以[LF]作為結尾. 所有標籤必須是獨一無二而不能重複的.

堆疊操作	(IMP: [Space])
堆疊操作為一常用運算, 所以使用IMP裡面最簡短的[Space].	
這裡有四種操作方式.

算術 (IMP:	[Tab][Space])
算術運算會取堆疊最上方的兩個元素做運算, 並以運算結果取代原本的元素. 
先進入堆疊的元素將被視為運算子左方的運算元.

堆積操作 (IMP:	[Tab][Tab])
堆積操作會由堆疊中尋找將被儲存或被取回的物件位址. 
要儲存一個物件至堆積裡, 先將位址放入堆疊, 而後放入物件的值再執行儲存指令.	 
要取出堆積裡的一個物件, 將位址放入堆疊而後執行取回指令, 取回的值會被存放在堆疊的最上方.

控制敘述	(IMP:	[LF])
控制敘述也是常見指令.	
子程序會藉由標籤（label）作標記（用於進行有條件或無條件跳轉）,	此為迴圈（loop）實作的原理.	
程式必須藉由[LF][LF][LF]這行命令才能才能讓直譯器乾淨（clearly）的結束程式.

輸入輸出	(IMP: [Tab][LF])
最後,	我們必須與使用者互動. 這裡的輸入輸出操作有讀入或寫出數字或單獨的字元.	
有了這些指令,	我們就可以進行資料流的輸入輸出.
讀入指令會取用堆積地址以將結果寫入堆疊最上方.

範例

這是一個簡單的輸出"Hello ,world!"的程式, 每個 空白, 製表符, 或是換行字元被分別以 "S", "T", 和"L", 代表:   
 S S S T	S S T	S S S L
T	L
S S S S S T	T	S S T	S T	L
T	L
S S S S S T	T	S T	T	S S L
T	L
S S S S S T	T	S T	T	S S L
T	L
S S S S S T	T	S T	T	T	T	L
T	L
S S S S S T	S T	T	S S L
T	L
S S S S S T	S S S S S L
T	L
S S S S S T	T	T	S T	T	T	L
T	L
S S S S S T	T	S T	T	T	T	L
T	L
S S S S S T	T	T	S S T	S L
T	L
S S S S S T	T	S T	T	S S L
T	L
S S S S S T	T	S S T	S S L
T	L
S S S S S T	S S S S T	L
T	L
S S L
L
L

外部連結 
 Whitespace官方網站
 在Slashdot上的發佈聲明 
 Matrix67上的介绍 
 Wandsea'Blog上的介绍
 Adreaman'Blog上的介绍

深奥的编程语言
2002年建立的程式語言