2026年6月16日 星期二

蛻變編譯

蛻變編譯


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


本文透過簡單的生物學原理,講解 FORTH 系統中,以蛻變編譯(Meta-compile)生長技術,發展出新系統的基本觀念,很適合作為了解並永久記住操作蛻變編譯時的依據。

日本的心理學家新崎盛紀,在他的著作『直覺力』中,以機能定義『創造』為:『把性質相異的素材,重新排列組合成前所未有的新事物。』,言簡意賅,本身就創造了『創造』。

創作則是創造作品,會有物品產出,它代表著成就,令創作者愉快。好的作品還能用來造福人群,美化世界,這樣的創作就值得鼓勵,而且越多越好。我喜歡創作,也喜歡別人的創作,更喜歡見到專家那麼簡明扼要的描述『創造』。

年輕時,自覺見聞、知識、經驗與觀念都有所欠缺,創作嫌早;年邁後才想要創作,可能就會嫌晚而力不從心;現在恰似正逢其時,該使出渾身解數實現自己的喜好了。已經有許多年的時間,我似乎同時進行了兩項創作,一是文章,另一則是電腦程式系統,兩者皆我所好,總想不要顧此失彼,二者可以兼得,這個網頁貼文的內容因此就由兩者揉合而成。我很愛惜自己的作品,也很希望能與世界互動,並且隨時反省、把握住作品要有正面的效果,讓讀者受益。

回顧 ABC FORTH 數學計算系統,真可算是符合前述『創造』的定義,那裡面實在沒有太多純屬於我個人的作品,在著作書本以便留下設計技術時,我寫過:『我是站在巨人的肩膀上往前看』,表示我取用了大量性質相異的素材,素材早就已經存在,重新排列組合出『ABC FORTH數學計算系統』,它確實是前所未有的新事物,這裡面甚至於擁有許多我自己都還不曾經歷過的使用性能。

創造或創作並不困難,它不是要你從事於『無中生有』的事情,而是要你從事於『有中生好』的工作,重點在構思如何重新組織與安排出別人辦不到的結果。這樣的解說提醒大家,為了人類的福祉,要多行有意義的創造與創作。

『生命』是人人愛惜的,才會有人喜歡養寵物、栽盆景,因為這些東西都有生命特徵,『活潑可愛』通常都是我們對這些喜歡對象的主要描述。根據這個道理,我很可以使用一種很有創意的方式,敘述 FORTH 為什麼能被大家喜愛?因為,我發現 FORTH 相對於其他程式語言,具有別人所沒有的『生命特徵』。

要解釋這樣的觀點,必須引用生物學上對『生命』所下的定義。 FORTH 扯上生物學並不離譜,但不是『電腦』與『人工智慧』上的那種關係,我有我的特殊看法,會有這種創意看法是其來有自。

我從台灣桃園武陵中學高中畢業,武陵中學是一所不差的學校,當年高中一年級時,總共有十個班,一班平均約四十幾個學生,蔡惠美老師教我們生物學,我還記得她把期末考的試題出得非常難拿高分,全用複選題,選完還得寫理由,寫錯了每題都會倒扣。

高中二年級起,全校學生要開始重新分班,根據未來打算選讀大學科系的志向,分出不同的班級,分成自然、文史、農醫、法商四種類別,各自加強學習各別不同的科目,面對大學入學考試,進行不同的選擇。

高一考完期末考後,我才得知,全校只有兩個學生,期末考生物學的分數是及格的,滿分是一百分,六十分及格,我考了七十六分,另外一個後來成為醫生的同學,考了六十一分。蔡老師特別問我是否想唸當年分類為丙組的農醫類組,我恭敬的回答想唸理工科學類別,屬於甲組的自然類組,答案當然令老師失望,不過我確實熱愛所有的自然科學,包括博物學與生物學,至今我仍有能力自己閱讀這方面的書籍。有過這一段歷史,所以我會有 FORTH 與生物學方面的獨特看法。

