2026年5月16日 星期六

編寫與執行 FORTH 程式方式的歷史回顧

編寫與執行 FORTH 程式方式的歷史回顧


曾慶潭 Ching-Tang Tseng
ilikeforth@gmail.com
Hamilton, New Zealand
16 May 2026

無法適應編寫與執行程式的操作環境,是正式使用 FORTH 系統前的第一大障礙。

2011 年時,流行之 FORTH 系統的使用方式為:

編寫程式時:強調使用在執行中的 FORTH 系統外面另開編輯視窗,進行檔案式編輯。也強調可以配合滑鼠來操作。

執行程式時:繼續保留在執行中的 FORTH 系統視窗內,直接輸入『載入檔案』(FLOAD 或 INCLUDE)指令式的傳統執行操作功能。但更強調從執行中的 FORTH 系統視窗上緣工具列內,操作滑鼠,選用『檔案』(File)一欄,拉下菜單式選項,由其中選擇『載入檔案程式』(Load Forth File)方式來執行。

傳統與當時流行的編寫或執行程式之操作方式大大的不同,但都有存在的價值,不可偏廢,本文就細述大家可能見到的操作情況,使用者了解之後,便能夠適應於各種情況,然後順利的使用系統。

程式編輯器概述

所有的電腦程式語言,在發展階段都需要編寫程式,編寫程式的方式也不斷的在發展,了解並習慣於程式編寫操作,就成了正式使用一個程式語言系統之前,首應學會之事。程式編寫環境確實有著優劣之分,而且關係到程式隨後被執行操作時的便利性。程式編寫功能,完全建立在系統的編輯器(Editor)上,它也是一個被設計出來的程式,欲設計出健全優秀的功能,必須在編輯器程式上付出設計代價。現代大型的程式語言系統,可以不考慮執行速度與記憶體容量的問題,因此,對編輯器功能的要求,當然是越優秀越好,編輯器程式就會被設計得非常龐大、複雜,而且僅只考慮使用時的友善性,令其好用與方便。

FORTH 程式語言,其程式編輯器的設計要求,大體上與傳統程式語言相同,但由於語言特質不同於一般程式語言,有時, FORTH 的程式編輯器還反過來不求方便,而將發展重點集中於自身系統性能的積極改進上,甚至於根本不設計編輯器,而改採別人提供現成可用的編輯器。理由無它,僅因 FORTH 系統太容易自行建立,而自建於作業系統中時,因作業系統願意公開的資源有限,妨礙編輯器的設計,於是延伸出許多FORTH系統不太在乎編輯器性能是否優良?卻照樣被愛用者高度接納的不合理現象。

為了適應流行的趨勢,歷代暢行的 FORTH 系統,亦均有其符合當時趨勢的優秀程式編輯器,還隨時都不斷有人為當時編輯器進行性能改善設計。換句話說,好的編輯器都不是一次性完成的產品,此一現象也與一般程式語言的狀況不同, FORTH 系統一切透通,這樣子發展也很自然。 2011 年流行的方式,是在 FORTH 系統操作視窗環境之外,另開視窗編寫程式,其中功能卻不斷更新,但主要功能只有幾項,仍然容易掌握。將來的編輯器必然與現行者不同,根據以往的歷史, FORTH 不會在乎,也不需要在乎別人的發展, FORTH 完全可以配合時代潮流來演進,因為系統的任何部份都很容易自建。

一般程式語言系統的編輯器,通常是與系統主體可以明確隔離開來的,也就是說,編輯程式時,就只編寫程式,不做其他事情;編譯程式時,就只做編碼之事,也不再涉及編輯之事。 FORTH 不同,所有系統內的任務都可以混著執行,編輯器也與系統主體完全連在一起,因此,程式編寫時就也同時考慮到隨後要交給系統執行之事;系統執行程式時不排除可以執行涉及編輯器的任何事情,甚至於可以共用資源或交互支援,這一方面, FORTH 與一般程式語言不同。

編輯器的演進歷史

