Forth語言

Forth語言

Forth 語言是 Charles Moore 在 20 世紀 60 年代發明的基於堆疊、互動式、具有簡單性哲學思想的計算機程式語言和環境,已被證明特別適合於軟體代碼在千行數量級的中規模嵌入式系統套用,作為國外大公司競爭系統開發周期、生產成本和系統可靠性的秘密武器之一,被廣泛套用於天文、軍事、航空、航天、工業自動化、圖形、儀器儀表、工作站領域,並且研製了以 Forth 為體系結構的處理器晶片。

基本介紹

  • 中文名:Forth 語言
  • 外文名:Forth Language
  • 發明人Charles Moore
  • 時間:20 世紀 60 年代
  • 隸屬:計算機語言
起源,歷史,程式,特點,編程,設計原理,主要元素,開發的項目,

起源

Forth 並不起源於其它已有的程式設計語言,所以它的外觀和內部特點對於新用戶來說是特殊的。但是 Forth 的簡單性、高度模組化和互動式特性可以彌補初學者的陌生感,使得 Forth 非常易於學習和使用。一個新的程式設計師通常需要花一些時間來掌握 Forth 巨大的命令集,通過一個月左右的全面使用,程式設計師就可以理解它的整個內部工作機理,所學到的東西要比傳統作業系統和編譯器多得多。
Forth 與傳統語言最大的不同是它的可擴展性。 Forth 的編程過程就是定義新的字,字實際上就是語言的新命令。字可以用一系列以前定義的字來定義,這個過程與教育孩子的過程相似:我們總是用孩子們以前理解的概念來教給孩子們新的概念,而這些字被稱為“高級定義”。同樣,新的字也可以用彙編代碼定義,因為在多數 Forth 實現中都包括宿主處理器的彙編器,而這些字被稱為 CODE 字。
可擴展性的結果是我們在開發一個套用的同時,也間接地開發了一個特殊的、針對這一類套用的“面向套用的語言”,它可以用於或者經過修改之後被用於相似的套用。
Forth 的可擴展性並不僅僅是為語言自身增加新的命令,所以不要把定義字與傳統高級語言定義函式、過程等同。可擴展性還能夠創建一個可以定義其它字的字,這種字被稱為“定義字”。在創建這樣一個定義字的時候,程式設計師能夠指定它所創建的字在編譯時間、運行時間或者這兩種狀態下的特殊行為。這個能力允許我們定義特殊的數據類型,並對其行為和結構實施完全的控制。又由於這種字的運行時間行為可以用高級語言或者彙編語言來定義,所以由定義字創建的字將具有與其它 Forth 字一樣的性能。系統也允許我們增加一個新的“編譯指示符”以實現特殊類型的循環或者其它的控制結構,比如CASE 結構。

歷史