所有生物學基本教材第一章都討論有關『生命』的現象,你若不熟,可以找一本淺顯的生物學教科書來回憶一下,它很簡單,只是說明,並不難懂,我自己是特別了一點,會牢記它,還會推敲它。一般而言,生物學家都認為生物可以歸納出四種生命特徵,也就是新陳代謝(metabolism)、生長(growing)、感應(sensitivity)與繁殖(re-production)四種生命特徵,我小女兒提醒過我,所有生物都該有另一項『死亡』(mortality)的特別現象,我也覺得合理,應該納入,生物學書本沒這樣寫。

我們可以根據上述的生命特徵來探討 FORTH ,你就可以發現人人喜歡有生命的東西,如果你了解 FORTH 也有生命特徵,它一旦被了解後,自然就會被喜歡,也就不足為奇了。

一般的程式語言系統,還不曾有過被設計成像 FORTH 這樣的結構,也許將來會有,但此前沒有。舉凡市售的程式語言系統,例如:ALGOL、COBOL、BASIC、FORTRAN、PASCAL、ADA、C、LISP、PROLOG、ASSEMBLY ..... 等等我曾接觸過的程式語言,結構都不同於 FORTH ,最大的不同是這些系統整體結構絕對是死的,不管它是以那一種編譯器(Compiler)或執譯器(Interpreter)設計而成的程式語言,它們的編譯器或執譯器是絕對不允許使用者亂動的,誇張一點說,是不容你動它的一絲、一毫、一根汗毛,那怕是僅改一個碼(Code)都不行,所以我很誇張的形容它們都是死的,一點都不為過。它們從大公司出廠的那一天開始,就被製成像標本一樣的死東西,可能很好看,使用者卻絕對不能從它感受到任何一項上述的生命特徵,或要它活過來。請問你以前使用過的任何上述程式語言系統,它的屍體如果仍然存在,它有任何一丁點的改變嗎?沒有,它確實是死在那裡,或者是逝去得無影無蹤了。

回頭來看 FORTH ,它那一點像有生命特徵的樣子?有的,所有的生命特徵它還全都有呢!只差它不會死亡,否則它就令人感到可怕而不敢喜歡了。

生物的新陳代謝,講的是生物攝取食物,獲得養份與能量,過程中有些許物質交換,生物處理源源不斷的輸入,進行活動並排泄廢物。

西藏有一種傳說中的動物被雕刻成飾物,名叫皮丘,傳言牠吃東西,只進不出,愛打麻將的人如果將此飾物帶在口袋裡,象徵一定贏錢,而且只進不出,據說萬一被對手發現,會被痛揙一頓,然後輸贏全都不算。皮丘只是傳說中的動物,不是真的,牠不會新陳代謝,所以不能被介定為生物。

FORTH 就新陳代謝此一特點而論,它是擁有這項特徵, FORTH 一旦在電腦上運轉起來,它的運轉方式就一直模仿著生物的新陳代謝特徵,處理源源不斷的輸入,如果輸入是指令,它會從自己的本體內比對出來,然後就依指令的內容,將此輸入以執行方式消化掉,就好像是取得了外界的能量,進行了一次相當健康的活動,最後愉愉快快的通知使用者一個『ok』,顯示在螢幕上。如果輸入是數字,它就將數字轉換成它自己消化後可以取用的型式,暫時存放在系統內的數字堆疊上,留供後用,這也是另一次系統的活動,有些許的物質交換,我們還可以強調這像是它的系統內部起了變化。如果輸入是一堆垃圾,它也認得,它就拒絕接受,然後不客氣的問你,這是甚麼?自從你會操作 FORTH 系統之後,你不覺得你因 FORTH 會這樣子進行新陳代謝而感到喜歡它嗎?