第一套被設計出來的 FORTH 系統,可能沒有也不需要編輯器,因為 FORTH 是即時性控制(Real-time control)程式語言,系統啟動之後,直接輸入已經存在的指令,就可立即得到執行結果,所以根本可以不用編寫程式用的編輯器。

一直到今天,全世界仍有大量的使用者喜歡為單晶片電腦加裝自己設計的簡易 FORTH 系統,系統可以執行出結果後,為了能夠方便的編寫可以留存的程式,自行設計一個程式編輯器就不可或免,編輯器功能多,編輯器程式就不可能很小,因此,功能恰到好處的編輯器程式反成了值得永遠留存的設計作品。

最早的 FORTH 教材,介紹列式編輯器(Line editor)。使用者可以使用幾個簡單的單個字母,操控編寫出來的程式,將其留存在指定的記憶體緩衝區,感覺上性能相當粗糙,但是,您在自行發展自用系統的初期,簡易編輯器就能滿足編輯需要,還大量節省了記憶體的使用量。編輯器通常不會是您想發展出應用系統的唯一目的,換句話說,最精簡的列式編輯器,永遠都有其存在的價值。如果您的確具有想要自己發展 FORTH 系統之念頭,自行保留一份先聖先賢留傳下來的優良列式編輯器源程式,是必要的。

古早以前的電腦,顯示裝置很簡單,只有一列 20 或 40 個字元,能夠上下滾動顯示的緩衝量也只能三或四列。 隨著時代的進展,電腦系統的輸出顯示,演變成現今的螢幕之後,編輯器也改採以幕式編輯器(Screen editor)為主了。囿於傳統的 FORTH 系統曾將大批儲存(Mass storage)媒體,例如:磁碟,規劃成記憶體用量,每 1K (1024 bytes) 為一個區塊(Block)來操作,較早期的幕式編輯器所設計的編寫程式範圍,也因此以每次顯示、讀、寫 1K 的程式量為主。那時,游標的控制、訊息的插入、刪除、複製、貼上…等各種功能也都陸續被設計出來,好的程式編輯器,確實可以大量節省了使用者發展程式的時間,在電腦系統內記憶體還不便宜也無法大量使用的時代,編輯器佔用記憶體的數量卻成了另外必須考慮的問題,設計者只好在性能與環境適應性上進行均衡取捨。

嚴格說來,幕式編輯器依然延用至今,但細部分析時,幕式編輯器又進行過幾次明顯不同的演進。各個階段主要的差異,起因於後來電腦作業系統,對儲存資料的方式,採用了檔案(File)的觀念,與 FORTH 傳統的區塊觀念不同,編輯器的設計只好隨之而變。

區塊式檔案是一種 FORTH 獨有的檔案規劃方式,這種觀念一直延用到今天,仍然可以發現它的存在,道理無它, FORTH 就是可以很容易獨立存在於任何電腦中,可以完全不依靠作業系統,還喜歡直接對一切硬體的實體位址進行存取操作,以 FORTH 自己發展自己時,就強調這種區塊式檔案的規劃比其他方式都好。使用 FORTH 的能力到達能夠獨立進行發展的程度前,使用者必然早就熟悉各種程式編輯器的操作了,所以區塊式檔案編輯系統的操作說明,實不必特別強調說明,需要使用的人,通常有能力自行了解。

現行檔案式檔案是目前流行作業系統中採用的主流檔案規劃觀念, FORTH 在由區塊式檔案過渡到現行一般檔案式檔案規劃期間,也曾有過臨時變通式的安排。當時,曾採用過以一個流行檔案來包括固定數量區塊的辦法,讓檔案中有區塊,後來,才逐漸的讓區塊式觀念從現行檔案格式中自然消失掉,大部份現行 FORTH 系統,都已經與一般檔案觀念同步,目前,已經罕見仍採用區塊觀念設計的系統。

當 FORTH 的程式編輯器發展到與一般文書處理系統的操作結果相容時,對 FORTH 系統而言,會衍生出許多不能自由載入檔案讓程式進入系統的問題。文書處理系統只強調文件編排,為了美觀與多樣性的功能,所產生的檔案必須包括基本文件所需要的格式碼,這些東西不是 FORTH 系統能夠接受的程式,因此, FORTH 系統不能任意載入一般文書處理系統所編輯產生的 FORTH 程式。

