FORTH的背景
在微處理機性能提高,價格降低的過程中,軟體問題越來越突出,所以就產生了如何提高軟體開發的生產能力及在硬體不斷變化的情況下,如何繼續使用已投資的軟體等問題。所以就對軟體的工具一一語言提出了以下要求:1.程式開發時間少;2.存儲空間需求少;3.執行時間少;4.易維護;5.可移植性好。在這種前提下,FORTH語言就應運而生了。
最初的FORTH是面向小型機的,它幾乎可用於所有的小型機,後來又編制了用於微處理器的MICRO FORTH,它現在巳適用於各種通用的微型機種(如APPLE,TRS一80)和各種CPU(8080,Z80,6800,6502,LSI一11,1802,PACE,8086,68000,Z8000,6809,9900等)。
FORTH語言在使用磁碟的有16K RAK的開發系統上運行,它適用於像多用戶程式設計這樣大型的設計方案。
FORTH的組成
詞典
其中存放FORTH固有的運算符和用戶自定義的運算符,這兩種運算符FORTH是不加區別的,詞典是FORTH最有特色的部分,使用這個詞典里的單詞向計算機說明問題(程式),計算機一邊解釋單詞的意思,一邊工作。
FORTH的90%是詞典。FORTH程式部分(FORTH的核心)是存放核心的單詞的地方。用它來定義FORTH基本詞典(約140)。可以用機器語言或高級定義在詞典里補充登記新詞。
堆疊
FORTH有兩個棧,用戶打交道的堆疊叫參量棧,專門用來存放參加運算的常數。另一個堆疊起輔助作用,一般用來解決程式嵌套、遞歸等問題,主要記錄返回地址,故稱返回棧。
除了在堆疊上進行運算外,程式模組之間的數據交換全部通過堆疊進行,可以較容易地實現調用序列。
眾所周知,對子程式設計而言,堆疊大概是一種最重要的數據結構,各種語言都利用它,但卻對用戶不透明。而在FORTH中,用戶卻可以直接控制堆疊。
彙編程式
FORTH語言除了它自己固有的運算符外,還兼容了其所在計算機的彙編程式。這就使FORTH成為高級語言與機器語言之間的橋樑。FORTH可以用彙編語言定義詞,稱為代碼。當外設驅動或程式設計師要按CPU的速度運行程式時,可用代碼定義。
解釋程式
FORTH的全部動作都是由解釋程式控制,它以人機對話形式編程和排錯。解釋程式規模很少,但可以進行數值轉換、查找詞典、生成詞典條目、堆疊操作等非常重要的工作。它把新定義的詞選入詞典、把常數壓入堆疊,根據詞典找出相應的運算符的操作並執行之。
虛擬存儲器
用FORTH語言編寫的任何程式都能定義成一個運算符,並選入詞典之中。用戶不必關心記憶體的限制,因為FORTH全通過虛擬存儲器使您始終覺得整個詞典都在記憶體之中。
FORTH的特點
1.高級語言(如BASIC、FORTRAN、PASCAL等)一般都是依附在作業系統上的封閉系統。用戶看不見計算機實際的運算過程。所以它無論從時間還是空間上都不能,充分發揮機器的潛力,FORTH語言卻是與眾不同的,它使用戶可以通過它了解機器內部的處理過程,而且可直接干預這些過程,即它可實現對硬體的深度控制。
2.FORTH代表了一種新的程式設計思想。它把互動式高級語言、宏彙編程式、多道程式作業系統、用戶實用程式系統歸為一體。因此,也有人稱它為近似於作業系統的語言。
3.FORTH是一種可擴充的語言。它不同於那些把源程式解釋或翻譯成目標程式的常規語言。它是由一個運算符詞典和一個運算參量堆疊來完成程式的執行。詞典中的運算符在需要時象搭積木那樣組成新的運算符,從而實現自擴充。
4.FORTH語言具有極大的靈活性。由於它的可擴充性,用戶可以構造自己的操作和數據類型,而且對這些定義可以象對FORTH自己的定義那樣進行處理。當系統建立起來時,直接可得到這些定義,不必訪問軟體程式庫或子程式。
5.與面向暫存器的C語言不同,FORTH語言是面向堆疊的後綴表示型,即逆波蘭表示型語言。
6.FORTH適於書寫過程控制、軟體開發和資料庫以及一般商用軟體。由於它是面向堆疊的,所以對數據量大的運算不太合適。但對一般處理,它的效率是BASIC(解釋)的十倍以上。
7.由於FORTH是後綴表示型(逆波蘭表示),所以子程式連線非常簡便,不用任何CALL語句和變數表。各種操作之間的通訊只通堆疊即可。
8.FORTH程式是可重入的,所以易於實現多任務(包括多終端)系統。FORTH也是遞歸型的。
9.一個完整的FORTH系統僅為6~7K位元組,它由存放基本詞的詞典和只用機器語言書寫的FORTH程式構成,其中用機器語言寫的核心部分只有800位元組,它是可自擴充的,其它部分是用FORTH語言本身寫的。如果用層次來使FORTH語言更形象一些的話,可以認為最內層是處理器(裸機),外面是FORTH程式,再外一層是FORTH基本詞典,最外一層是應用程式。
10.由於FORTIH具有精悍的核心,就給它帶來了良好的可移植性。
11.FORTH易於實現模組化的結構程式設計。由於FORTH的詞典結構,使它具有詳細的模組和精確的層次概念。由低級運算符定義高級運算符,再由高級運算符定義更高級的運算符,形成一個自底向上的寶塔。實際編程時,這個過程倒過來採取自頂向下逐步求精的方法。再者,FORTH中沒有Goto語句。這些特點,完全符合結構程式設計的要求,因此FORTH被稱為“天生的”結構程式設計語言。
優缺點
FORTH優點:
1.程式開發時間短,約是其它語言的十分之一。
2.占用記憶體空間小,目標碼比彙編語言的還緊湊,而且程式越大該優越性就越明顯。這主要受惠於它的詞典結構。
3.執行時間與彙編語言的程式相當。
任何語言都不可能完美無瑕,為了追求效率,FORTH也有先天的缺陷:
1.FORTH中沒有數據類型。一個數值可能是實數,亦可能是邏輯值。如果結序員不小心,就會引起類型衝突。
2.沒有目錄檔案結構。但這是可以用用戶定義來克服的。
3.由於它採用了逆波蘭表示法,所以源程式較難讀。