我喜歡文本處理,之前熱衷於使用數據庫技術。如今用 Vim 和 Perl。 我能夠不假思索的用 Vim 寫 Perl 代碼。像聊天同樣。Perl 語言的全部特性我都熟悉,幾乎不用查詢幫助文檔。 其餘語言中關於文本處理,正則表達式的函數和算法,我都比較感興趣。 擁有不一樣語法的語言,我也當成一種文本。正則表達式
我愈來愈發現,天天處理的大都是語言自己形成的問題。 彼此之間有着語法和文化的鴻溝,互相之間充滿了誤解。算法
我決定寫一個通用的語言解析算法,可讓不一樣的語言能夠相互轉換。數據庫
這是一個巨大的挑戰,但無論多困難,都是值得的。編程
第一階段. 我打算將 BNF 語言描述的語法做爲配置文件進行解析,並生成相應的規則。網絡
很快發現,太多的精力放在解析這門語言上,BNF 語系有太多的不一樣,難道我要用那麼多精力,累死在作 BNF 的語言轉換器的路上嗎?數據結構
由於轉換 BNF 到數據結構,只是時間上的問題,技術不是問題。何須浪費時間在這上面呢?必定有許多人能夠把這個作的很好。函數
既然解析語言是爲了轉換成內部數據結構,我爲何不用表示數據結構的語言來作個人配置文件呢?測試
我決定用數據結構的表示形式來作配置文件。設計
進度加快了,但又遇到了問題,因爲調試的問題,我須要在數據結構中加上暫停和註釋的功能.調試
因爲動態規則的問題,我須要對這個數據結構進行動態生成,而個人數據結構沒有什麼規則可言,不久,關鍵字和操做符也要加到這門語言當中,我忽然意識到,我居然在設計一門語言?
我曾經發過誓,再也不發明什麼新的語言,只是轉換舊的。怎麼違背了當初的誓言呢?
但能解決我問題的語言是什麼呢?我列舉了幾個特性:
聽聞 Lisp 就是這樣的語言,但看看 Lisp 艱深的書籍和各類像機器碼同樣的程序,就從內心否認了繼續研究 Lisp 的想法。
社區裏不少人喜歡 Emacs, 時常看他們貼出 Elisp 的代碼。這些表示法和 lisp 語言同樣像一件古董。Lisp 除了能作 Emacs 的配置語言外,還能作什麼呢?
《黑客和畫家》改變了個人想法,原來 Lisp 能夠作網絡商店,並且開發效率那麼高?這門語言真的那麼神奇,難道 Lisp 真的就是我內心想要的那門語言嗎?
經過使用函數和宏不斷提升程序的抽象程度,用更精煉和直白的配置語言完成更高層次的開發需求。無論程序多複雜,只要正確的對函數進行命名,細緻的設計宏,就能讓個人配置文件始終簡單易懂。
堅持使用函數編程範式,儘可能不用有反作用和依賴全局變量的函數,除了迭代器以外。讓系統的每個組件都是單獨可測試的。(迭代器就是作一次列表解析, 絕對沒有反作用,是不可能的。)
通過屢次的研讀 Lisp 的書籍,我如今能夠確認,是的,沒錯。Common Lisp 就是那個能幫助我實現理想的語言。惟有 Common Lisp 能知足個人要求。