就目前流行的微軟作業系統常用的文書編輯系統而言, Word 編輯器的產品不能直接供 FORTH 系統使用,因其最簡檔案的檔頭內,幾乎有 2K 的記憶體容量,放的是格式資訊。 WordPad 編輯器的產品也不能直接供 FORTH 系統使用,因其最簡檔案的內容,每一列結尾處都安排了特殊的跳列格式碼。只有號稱最簡單的記事本(NotePad)編輯器的產品沒有問題,這是一個幾乎可以稱作完全素文字式的文書編輯器, FORTH 系統就需要與記事本文書處理系統相同的程式編輯器功能,用記事本編輯出來的源程式,完全可以被 FORTH 系統接受。

如果只是單純的編寫程式,現行 FORTH 系統就不需要另行設計自己的程式編輯器了,因為使用系統的記事本可以解決編寫程式的問題。前曾述及, FORTH 系統絕對可以在編輯程式與系統執行狀況之間進行功能串聯,於是, FORTH 系統便仍然自行設計出自己的程式編輯器,就算編輯器的操作功能只等同於記事本,也仍然要這樣做,尤其在強調載入程式期間的輔助除錯顯示功能時,只能靠 FORTH 系統與自己設計出來的程式編輯器直接串聯才容易辦到。

許多電腦使用上的新觀念,也影響程式編輯器功能上的發展,例如:捲動式視窗顯示, FORTH 系統的編輯器也已採用了。滑鼠的操作功能也不例外,現行的 FORTH 系統還很強調必須配合滑鼠的操作,才能毫無問題、快速完成載入程式與執行的操作。例如:編輯產生的程式檔案名稱不是例行顯示文字時,難以單靠鍵盤操作直接輸入檔名,不用滑鼠點選便不能載入系統。另外,因滑鼠操作具有反白選擇、複製、再貼上的功能,有許多狀況,不用這種方式操作就無法將程式載入系統。直接操作滑鼠,當然也比逐個字元的打字操作,要快太多了。因此,現行的 FORTH 編輯操作不能免除滑鼠的功能,並且必須特別加以活用,才能節省程式發展的時間。

時代的進步不會中止,未來的電腦系統,必然不斷出現大眾認為方便的系統操作功能, FORTH 不能自外於世界發展,必須跟進,所以,可以預卜, FORTH 自己的程式編輯器,還得隨著時代的演進而發展。最近,電腦使用觸控螢幕,有大量增加的趨勢,隨後, FORTH 程式編輯器的新設計,可能就會受到影響,這種演變絕對不會停止。但是,程式編輯仍然有其絕對基本的單純觀念可以依循,使用者只是需要花一些時間來適應系統要求的操作,要學好 FORTH ,這就是一件非先行學會不可的習慣性操作。

編輯器的演變歷史:

第一套 FORTH 係直接操作系統,不需要編輯器

一列式編輯器

一幕塊式編輯器

一幕檔案式編輯器

視窗配合滑鼠操作檔案式編輯器

可能為多元控制或非現行檔案格式之編輯器
(配合觸控、聲控、圖示、輸入影像、腦波意念式控制……等多元操作)

.......... (作者也無法預卜之方式的編輯器)


典型的程式編輯器

以 Win32Forth 系統為範例來說明,比較容易詳細了解典型 FORTH 程式編輯器的整體性能。

中文顯示現在已經成為正式電腦的固有性能之一了, FORTH 系統的發展則尚難完全跟進,這也是為什麼我選擇採用 Win32Forth 系統來介紹程式編輯器的原因之一,這個系統配合中文的要求性能,已經完全在我們的掌握中,全世界現在流行的大型 FORTH 系統,還有許多個系統的性能無法達到適應中文的要求。

Win32Forth 系統經過十幾年的演進,陸續出現過許多版本, 2011 年的版本為 V6.14 版,也有其新版編輯器。系統的發展歷史,不是此處打算介紹程式編輯器時的重點,故略而不談,只談單一個有用的編輯器程式。

