Forth
編程範型 | 面向堆棧、過程式、反射式、串接 |
---|---|
設計者 | Charles H. Moore |
面市時間 | 1970年 |
型態系統 | 無類型 |
文件擴展名 | .fs, .fth, .forth |
網站 | forth-standard |
主要實作產品 | |
SwiftForth (Forth, Inc.) Gforth (自由軟件) VFX Forth (微處理器引擎) | |
啟發語言 | |
Burroughs大型系統, Lisp, APL | |
影響語言 | |
Factor, Joy, PostScript, RPL, REBOL |
Forth是1960年代末期,由查理斯·摩爾發展出來在天文台使用的電腦自動控制系統及程序設計語言[1],允許使用者很容易組合系統已有的簡單指令,定義成為功能較複雜的高階指令。由於其結構精簡、執行快速、操作方便,廣為當代天文學界使用[2][3]。八十年代以後,有愛用者成立Forth Interest Group在世界各地推廣,並陸續在各類計算機上建立Forth系統及標準的語言。
簡介
[編輯]Forth以可延伸的詞典為核心,採用以堆棧為基礎的高度模塊化結構,是一種將解譯器和編譯器合併運用的雙態系統。使用FORTH,可在編譯過程中檢測差錯,並且逐步擴充編譯程序代碼。利用標準Forth所寫的程序幾乎不必大修改,就能在各類計算機運作;甚至在特別設計的電腦上可以完全放棄組合語言,直接由Forth轉化成機器語言,就好像現代的Java虛擬機。同時,使用者也可以把自己定義的運算功能加入編譯器中,使Forth語言更有彈性。
Forth是一種可擴展的,交互式的語言。亦適用於小型的嵌入式電腦,現在它幾乎可以在任何主流的芯片上解譯和編譯,甚至已有多種可直接運行Forth指令的芯片。在電子表格,專家系統,多用戶數據庫,和分布式實時控制系統中有廣泛的應用。表面來看,Forth是一種基於堆棧的概念機。例如要計算(3+4)*5,程序就是:3 4 + 5 *。首先把3和4入堆棧,然後調用+子程序,把堆棧的最頂上兩個元素取出(也就是3和4)進行加法運算,然後把結果入堆棧,然後把5入堆棧,然後調用*子程序,把最頂的2個元素,也就是7和5取出,並進行乘法運算,然後把結果入堆棧,最後的。把結果從堆棧中取出列印。事實上這是一種最簡單有效的概念機。當然Forth遠遠不止這些。
最常用在內建程序,以及系統與過程控制,它也用在微電腦上。主要運用在數據搜集與處理、圖形處理、專家系統,以及實時流程控制等。
樣例程序
[編輯]下面是一個在標準輸出設備上輸出Hello World的簡單程序,這種程序通常作為開始學習編程語言時的第一個程序:
: run-hello \定义一个单词,名字叫run-hello
." Hello, world!" CR ;
run-hello
只有在編譯模式,也就是在定義一個單詞的中使用."指令,才能輸出字符串。
從程序員的角度看Forth
[編輯]用Forth的「追隨者」的話來說,Forth是一種「人機一體」的語言。在程序員的意識中必須要有一台邏輯上的機器(可能是實際的芯片,也可能是虛擬機)。這台機器擁有兩個堆棧(數據堆棧和返回堆棧),一個詞典(在Forth中的詞(word)對應於高級語言的函數或者子程序,若干的詞構成詞典。)一個內部解釋器和一個外部解釋器。
和Forth語言一樣,也是基於堆棧的程序設計語言還有PostScript。基於堆棧的工具還有linux下的計算器dc,在其內部是通過堆棧實現的。
使用Forth開發應用程序與使用其他語言開發應用程序的感受有很大的不同。Forth的一切都是透明的,使用者可以看到每一個功能的實現原理和過程,正是由於這一點,Forth可以作為學習操作系統及編程的非常好的工具。關於Forth編程的特點有一個較為貼切的描述:"如果C語言給你的感覺是:它是最好的程序設計語言,那麼使用Forth給你的感覺則是:自己是最好的程序設計師。」
實現
[編輯]在微軟的windows操作系統下,一個很好的Forth系統是Win32Forth。詳見win32forth[4] 。
GNU/Linux系列操作系統下,GForth是GNU對ANS Forth的一個實現,可在gnu網站[5]下載(另有HTTP鏈接[6],GNU軟件一般推薦通過鏡像站點[7]下載)。下載後,使用通常的configure; make; make install
指令即可編譯安裝。GForth還可以內置在著名的文本編輯器Emacs中使用。若出現問題,請閱讀BUILD-FROM-SCRATCH
文件。
GForth同時適用於其他系統,例如OS X等UNIX類系統。
引用
[編輯]- ^ C. H. Moore; E. D. Rather; D. R. Colburn. The Evolution of Forth. ACM SIGPLAN Notices. ACM SIGPLAN History of Programming Languages 28 (3). March 1993 [2021-04-04]. (原始內容存檔於2011-08-22).
- ^ NASA applications of Forth (original NASA server no longer running, copy from archive.org)
- ^ Space Related Applications of Forth. [2007-09-04]. (原始內容存檔於2010-10-24).
- ^ [1](頁面存檔備份,存於網際網路檔案館)
- ^ [2](頁面存檔備份,存於網際網路檔案館)
- ^ HTTP鏈接(頁面存檔備份,存於網際網路檔案館)
- ^ 鏡像站點(頁面存檔備份,存於網際網路檔案館)
外部連結
[編輯]- FIG(頁面存檔備份,存於網際網路檔案館),Forth興趣小組,是致力於教育和推廣Forth編程語言的一個全球性的非盈利組織。
- Forth公司主頁(頁面存檔備份,存於網際網路檔案館),上面有很多經典的Forth學習資料,歷史和教程。
- 中國Forth程序員,Forth程序員社區和資料站。
- Starting Forth(頁面存檔備份,存於網際網路檔案館),Leo Brodie寫的Forth語言的入門教材,該書的特色是使用大量生動的圖片來說明程序執行的流程。