Forth語言
Charles Moore發明的語言
Forth語言是Charles Moore在20世紀60年代發明的基於堆棧、互動式、具有簡單性哲學思想的計算機編程語言和環境,已被證明特別適合於軟體代碼在千行數量級的中規模嵌入式系統應用,作為國外大公司競爭系統開發周期、生產成本和系統可靠性的秘密武器之一,被廣泛應用於天文、軍事、航空、航天、工業自動化、圖形、儀器儀錶、工作站領域,並且研製了以Forth為體系結構的處理器晶元。
Forth並不起源於其它已有的程序設計語言,所以它的外觀和內部特點對於新用戶來說是特殊的。但是Forth的簡單性、高度模塊化和互動式特性可以彌補初學者的陌生感,使得Forth非常易於學習和使用。一個新的程序員通常需要花一些時間來掌握Forth巨大的命令集,通過一個月左右的全面使用,程序員就可以理解它的整個內部工作機理,所學到的東西要比傳統操作系統和編譯器多得多。
Forth與傳統語言最大的不同是它的可擴展性。Forth的編程過程就是定義新的字,字實際上就是語言的新命令。字可以用一系列以前定義的字來定義,這個過程與教育孩子的過程相似:我們總是用孩子們以前理解的概念來教給孩子們新的概念,而這些字被稱為“高級定義”。同樣,新的字也可以用彙編代碼定義,因為在多數Forth實現中都包括宿主處理器的彙編器,而這些字被稱為CODE字。
可擴展性的結果是我們在開發一個應用的同時,也間接地開發了一個特殊的、針對這一類應用的“面嚮應用的語言”,它可以用於或者經過修改之後被用於相似的應用。
Forth的可擴展性並不僅僅是為語言自身增加新的命令,所以不要把定義字與傳統高級語言定義函數、過程等同。可擴展性還能夠創建一個可以定義其它字的字,這種字被稱為“定義字”。在創建這樣一個定義字的時候,程序員能夠指定它所創建的字在編譯時間、運行時間或者這兩種狀態下的特殊行為。這個能力允許我們定義特殊的數據類型,並對其行為和結構實施完全的控制。又由於這種字的運行時間行為可以用高級語言或者彙編語言來定義,所以由定義字創建的字將具有與其它F
按照Forth語言的發明人Charles Moore(Chuck)的說法:
我第一次把各種想法組合成一個整體之後,它在“第三代計算機”IBM1130上工作得如此有效,以致於我認為它是“第四代語言”,理所當然地應該被稱為FOURTH。不過,當時的IBM計算機只允許5個字元的標識符。所以FOURTH變成了Forth,這是一個非常好的的文字遊戲。
Forth語言是60年代發明的,當時Moore在斯坦福線性加速器中心做計算機程序員工作,後來變成了一個自由工程師。當時的工程技術人員為了控制編譯程序必須學習大量的方法,包括連接器、彙編器、偽指令以及高級語言,開發這個新工具的目標就是為了克服這些問題。
第一個稱為Forth的程序大約是在1970年編寫的。第一個完整的實現是1971年在一台PDP-11上完成的,用於亞利桑那州國家射電天文台的11米射電望遠鏡。這個系統的責任是定向和跟蹤望遠鏡,收集數據並記錄到磁帶上,支持一個互動式的圖形終端,供天文學家分析以前記錄的數據。系統的多任務特點允許這些功能同時執行,沒有時間上和其它方面的衝突。
這個系統取得了巨大的成功,世界各地的天文學家開始請求提供軟體拷貝。Forth的使用範圍迅速也擴大,國際天文學會於1976年接受了Forth作為標準語言。
這個應用的成功還促使Moore和Elizabeth Rather(("Bess")於1973年成立了Forth,Inc.公司,目標是開發這種語言的商業應用。Forth,Inc.在小型機上開發了多用戶的Forth版本,可以用於從資料庫到圖像處理等科學和應用領域。和第一個應用一樣,它們需要不同工具的組合。
1977年,公司為剛剛出現的8位處理器開發了一個稱為“micro Forth”的版本,對小型機上的“micro Forth”做了擴展和補充。1979年,稱為“PolyForth”的產品替代了這些系統。從此以後,它就成了市場上銷售量最大的Forth系統。
“micro Forth”系統在美國、歐洲和日本的嵌入式微處理器應用中取得了成功,由此產生了歐洲Forth用戶團體(EFUG);1978年,位於北加利佛尼亞的計算機愛好者成立了Forth興趣組織(FIG).
FIG從天文台得到Forth系統,再用這個系統開發出一個簡單的模型,然後在幾個不同的系統上實現(那當然是得到了Forth,Inc的許可之後)並以非常低的價格銷售。這個模型後來變成了著名的FIG-Forth模型。所有這些使得對Forth的興趣迅速增大。FIG目前在15個國家中有60個分支。
Forth是一個互動式的程序設計環境,最初是為程序員在小型和微型計算機上開發應用程序而設計的。最早用於科學和工業應用,比如儀器、機器人、過程式控制制、圖形和圖像處理、人工智慧和商業應用。Forth的主要優點是軟體開發快速、互動式、計算機硬體的高效使用等。
Forth常常被作為一種語言,這當然也是它最常見的方面,然而Forth所提供的功能比傳統的程序設計語言要多。傳統的高級語言工具包含有許多分離的工具(編譯器、編輯器、彙編器等等),Forth把它們融為一體。與傳統的高級語言相比,它是經過深思熟慮的,完全沒有傳統高級語言那麼複雜的語法特性。
最早實現的Forth是一個獨立的系統,它包含獨立操作系統的一般功能,還包括有編輯器、編譯器、彙編器、調試器和其它工具。一個單一的、簡單的、一致的規則支配這些能力。今天,儘管還能在許多處理器上見到獨立的版本,但更多的版本是與MSDOS、WINDOWS、UNIX一類操作系統協同工作的。
Forth語言和英語非常相似,它的基本元素是已命名的數據項、過程,以及創建用戶化數據項的定義字的能力。過程和定義字可以使用以前定義的字或者彙編代碼來定義,它們與其它語言的子程序相似,也與其它語言的命令等效。Forth允許我們在鍵盤上打入一個函數的名字,這個函數將被立即執行。然而,如果我們把功能的名字放到定義中,將編譯成對於這個函數的引用。
高級字是由其它字的集合來定義的,我們可以把這個過程想象成是其它語言的宏或者詞典中的英語定義。新的字被加入到它們可以使用的存儲器中,其定義被加入到字典中。在一個Forth字的命名規則中,只有很少的幾個字元不能作為命名字元使用。許多程序組織使用更好的命名約定,通過可列印的字元以增加程序的可讀性。
當遇到一個字的時候,Forth就通過字典搜索希望找到這個字的定義,如果找到,這個字定義的功能或者被立即執行,或者作為引用而被編譯到新的定義中。然而,如果在字典中沒有找到這個字,系統就試著把它轉換成一個數。如果轉換成功,就把它放在堆棧上。如果不能轉換成數字,就顯示這個字並列印出一個錯誤的信息來報告這個字是系統所不知道的。
• 字必須在引用之前被定義;
• 邏輯流限制只有順序、條件和循環,有專門的字用於實現常用的程序控制結構;
• 程序員使用許多小的、獨立的模塊(字)來實現最大的可測試性和可靠性;
這種方法有兩個明顯的優點
• 新的字總是用以前定義和測試過的字來構造,所以調試更容易。模塊可以單獨執行以測試它的功能;
• 固有的模塊性使Forth成為一個“設計性語言”,允許自頂向下的設計同時保持自底向上的測試。一個字可以在不同的程序中使用,但是它的功能只需要定義一次;
這些都保證了Forth軟體能夠快速和有效地被開發,同時,如果管理得當,也可以作為自身文檔的基礎。
• 一個字典;
• 兩個堆棧,一個是參數棧,另一個是用於嵌套的返回棧;
• 鍵盤(輸入流)解釋器;
• 一個彙編器;
• 虛擬存儲;
以下是一些使用Forth開發的項目
Atari的許多投幣遊戲機都是用Forth開發的。他們相信開發高性能代碼的最快方法是使用Forth,加上使用彙編語言來重寫最內層的循環。
按照最近與著名的Infocom高級遊戲開發者的談話,他們的遊戲解釋器也是用Forth寫成的。
Unison World為CP/M操作系統開發了許多遊戲,全部都是用FIG-Forth編寫的。按他們技術總監Marcde Groot的說法,把一個基於Z80的遊戲移植到6502或者MC6809上,典型的時間不多於3個月。
美國Federal Express(聯邦快遞)公司的手持式行李分撿系統的程序是用Forth編寫的。項目經理Gene Farrar說,他可以按需要在幾個星期內升級新固件,相比而言,其它的小組維護C語言代碼則至少需要6個月的時間。
1990年11月哥倫比亞太空梭的4個載荷中有3個是用Forth編程的。按設計團隊之一Johns Hopkins University's Applied Physics Laboratory的JohnHayes說法,他們選擇Forth來解決飛行中的硬體問題,靈活性是一個主要的因素。
SUN公司把Forth用於它的工作站可編程BootROM中,以每天500-1000台的速度發貨,是可編程Forth系統中數量最大的。1994年IEEE1275-1994將Forth用於BOOT(初始配置)固件的標準,這也是POWERPC通用硬體平台的基礎。
在電影《終結者II:世界末日》中,Cyberdyne Systems T1000系統的特技效果是基於Morphing軟體包Forth產生的。
下面是一個在標準輸出設備上輸出Hello World的簡單程序,這種程序通常作為開始學習編程語言時的第一個程序:run-hello\定義一個單詞,名字叫run-hello."Hello,world!"CR;run-hello
只有在編譯模式,也就是在定義一個單詞的中使用."指令,才能輸出字元串 。