關於生命特徵的第二個生長現象,對 FORTH 而言更是特別。前已述及,別種程式語言系統的內部是不容更動的, FORTH 不同,它被設計成像生物一樣,隨時可以生長。每當你用冒號定義直接設計 FORTH 指令時, FORTH 的系統就在生長了,除了從冒號 『:』 到半冒號 『;』 之間所定義的程式指令,可以令系統成長外,還有變數『VARIABLE』、常數『CONSTANT』、字彙『VOCABULARY』…等的宣告,以及低階指令從『CODE』到『END-CODE』之間設計的程式指令,也都會令系統成長,而且確確實實與系統紮實的長在一起, FORTH 才能繼續『活潑可愛』的活動下去。另外還有特殊的嵌碼『,』入系統、配置『ALLOT』一段記憶體空間 ..... 等指令,也能令系統成長,由檔案載入程式,長的更快。如果長得不好,還可以使用忘掉『FORGET』指令,將不想要的部份一口氣就排泄掉,某些 FORTH 系統還能使用一個簡單的特殊指令,將現行系統立刻固定下來,Win32Forth系統使用的是指令『FSAVE』。你看, FORTH 怎麼沒有生長特徵?請注意!所有程式都跟系統長在一起, FORTH 只有一個整體式的結構,它會生長,統統長在一起,生物的生長不都也是這種長法嗎?別的程式語言系統,行嗎?

更有甚者, FORTH 的生長特徵是可以修改的,我所創作的『ABC FORTH數學計算系統』,如果不對原始FORTH母系統Win32Forth的核心部份,在生長時進行修改,不可能達到符合要求的性能設計,我只是 FORTH 的老手不是高手,就能辦到此事。我的這一生也搞過其他幾種程式語言系統,但都可以確信,此生是別想在別的系統上動任何念頭了,如果還有來生,那麼,來生再看看吧。

談到生命的第三種特徵──感應現象,是生物得對環境的刺激有所反應,才能稱之為具有感應能力, FORTH 號稱具有立即(Real time)響應能力,指的就是這種能力。操作 FORTH 系統時,你所鍵入(Type in)的每一個字元,都由 FORTH 系統內的執譯器(Interpreter)立刻進行處理,是 FORTH 系統直接對輸入進行反應,是 FORTH 隨時都對刺激它的環境訊息進行感應。要它執行有感應能力的程式時,也可以利用特殊指令『KEY』或『KEY?』直接對鍵盤輸入進行反應。若要設計對電腦周邊的感應程式,當然也比當前任何其它種程式語言系統容易,我們過去幾十年,已經設計過許多這種程式,只有又快又好的感覺。別種程式語言也能用來設計有感應功能的程式,但請注意!是被譯成的程式可以感應,不是別種程式語言系統自身在做感應。

第四種繁殖能力最為特別,一般程式語言系統要想具有繁殖能力,簡直就是天方夜譚、不可思議,賣系統給你的廠商,根本不為系統設計生殖器官,要不然他們就不能繼續賺你的錢了,因為你一定會用首次買到的系統來生出新系統,他們以後怎麼可能再賺到你的錢?微軟的老板就因為這樣而成為有錢的人。作業系統中雖有 COPY 功能,可以讓使用者省下一點還得再買同一系統的錢,但也只能複製程式,絕非繁殖系統。

程式語言系統的生殖器官難道設計不出來嗎?不是的,絕對可以辦到,只是除了 FORTH 以外,別人確實是很難設計出來罷了。因為生殖方法牽扯到生殖的哲理,僅有生殖器官,若沒搞清楚生殖的標準方法,還是生不出新的系統。此前,仍然只有 FORTH 的哲理內包括了生殖哲理,它還沿襲了生物的生殖方式來進行生殖,是唯一具有生殖特徵的程式語言。

生物要能生殖,他的自身首先就得依功能進行高度的分化,然後又要求生命的最基本單元要統一成單純的結構,也就是所謂的單個生物細胞結構都得類似。

