Can you summarize the following document?
        
  

  IMP ( Instruction Modification Parameter)是whitespace語法中的一種特色,在每個指令前要指名要使用哪種形式的IMP,之後在進行屬於每個IMP裡的不同操作。  虛擬機器(程式所執行的地點)中有一個堆疊與堆積. 程式設計者可以任意的將整數放入堆疊( 只有整數,目前沒有浮點數與實數的實作). 堆積也可以任意且永久的儲存變數或資料結構. 許多命令需要數字或是標籤(label)作為引數. 整數可以為任意長度的位元(bits), 以一系列的空白(Space)與製表符(Tab)表現, 以換行(LF)作為結束. 空白代表數碼上的"0",製表符則代表"1".給定的第一個字元代表整數的正負號, 空白為正號而製表符為負號. 要注意兩號並非互補, 只是單純代表正負號. 標籤也是由一系列空白與製表符組成而以[LF]作為結尾. 所有標籤必須是獨一無二而不能重複的.

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

  算術運算會取堆疊最上方的兩個元素做運算, 並以運算結果取代原本的元素. 先進入堆疊的元素將被視為運運算元左方的運算元.

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

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

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

  這是一個簡單的輸出"Hello,world!"的程式, 每個 空白, 製表符, 或是換行字元被分別以 "S", "T", 和"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是種深奧的程式語言。它由Edwin Brady和Chris Morris開發,2003年4月1日釋出。大部分的現代程式設計語言都不將空白字元視為語法的一部分。但Whitespace卻只視空格(space)、製表符(tabs)和換行(new lines)為語法的一部分,它的直譯器忽略所有非空白字元。