Forth 語言是 60 年代發明的,當時 Moore 在斯坦福線性加速器中心做電腦程式員工作,後來變成了一個自由工程師。當時的工程技術人員為了控制編譯程式必須學習大量的方法,包括連線器、彙編器偽指令以及高級語言,開發這個新工具的目標就是為了克服這些問題。
按照Forth語言的發明人Charles Moore( Chuck )的說法:
我第一次把各種想法組合成一個整體之後,它在“第三代計算機” IBM1130 上工作得如此有效,以致於我認為它是“第四代語言”,理所當然地應該被稱為 FOURTH 。不過,當時的 IBM 計算機只允許 5 個字元的標識符。所以 FOURTH 變成了 Forth ,這是一個非常好的的文字遊戲。
第一個稱為 Forth 的程式大約是在 1970 年編寫的。第一個完整的實現是 1971 年在一台 PDP-11 上完成的,用於亞利桑那州國家射電天文台的 11 米射電望遠鏡。這個系統的責任是定向和跟蹤望遠鏡,收集數據並記錄到磁帶上,支持一個互動式的圖形終端,供天文學家分析以前記錄的數據。系統的多任務特點允許這些功能同時執行,沒有時間上和其它方面的衝突。
這個系統取得了巨大的成功,世界各地的天文學家開始請求提供軟體拷貝。Forth的使用範圍迅速也擴大,國際天文學會於 1976 年接受了 Forth 作為標準語言。
這個套用的成功還促使 Moore 和 Elizabeth Rather ( ("Bess") 於 1973 年成立了 Forth, Inc. 公司,目標是開發這種語言的商業套用。 Forth, Inc. 在小型機上開發了多用戶的 Forth 版本,可以用於從資料庫到圖像處理等科學和套用領域。和第一個套用一樣,它們需要不同工具的組合。
1977 年,公司為剛剛出現的 8 位處理器開發了一個稱為“microForth”的版本,對小型機上的“miniForth”做了擴展和補充。1979 年,稱為“PolyForth”的產品替代了這些系統。從此以後,它就成了市場上銷售量最大的 Forth 系統。
“microForth”系統在美國、歐洲和日本的嵌入式微處理器套用中取得了成功,由此產生了歐洲 Forth 用戶團體 (EFUG) ;1978年,位於北加利福尼亞的計算機愛好者成立了 Forth 興趣組織 (FIG).
FIG 從天文台得到 Forth 系統,再用這個系統開發出一個簡單的模型,然後在幾個不同的系統上實現(那當然是得到了 Forth,Inc 的許可之後)並以非常低的價格銷售。這個模型後來變成了著名的 FIG-Forth 模型。所有這些使得對 Forth 的興趣迅速增大。 FIG 目前在 15 個國家中有 60 個分支。

程式

下面是一個在標準輸出設備上輸出Hello World的簡單程式,這種程式通常作為開始學習程式語言時的第一個程式:
: run-hello \定義一個單詞,名字叫run-hello ." Hello, world!" CR ;run-hello
只有在編譯模式,也就是在定義一個單詞的中使用."指令,才能輸出字元串。

特點

Forth 是一個互動式的程式設計環境,最初是為程式設計師在小型和微型計算機上開發應用程式而設計的。最早用於科學和工業套用,比如儀器、機器人、過程控制、圖形和圖像處理、人工智慧和商業套用。 Forth 的主要優點是軟體開發快速、互動式、計算機硬體的高效使用等。
Forth 常常被作為一種語言,這當然也是它最常見的方面,然而 Forth 所提供的功能比傳統的程式設計語言要多。傳統的高級語言工具包含有許多分離的工具(編譯器、編輯器、彙編器等等), Forth 把它們融為一體。與傳統的高級語言相比,它是經過深思熟慮的,完全沒有傳統高級語言那么複雜的語法特性。
最早實現的 Forth 是一個獨立的系統,它包含獨立作業系統的一般功能,還包括有編輯器、編譯器彙編器、調試器和其它工具。一個單一的、簡單的、一致的規則支配這些能力。今天,儘管還能在許多處理器上見到獨立的版本,但更多的版本是與 MSDOS 、WINDOWSUNIX 一類作業系統協同工作的。

編程

Forth 語言和英語非常相似,它的基本元素是已命名的數據項、過程,以及創建用戶化數據項的定義字的能力。過程和定義字可以使用以前定義的字或者彙編代碼來定義,它們與其它語言的子程式相似,也與其它語言的命令等效。 Forth 允許我們在鍵盤上打入一個函式的名字,這個函式將被立即執行。然而,如果我們把功能的名字放到定義中,將編譯成對於這個函式的引用。
高級字是由其它字的集合來定義的,我們可以把這個過程想像成是其它語言的宏或者詞典中的英語定義。新的字被加入到它們可以使用的存儲器中,其定義被加入到字典中。在一個 Forth 字的命名規則中,只有很少的幾個字元不能作為命名字元使用。許多程式組織使用更好的命名約定,通過可列印的字元以增加程式的可讀性。
當遇到一個字的時候, Forth 就通過字典搜尋希望找到這個字的定義,如果找到,這個字定義的功能或者被立即執行,或者作為引用而被編譯到新的定義中。然而,如果在字典中沒有找到這個字,系統就試著把它轉換成一個數。如果轉換成功,就把它放在堆疊上。如果不能轉換成數字,就顯示這個字並列印出一個錯誤的信息來報告這個字是系統所不知道的。

設計原理

· 字必須在引用之前被定義;
· 邏輯流限制只有順序、條件和循環,有專門的字用於實現常用的程式控制結構;
· 程式設計師使用許多小的、獨立的模組(字)來實現最大的可測試性和可靠性;
這種方法有兩個明顯的優點
· 新的字總是用以前定義和測試過的字來構造,所以調試更容易。模組可以單獨執行以測試它的功能;
· 固有的模組性使 Forth 成為一個“設計性語言”,允許自頂向下的設計同時保持自底向上的測試。一個字可以在不同的程式中使用,但是它的功能只需要定義一次;
這些都保證了 Forth 軟體能夠快速和有效地被開發,同時,如果管理得當,也可以作為自身文檔的基礎。

主要元素

· 一個字典;
· 兩個堆疊,一個是參數棧,另一個是用於數據交換的返回棧;
· 鍵盤(輸入流)解釋器
· 一個彙編器
· 虛擬存儲;

開發的項目

以下是一些使用 Forth 開發的項目:
Atari 的許多投幣遊戲機都是用 Forth 開發的。他們相信開發高性能代碼的最快方法是使用 Forth ,加上使用彙編語言來重寫最內層的循環。
按照最近與著名的 Infocom 高級遊戲開發者的談話,他們的遊戲解釋器也是用 Forth 寫成的。
Unison World 為 CP/M 作業系統開發了許多遊戲,全部都是用 FIG-Forth 編寫的。按他們技術總監 Marc de Groot 的說法,把一個基於 Z80 的遊戲移植到 6502 或者 MC6809 上,典型的時間不多於 3 個月。
美國 Federal Express(聯邦快遞)公司的手持式行李分撿系統的程式是用 Forth 編寫的。項目經理 Gene Farrar 說,他可以按需要在幾個星期內升級新固件,相比而言,其它的小組維護 C 語言代碼則至少需要 6 個月的時間。
1990 年 11 月哥倫比亞太空梭的 4 個載荷中有 3 個是用 Forth 編程的。按設計團隊之一Johns Hopkins University's Applied Physics Laboratory的 John Hayes 說法,他們選擇 Forth 來解決飛行中的硬體問題,靈活性是一個主要的因素。
SUN 公司把 Forth 用於它的工作站可程式 Boot ROM 中,以每天 500-1000 台的速度發貨,是可程式 Forth 系統中數量最大的。 1994 年 IEEE 1275-1994 將 Forth 用於 BOOT (初始配置) 固件的標準,這也是 POWER PC 通用硬體平台的基礎。
在電影《終結者 II :世界末日》中, Cyberdyne Systems T1000 系統的特技效果是基於 Morphing 軟體包 Forth 產生的。

相關詞條

熱門詞條

聯絡我們