想一想你自己的生命,你有高度分化的器官,卻都由細胞組成,細胞雖然不同,其基本結構則都一致,例如:細胞核內有遺傳染色體(Chromosomes)、細胞體內有粒腺體(Mitochondria)、高基氏體(Golgi bodies) ..... 等等,不同器官的不同細胞都必須要有一種類似的結構,如此,生物才能生殖,因為生殖要從單一個胚胎細胞開始。

再想一想 FORTH ,漂亮健全的 FORTH 系統,也有依功能進行高度分化的程式內容,例如:檔案處理、浮點運算、繪圖功能、編輯程式、甚至於等同於生物生殖器的繁殖程式(Meta-compiler)…等等,他們分別被歸類到相關的器官字彙(Vocabulary)內,高度的分化了。但不管各個程式的功能如何,組成它們的最基本單元,也就是基本指令,在 FORTH 中稱之為一個字(Word)者,其結構也都完全統一,只是內容不同。也可視同是最基本單元的常數、變數、字彙 ..... 等,他們的結構也都跟最基本的指令一樣,只有所謂的名稱欄、連結欄、解碼欄、參數欄 ..... 等相同結構。 FORTH 的設計哲理,安排成與生物生存的哲理完全一致, FORTH 就容易擁有生殖特徵。基本細胞結構一致,生物就容易完成生殖;基本指令結構一致, FORTH 就容易也就會生殖。

除此之外, FORTH 的生殖方法,也與生物的生殖方法類似。生物在胚胎生長時,先從單一個胚胎細胞開始,然後進行細胞分裂,在到達某一固定數量前,分裂出來的細胞不做功能分化。我特別請教台北醫學大學的微生物老師商惠芳博士,驗證這種現象,她明確的告訴我,確實如此,生物在繁殖時,細胞分裂到 2 的 5 次方,也就是 32 個以前,是不進行功能性分化的,此後才進行功能性分化。 FORTH 繁殖方法亦然,它也先長出一個不進行功能分化的核心(Kernel)程式,再用這個核心程式去長出各個功能不同的程式,以形成一個健全的新系統。

FORTH 有許多表徴現象,與我們熟悉的生物生命現象如此的類似,絕非偶然,當初發明它的莫查理(Charles H. Moore)先生將其設計成這個樣子,他所想像出來的FORTH 基本哲理,在有意或無意中應該是參考了生命現象而成,這樣形成的可貴哲理,有助於 FORTH 的恆久存在,因為我們熱愛生命,只要你能了解 FORTH ,顯現許多生命特徵的 FORTH ,自然就能為你所愛。

自古以來,我曾接觸過的好幾套 FORTH 系統,它們生殖過程的操作方法也都類似,Win32Forth 系統亦然,新手可以一開始接觸 FORTH 就學生孩子的方法,操作過程也很簡單,耗時並不長,但很可以引起大家的興趣。

在 Win32Forth 系統中,以蛻變編譯器(Meta-compiler)產生新系統的方法:

(1).先由執行中的 Win32Forth 標準系統載入蛻變編譯程式,其程式名稱為 META.F ,由鍵盤鍵入下列指令

FLOAD META.F

系統會自動產生一個核心系統,名稱為『KERNEL應用程式』的可執行檔案。

(2).以 BYE 掉系統的方式,離開現正執行中的 Win32Forth 標準系統,然後去執行前一步驟所新產生出來的 FORTH 可執行檔『KERNEL應用程式』。
此時你已經可以進行一般性的 FORTH 指令操作了,但此核心系統很小,用 WORDS 指令可以看到它所擁有的少數有限指令。

(3).從這個執行中的核心系統載入延伸出整體性能的主控檔案,其程式名稱為 ENTEND.F ,由鍵盤鍵入下列指令

FLOAD EXTEND.F

