關於我

我是個軟體工程師。以前我在學校有 Lisp 與 Prolog 的學習基礎;是因欣賞 AI 學科裡的專家系統學門,而學到 Prolog 。而從 2009 年開始,我認識了 Erlang ,後來就保持著對於 Erlang 的熱忱。

儘管 Erlang 給我的感覺,如同 Lisp 給我的感覺處境一樣:我能寫這些種程式,但是,天哪,沒人在乎。但是, Erlang 的系統模式比主流語言如 Java 更早了好多年即是分散式系統的運作模式,但是,觀看普遍軟體產業的人,卻寧願從 Java 的繁雜與有限基礎上,由軟體生態系統慢慢地堆疊,而最後堆出各門各類的儀器 (facilities) 之後,才願意讓系統長得比較像分散式系統。那麼好的 Erlang 被放在旁邊!

不過,我的 Erlang 經驗也慢慢擴充,彷彿是我從幼稚孩兒的狀態慢慢長大:例如,我有個 ParseC 程式專案,本來是由 2011 年 5 月開始練習,但其實更早二年前,我已經讀過相關論文並由 Haskell 見識過老師的實地操作演練。只是,我先是資質駑鈍,沒有看透 Haskell 的模式,而在 2011 年的 Erlang 實作版本急著想做,卻立刻在 Lazy Evaluation 卡頓而停滯不前。同樣的停滯情況,在 2015, 2016 期間仍有發生,每當照著 Graham Hutton 的論文而演練,一遇到 parser 的遞迴定義,就因為 Erlang 原定的 Eager Evaluation 而停滯。現在,我才知道所謂的函數語言程式設計 (Functional Programming) 的意思:當我們說函數是一等公民 (first-class citizen) 時,意味著函數與資料同等,而因此,原本依 C 語言之類的程式語言,凡 function 的執行手段都是以及早預備 (Eager Evaluation) 模式時,而身為一等公民的函數物件,則需要完善地照顧好自己:函數不再急燥於拋擲自己的精力,像個沒準備好的年輕人,而是要像老練成熟的人,直等到他看到是他的時機,看到了他所能託付一生的資料時,才將自己的心血傾倒在所屬的資料上。

以上我說的這番故事,請參考 Graham Hutton 的老文章 “Higher-Order Functions for Parsing"  的第 8 頁(我存有一份副本),關於四則運算式的 parsers  。 2021 年 5 月,我重新探索了相同的專案,很快地繞過了以前遇到 Erlang Eager Evaluation 的障礙;並且,現在,我能在 github 閱讀 OTP 的源碼,也能讓 Erlang Runtime 收容在 Docker container 裡予以運作。

這本網誌是我在每個時候的零散紀錄,主要做紀錄用途,想用小篇文章呈現個別的重點邏輯結構,而不是想要開長篇大論。而 https://github.com/YauHsien 是我的程式專案儲存庫。

發表留言