FORTH 系統的今昔
曾慶潭 Ching-Tang Tseng
ilikeforth@gmail.com
Hamilton, New Zealand
15 May 2011
從 1960 年開始,我已經接觸電腦相關技術 60 年以上。
從 1980 年接觸單板電腦 AIM-65 ,開始正式進入 Forth 的領域,已經 45 年了。從那時起,我只專心於使用 Forth,不再分心搞其他東西。
一直到 32 位元的 Win32Forth 系統被廣泛使用後,我才再把注意力集中於發展出完整的 ABCForth 數學計算系統上。此前,在 16 位元的時代,我所設計的 ABCForth 系統因缺乏好用的浮點算術功能,有效位數不足,不適合用來執行數學計算程式。出現適合使用的浮點運算,已是 2000 年以後的事情。我在使用十幾年 Win32Forth 系統後,在 2010 年的筆記本上記錄過一個 Forth 系統中現行功能的分類,如下列所示:
1. 核心基本程式(kernel)
2. 組合語言程式(Assembler)
3. 蛻變編譯程式(Meta compiler)
4. 編輯程式(Editor)
5. 除錯程式(Debugger)
6. 多工程式(Multitasker)
7. 檔案操作程式(File operation)
8. 浮點運算程式(Floating point operation)
9. 繪圖程式(Graphic display tools)
10. 語音輸出程式(Sound output tools)
11. 音樂輸出程式(Music output tools)
12. 物件導向驅動程式(Object oriented driver)
13. 動態連結界面程式(Dynamic linker library tools)
14. 作業系統界面程式(Operating system calling)
15. 系統內多人共用程式(Multi-user program)
16. 標的系統產製程式(Target generator)
17. 資料處理程式(Data base program)
18. 平行處理程式(Parallel processor)
19. 網路自動傳輸程式(Internet Autotransfer)
20. 科學程式庫界面程式(Scintific library interface tools)
21. 外殼語言控制程式(Shell language controller)
其他出現過的零碎功能程式則不在此列。這樣的表列不同於標準指令的分類,上述各類程式也全是網上古聖先賢捐獻出來過的開放式公益程式,我都享受過、使用過、從中體會過它們的用途與性能。很多程式都不僅是只有一套,可能有很多套,全都來自名家的設計,使用者只能感謝他們的貢獻。
大約是十五年前,我開始改用 Linux 作業系統,主用之 Forth 系統從 Win32Forth 系統換成了 ciForth 系統。發展軟體技術更換跑道是一件痛苦的事情,但是隨著時代的演變,這卻是不得不為之的工作。這十多年來,我繼續開發我有興趣的 ABC Forth 數學計算系統,許多成果已經發佈在這個個人網頁上。
長期的發展經驗告訴我,上述曾經有過的這許多功能程式,有些必須更迭了,有些則是不太需要發展,而是必須設法去適應新環境的新用法。我們就按照編號秩序逐個檢討,沒變化的序號就略過不談。
1.從略。
2.組合語言程式,在我使用 ciForth 後,不再在書寫 Forth 程式時需要使用。由於 ciForth 系統本身的組合語言源程式完全公開,需要動用到組合語言功能時,可以在長成系統前,直接使用組合語言自己設計,這樣的用法與習慣與過去不同。系統的作者曾經打算提供在 Forth 系統內的組合語言功能,後來放棄了。
3.蛻變編譯程式,在 ciForth 系統中已不需要,新採用的方法則是單憑一個 save-system 指令完成將發展成果固定下來的操作。這樣的理念非常好,只可惜作者的努力畢竟還是有限的,某些作業系統下的 ciForth 不能完成 save-system 的工作。在我使用之 Ubuntu Linux式作業系統中均無問題。
4.編輯程式在 64 位元的環境中已經不再設計,所有的編輯工作都配合作業系統提供的純文字編輯器(text editor)來寫出檔案程式,然後交給 Forth 系統編譯後執行出結果,這已是流行用法,至於編寫出來的檔案可能在經由網路遙控操作時無法工作之問題,不在 Forth 系統需求討論之列,此處不討論。 ciForth 系統另有個特色,作者將一些可以選擇性載入的功能程式放在一個叫作 forth.lab 的檔案內,使用者有需要時可以自行使用一個名為 wanted 的指令取得功能程式。 forth.lab 程式的內容是採用傳統之幕區塊(Block)方式設計出來的配屬資源,增改其內容必須使用傳統的幕式編輯器(Block screen editor)才能操作,系統不提供,使用者只能操作幕式顯示指令(n list)來看內容。
5.不討論,因為 Forth 本身就具有多種天生的除錯工具。
6.多工問題已不再在 Forth 系統中被重視,因為作業統大部份都已具備先佔式(Temptative)多工的性能。若 Forth 系統還要設計傳統上的知更鳥式輪唱型多工(Round robin multitask)實無必要。我在使用 ciForth 需要多工時,就透過 ciForth 能操控作業系統的功能直接完成,本網頁貼出過這樣應用的展示範例。
7.從略。
8.本該從略,但因我在使用 ciForth 系統時碰到困難,原始系統沒有提供恰當全套的浮點算術功能,我又有個人需求,只好自己全用軟體設計,已經完成很久而且一直在用了。
9.繪圖程式一直都是所有 Forth 系統發展中的最大障礙,我有種感覺,Forth 系統一旦具有了完整的繪圖功能,系統的發展也就接近尾聲了。 ciForth 系統沒能提供,也許以後會有,但目前沒有。我的變通使用方法,仍然是透過系統具有第 21. 項能操控他種程式語言的方式達到目的。只要該種語言屬於像最流行的 Python 照本宣科式語言(Scripting language), ciForth 都很容易達到目的。
10.語音輸出程式。這方面的功能取決於作業系統可以自由下載的資源而定,套套不同,但也套套都很容易實現,討論從略。
11.音樂輸出程式。與10.的條件相同,討論從略。
12.物件導向驅動程式,這本在 Win32Forth 系統中非常強調的功能,已經被棄用, ciForth 系統中沒有,討論從略。
13.動態連結界面程式,實現它的方式,首先需要取得可動態連結由 C 式語言設計出來的程式。在 Forth 這邊則需要動用到能放置動態程式於記憶體的指令,然後根據動態程式中提供之可通用指令名稱在 Forth 系統中叫用。本網業已貼出過好幾個示範程式,請自行查找。
14.作業系統界面程式。這在 Linux 作業系統中具有完全公開可用的資源,使用時要傳遞幾個參數的叫用方式 ciForth 已設計得非常完善,資源參考資料只能自己在網上查找。
15.多人共用程式,這方面恆是商業販售的軟體,已不在開放式 Forth 系統中被公開討論。
16.標的系統產製程式,狀況與 15. 同,討論從略。
17.資料處理程式。這方面的應用,由於新型的照本宣科式程式語言已有一大堆,包括 Python 也具有這類資源, Forth 已不需要自己設計,運用第 21. 條的外殼語言控制程式就能辦到,討論從略。
18.平行處理程式。以前在 Win32Forth 系統上有過同時使用幾個 CPU 平行跑程式的範例程式。後來在 Linux 中沒有見過,但搞 AI 者常用 Cuda 跑平行處理問題了,它好像已不是 Forth 愛用者有興趣的主題,此處討論從略。
19.網路自動傳輸程式。我在 Win32Forth v.4.2.671版中用過,後來沒再使用,但網上見過許多範例,有興趣者請自行查找。
20.科學程式庫界面程式。這項功能是固定的設計,該界面程式不能通過編譯的 Forth 系統,那就表示此系統的設計很有問題了。 Win32Forth 系統與 ciForth 系統都沒有問題。
21.請參考本網頁曾經刊出過的網文,學會設計方法來使用,它是 Forth 的吸功大法,像 BASH 程式語言一樣,專吸別人的長處來實現夢想,非學會不可。
所有軟體的性能,其實不只是只有這些,將來必定會有新的應用出現。Forth 程式語言功能的可延伸性,都能解決所有的問題。只是作者在下功夫設計出公認需求時,需要很先進、很深厚的軟體設計素養,我們在享受他們的貢獻時,勿忘感謝他們。
附貼兩張網上擷取之 round robin multitask 示意圖,與知更鳥的寫真照片。


沒有留言:
張貼留言