為了迎頭趕上最新的版本,並且涵蓋整個 Win32Forth 新舊系統均可使用的程式編輯器要求,只介紹系統中最有彈性功能的程式編輯器 WinEd ,但並不需要逐項仔細的介紹出這個編輯器的所有功能,只挑選實際編寫程式時,足夠用來完成工作的操作予以說明,未介紹到的其他功能,讀者習慣於使用這個系統後,可以自行透過試用的方式來了解。

此系統中另有許多其他設計者提供的程式編輯器,若單純只以中文顯示為著眼點來考慮,只有 WinEd 的性能較為健全,也較為精簡,我們就以利用 WinEd 編輯程式,編寫出最簡單的一列迴響印出文字的程式,當作精簡範例,作為開始,並刻意以中文作為檔案名稱,再以滑鼠操作載入檔案,實現整個精簡過程。一般的大型程式編寫操作方法與此雷同,熟悉這個精簡操作過程,就足夠用來設計一般程式。

隨後,再根據作者長期使用此系統的經驗,將逐步介紹其他在編輯程式時,必須妥善利用的特殊操作,以便學會遇到特殊情況時,解決某些困擾的辦法。程式編輯器的所有功能,都不是必然的設計,是許多人使用過後,再經不斷改進設計的結果。另外,包括融入中文或非英文的其他文字,儲存成一個 FORTH 系統能夠單獨識別出來的檔案格式及其圖示(Icon),滑鼠、觸控、色彩、聲效 ..... 等的功能,都必須配合基礎作業系統來設計,背景作業系統缺乏這些功能前,編輯程式也就不便單獨為其建立這些功能。

就像啟動 Win32Forth 系統的方式一樣,啟動 WinEd 時,也是利用滑鼠,在螢幕上那一片以綠葉子圖示的程式編輯器位置,直接點選兩次,系統立刻進入可以編寫程式的新視窗環境。

一開始,我們可以完全忽略視窗中所有邊框的顯示,直接找到螢幕上閃動游標所在的位置,立刻開始編寫程式,例如:就鍵入下列一列程式

: hi .” Hello ! How is going? ” ;

表示我們設計了一個名稱為 hi 的新指令,它的工作就是拓印( .” ..... ” )出一列文字,此處為『 Hello ! How is going? 』,然後就結束了工作,它就足夠代表一個完整的程式了。

接下來的操作,雖不是標準 FORTH 系統所強調的東西,卻是能不能達到讓 FORTH 系統順利載入這個檔案程式的關鍵,為了此後能快速操作系統而節省發展程式的時間,使用者必須熟悉這些操作且養成操作習慣,作者於發展大型應用系統期間,強調曾經一日之內反覆進行了成千上百次這樣的操作,一點都不為過。

WinEd 非常強調藉由滑鼠來完成工作,因此,要存住這個剛編寫完成的程式時,最好利用滑鼠。雖然壓鍵盤的 Ctrl+S 也能達到目的,但可以不用去記憶這樣的操作,像一般文字編輯系統一樣,這種壓鍵操作的功能,大概只在滑鼠功能失效時還有點用途。

WinEd 也採用自上方主要功能分類指示文字中,點選一類,以取得此一大類菜單式子類分支功能選項的設計。從文字說明式的菜單選項挑選一項,操作滑鼠滑動到此一選項,則此被選之項的文字將反白顯示,再以滑鼠左鍵於此位置點選一次,系統便按功能要求執行指定的程式。

第一個要學的操作是存起新建檔案:先點選左上角的『 File 』(檔案)大類,然後在菜單選項中點選『 Save File 』(存檔),因為這是一個新編寫的程式,所以才這樣選擇。

編寫一個原就存在於系統的檔案程式,則係經由 WinEd 以『 File 』『 Open File 』(開檔)操作,自另外顯示的小視窗中找到想要編寫的檔案程式,開啟此檔案程式,編或改寫完成之後,存檔的操作則為『 File 』『 Save All Changed Files 』(存起所有業經改動過的檔案)。在程式發展過程中,這樣的操作,比上述建新檔案的操作更為頻繁。

