我的雲端生活網 - Life+

Wednesday, February 11, 2009

系統的擴充

〈駭客與畫家〉的作者 Paul Graham (http://www.paulgraham.com/)說, Lisp 是威力很大的電腦程式語言。在他的另一本著作 "ANSI Common Lisp" 說明「為何要用 Lisp」,他指出一項有關於系統擴充能力的有趣觀點: Lisp 容許使用者擴充語言。

他說,系統的建構過程有從上到下(top-down)與從下向上(bottom-up)等二種方向,而用 Lisp 寫軟體既是從上到下,也是從下向上的過程。撰寫一則函數,就是將語言擴充了,而系統的其他層面站在這個擴充層面上,再建構上去。有個好例子是 Emacs,是 Lisp 寫的,容許使用者寫一個設定檔名為 ".emacs",可設定 Emacs 的使用選項設定與外掛模組。 .emacs 的內容也是標準的 Lisp 程式。 Lisp 將程式表達為資料結構,於是可用程式產生程式,以及用程式讀取程式而變成新的程式。很多程式人員需要這項功能,這項功能稱為「巨集」。

這在 C/C++/VB/Java/JavaScript/.Net 系列 所撰寫的軟體中非常罕見。很少看到一件 C 軟體,上面搭載 C 直譯器,容許使用者(不是開發者,是使用者)在上面寫 C 程式。在這些語言中,程式人員只思考語言容許做的事情,而不能思考語言不能做的事情。在 Lisp,程式人員可以思考語言不能做的事情,並且將 Lisp 擴充到可以做那些事情的程度。

雖然跟我們學習的項目有所區別,我相當有意願使用這類語言建立實用系統。

請參考 Paul Graham 的書籍:

  • 〈駭客與畫家〉第十二章。
  • "ANSI Common Lisp," Section 1.1-1.2.

No comments:

Blog Archive