回到 HN 的那篇回應。作者對 forth 應該有一定的瞭解,也提供 C 語言與虛擬碼的實作片斷,可惜對於一些 forth 的關鍵特性沒有太多著墨,程式碼也不夠完整到可以直接執行。這次定下來的方向是以那篇回應為基礎框架,補充一些我覺得重要的說明,並且把程式碼補足到可以實際運作就好。
全文以一個簡單的計算機作為起點,透過幾次小幅度擴充發展出具體而微的程式語言解譯器。我個人還蠻喜歡這種作法的。整個實作可以分成五個階段:
1. RPN 計算機
2. 解譯器
3. 編譯器
4. 流程控制
5. 最佳化
這次主要指示想補充一些實作 forth 時需要注意的地方而已,因此最佳化的部分就跳過了。
實作 RPN 計算機並不難,方法也很多,所以這裡的重點會著重在建構手法,只要一開始就當作 forth 在實作,後面每個階段都只需要堆疊一點程式碼就能增加新功能。從目前準備好的程式碼來看,每次核心變更大概都不超過 20 行,只要這麼一點調整就能獲得編譯器的開發工具應該不多。雖然最後還不算是完整的 forth,但是作為 forth 發展手法的展示來說應該是足夠了。
今年的作文題目是年假前決定的,準備寫一點實作 forth 的介紹。起初是上個月在 HN 看到的一篇回應:
https://news.ycombinator.com/item?id=13082825
沒想到有人用幾個回應建構出一個 forth 的雛形,看了有點手癢;再來就是黃大一博士的消息,想起小時候看的 F83 入門有點懷念。所以就這麼定下來了。過去嘗試幾次整理實作 forth 的文章,但一直都沒有成功寫完過... 就像實作 monad 的文章一樣,我一直覺得玩 forth 的人不管實作過幾套 forth,至少也該寫過一篇 forth 實作的文章才算圓滿XD
用傳統方法來實作 forth 其實是一種有趣的體驗。哪怕這輩子根本不會再有機會使用 forth,也絕對值得走上一遭,親自體驗一下為什麼玩 forth 的人老是在說這東西不是程式語言,老是排斥用高階語言實作 forth... 以及為什麼玩 forth 的人到最後變得只會實作 forth。
多糖體 🐱 對碼戰鬼 🐱 程式理債專員 🐱 歡迎回嘟,不必多禮 🐱 CppTW Group https://t.me/cpp_tw