此處打算儲存起來的檔案,稱為文字程式檔案(Text file),有別於可被電腦系統直接執行的系統程式檔案(System program file),也有別於單純用來儲存資料而非程式,但也是文字形式的資料檔案(Data file),現行電腦系統,也將一個可以包括上述所有型式檔案的資料夾,視同為一個檔案,它的名稱就叫作資料夾檔案(Directory file),它們都是一般常用檔案之各別的名稱。

當使用者進行了上述存檔操作之後,電腦系統會在螢幕上顯現出另外一個小視窗,讓使用者安排打算儲存檔案的去處,這是使用者必須學會的第二項重要操作,熟悉這個操作,並建立實質觀念,此後才能明確的知道,自己設計出來的程式,是以甚麼指定格式?儲存在電腦內的甚麼地方?

尚未建議使用者在 Win32Forth 系統中新建自己專用的資料夾前,此處的操作範例可將新編成的程式檔案,暫時儲存在與 Win32Forth 系統相同的資料夾之下,以便容易進行後續操作,並明確知道檔案被儲存的資料夾位置。

確定資料夾在路徑中的位置,是進行這項操作時必須注意的事情,也是打算重新編輯一個已經存在電腦系統中的檔案時,必須注意的事情。出現的小視窗,與編寫一般文字文件時的檔案存取操作方式完全相同,因此,您若已經熟悉這種操作,便能很快體會出其中的意義。改變資料夾所處位置的層次時,以點選小視窗上方帶有翻頁箭頭的圖示來達到目的。小視窗最下方一列的檔案型態,決定了小視窗中可以顯示的檔案形式。最重要的一項操作,則為選擇『確定』欄位,壓下滑鼠左鍵前!必須確定有您自己決定賦予的檔案名稱,而且型態延伸(type extension) 尾綴用字,必須人為鍵入!!!指定為『 .F 』或『 .f 』的格式型態,否則, FORTH 系統自己無法識別出,這是一個屬於系統可以自由操作的標準 FORTH 源程式檔案。

假設存好了編寫的程式檔案後,電腦系統回到了開機備便後的一般螢幕顯示狀況,等待使用者進行下一步操作。

第三個要學的操作是載入檔案:在電腦系統的觀念上,剛才編寫完成的檔案,它的地位等同於一個 FORTH 系統,只不過 FORTH 系統是一個可以被電腦直接執行的檔案,而編寫完成的檔案,是一個文字形式尚不能執行的檔案。使用者必須操作電腦,以 FORTH 系統載入文字程式檔案,剛才所編寫完成的檔案程式,才能在 FORTH 系統中執行。

載入程式的方法,可以像傳統的 FORTH 系統一樣,在螢幕畫面上點選兩次 FORTH 系統的圖示,讓 FORTH 系統開始執行之後,使用 FLOAD 或 INCLUDE 現成指令來達到目的。執行這種指令時,必須注意的事項為: FORTH 系統現行指定路徑(Path)的處境,必須與打算載入檔案之路徑的處境,處於同一資料夾(Directory)之下。只有這樣,才允許在 FLOAD 或 INCLUDE 指令之後,直接使用指定的檔案名稱,且檔案名稱型態延伸尾綴,必須是『 .F 』式的 FORTH 系統專用格式。若檔案並非處於上述資料夾內,輸入的檔案全名,則必須是包括前引路徑的全長名稱。具有此種限制性的典型指令操作方式,例如:

FLOAD filename.F 或 INCLUDE filename.F

另外一個比較有效率的程式載入方法,為直接以滑鼠操作。

就 Win32Forth 系統而言,我們強烈建議使用者,養成這種可以快速載入程式的操作方法。一方面是可以節省程式的發展時間,另一方面當程式的檔名為長串中文名稱時,依靠上述傳統的載入檔案操作方式,就顯得太不實際了。能在整個 FORTH 系統中自由使用中文,是現行 Win32Forth 系統的一項主要特色,現在還很難見到別的程式語言能夠全面融入中文, Win32Forth 系統既然可以,為什麼不讓這樣的特性盡量發揮?假設使用者已經習慣於輸入中文,如果上述剛建成的檔名給的是『範例操作程式.F』,在練習操作載入程式到達熟練的程度前,不用滑鼠來進行載入操作,就會是一件令人相當苦惱的事情。