系統便自行載入所有相關程式,稍等片刻,一個完全像 Win32Forth 的健全新 FORTH 系統,『WIN32FOR應用程式』就會產生出來,另外附帶產生幾個為了應付 XP 作業系統所須要的相關檔案,完成了一次生產。

V6.14版依然使用傳統 FORTH 的蛻變編譯原理來生成系統,也與 V4.2 版的基本原理相同,差別只在更複雜的 V6.14 系統,就有更複雜的 EXTEND.F 內容。

透過生物學的模式,了解 FORTH 蛻變編譯程式的基本原理,是很好的學習方法,學過之後也有助於永久記憶,這是我的經驗。

從上述有別於一般介紹 FORTH 特性的敘述,你可以看出,我以異於常規的方式思考問題,所以也能以異於常規的方式設計系統,『ABC FORTH數學計算系統』就是以這種方式設計出來的。

已經獲得這個系統使用說明的人,用後應該有所體會,這個系統沒能像市售系統那般,提供所有的慣用指令。使用說明的最後一頁告訴大家,設計這個系統的目的並非在重新創作一套程式語言系統,設計它的初衷,只在改善 FORTH 的數學計算應用性能。但是,這個系統絕對可以達到任何數學計算程式要求的程式執行能力,我已舉出大型有用的實例證明了它。

每當我使用這個系統設計程式時,依然難免需要準備好使用說明,隨時參考,才不會用錯指令或函數名稱,這就是使用說明的實際價值。想把所有慣用指令或功能特異的指令都設計出來,我也不是辦不到,但會破壞這個系統的真正價值,我將設計這個系統的眼光看得很遠,試想,五十年後還想讓這個系統容易繼續存在,唯有現在就將其設計成最精簡扼要的程度才有可能。 FORTH 的哲理就是這樣, eFORTH 的精神更是如此, ABC FORTH 也不例外。有 FORTH 先進,建議我將某幾個指令設計成某種格式,將更為理想,我也同意這些構想很好,但我自肘功力絕對不及 Charles H. Moore ,最好暫時別改他的設計,恰如孔子所說的:『爾愛其羊,我愛其禮。』,使用者就請以禮待此系統。

我曾在講演的投影片中列舉了 ABC FORTH 數學計算系統的十大特點:

(1).全面讓不同程度的所有使用者,易於設計數學計算程式。
(2).讓過去幾十年所發展出來的 ALGOL、FORTRAN、BASIC 數學計算程式,易於轉譯改寫進本系統而再度有用。
(3).這個系統易於自行建立,因此可以確保幾十年後這些數學計算程式仍然有用。
(4).改善此前不方便設計數學計算程式的缺點,此後再配合即時性處理數學計算程式的能力,便可以設計出線上立即執行數學計算功能的程式。
(5).讓數學計算程式全面中文化。
(6).讓數學計算程式全面各國語文化。
(7).讓發展出這個系統的技術全面大眾化。
(8).為未來可能出現的新數學體系留下發展典範。
(9).救貧不救懶:對缺乏程式工具與程式技術者有用,對懶得寫程式者不管用。
(10).這是一個永遠免費的公益系統。

在系統公開的初始階段,這十個特點可能要靠我自己身體力行來給予證明,我不怕做這樣的事情,我也樂於從事,因為『ABC FORTH數學計算系統』是我個人的創作,我有恆心與毅力來推廣它的應用。

好的創作是有意義的,在創作中記錄寶貴的經驗就是更有意義的事情,因為對 FORTH 技術的傳承會有幫助。公開好的作品也應該是有目的的,絕對不可以無的放矢,套用一句中華民國到處可見的優良標語:『生命的意義在創造宇宙繼起的生命,生活的目的在增進人類全體的生活。』您是否仔細思考過這個標語的真正意義?這篇文章中談到了生命,『ABC FORTH數學計算系統』是 FORTH 繼起的生命,也談到了目的,這個系統的真正目的就是想增進人類全體的生活。