以滑鼠操作載入檔案程式的詳細步驟如下:

以滑鼠點選兩次,啟動 Win32Forth 系統後,此系統呈現的標準視窗上緣,有一橫列英文文字分類的操作選單。

將滑鼠移到顯示 File(檔案)的位置,點選一次,立刻會在此處以小方塊顯示隸屬於 File 此類之下的所有子項菜單式操作選擇。

將滑鼠移到 Load Forth File… 位置,點選一次後,與存檔操作時類似的另一個小視窗就會顯示出來。

操作滑鼠,到打算載入系統的檔案名稱位置,點選一次,這個檔案的名稱就會自動跳入小視窗下方原為空白的『檔名』欄內。

移動滑鼠到小視窗右下角顯示『開啟』的位置,點選一次,小視窗消失,而載入效果就會立即呈現在 Win32Forth 系統的標準視窗內。

載入成功,則會有一列包括全路徑的檔案名稱先行顯示,緊接於後顯示 ok 。

載入失敗,則顯示一大堆告訴使用者為何失敗的文字說明。

依上述操作載入成功之後,就在 Win32Forth 標準視窗游標顯示的位置,直接輸入練習建立的『 hi 』指令,可以立刻看到印出『 Hello ! How is going? 』的效果,這就是 Win32Forth 。

其他的程式編輯器

前節所述程式編輯操作的整個過程,足夠應用於一般性的程式編寫了。

視窗系統提供了使用者可以開啟多重視窗的功能,因此, Win32Forth 系統也允許使用者執行此系統時,可以開啟其他的視窗,甚至於系統在執行過程發生反常例外(Exception)現象時,有時會自動以另外一個小視窗來顯示警告訊息,或自動跳出另一個視窗,顯示引致系統執行錯誤的程式檔案內容,以利使用者立即進行除錯前的檢視。

現行文書編輯系統,很強調依靠滑鼠操作,由左上角向右下角拖曳於指定文句,使指定區域反白顯示代表被選定(Selected)了,再到操作選單中點選 Edit 『編輯』類,在菜單式選項中選取 Copy (Highlighted Text)『複製』,或選取 Paste (to Keyboard)『貼上』,讓系統來處理文書編輯時常執行的文字編寫功能。這樣的操作是 Win32Forth 系統發展程式時,經常要做的操作動作。

能夠同時開啟好幾個視窗,能夠使用滑鼠操作選擇(Select)、複製(Copy)、貼上(Paste) ..... 等功能,『 WinEd 』程式編輯器的功能,顯示它就是一個一般性的文書編輯器,與流行的文書編輯系統比較,『 WinEd 』的功能接近標準的素文字編輯器『 NotePad 』,但與『 Word 』或『 WordPad 』不同,因此,由『 NotePad 』編寫而成的程式, Win32Forth 系統可以接受,另外兩個則不行。雖然如此,『 WinEd 』與『 NotePad 』對於 Win32Forth 系統而言,意義不同,因為, Win32Forth 系統可以直接對『 WinEd 』操控的檔案操作,但系統沒有直接對『 NotePad 』操控檔案操作的相關指令,由這兩個編輯系統顯示同一個檔案時,畫面有所不同,就可以明顯的區別出來。

大部份 eForth 系統的程式編輯器,由於系統性能強調短小精悍的關係,均不注重於增進編輯器性能的設計,有些用法還根本就不設計編輯器,而依附在對其作業的大型 FORTH 系統,以便控存發展中的程式。作者使用過可以接受單純以 PE II 編寫程式的 eForth 系統、或檔案幕式的編輯系統、或檔案塊式的編輯系統、或自行開啟新視窗式的檔案編輯系統 ..... 等,也曾倣效 polyForth 系統提供的資源,自行設計過 eForth 的傳統塊式程式編輯器。這些編輯器的操作方式因系統而異,不在討論範圍,讀者必須於使用各該系統時,自行適應。


沒有留言: