EOPL是一本怎樣的書?和SICP如何比較?

Essentials of Programming Languages (EOPL) , 作者 Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes.


差不多把這本書看完了。總得來說挺有趣的一本書,前提是你得懂一些Scheme。不過Scheme也挺容易學會的。裡面是各種小的解釋器,基於書上的代碼parser的部分基本可以不用擔心(sllgen)。

習題裡面都是給語言增加一些feature,大部分兩星的習題花時間都能解決。

讀完當然有收穫,理解了continuation,在語言層面實現了一個簡單的多線程支持,實現了各種type checker, 實現了module,實現了OO。 之前覺得裡面的LET語言看起來是個玩具,我最近才發現這貨的語法和OCaml太相似。

有了這些解釋器的代碼折騰,遠比閱讀理論書籍好玩。

如果需要參考,可以看看我的習題代碼: chenyukang/eopl 路 GitHub

相比SICP, SICP所涉及的面更廣,而EOPL主要是關於編程語言的設計和實現。和SICP一樣,這書要花時間去做後面的習題才更有收穫。


好書,用scheme寫很多迷你語言的解釋器,講清楚了不少PL概念。

從第三章直接起看就好。另外要注意一下他寫解釋器用到了define-datatype和cases兩個非標準的scheme宏,其實就是用scheme實現了algebraic data type/pattern matching,如果有一點ml/haskell基礎的話很好理解。這樣做的好處是你不需要用很多predicate來判斷一個值的可能類型,然後用一個let把裡面的數據搞出來,少寫了不少boilerplate。不過第一次看EOPL時看得一頭霧水就是因為這個。。。


兩本都是值得一讀的好書。相信只要你真的「讀懂」了其中一本,讀另一本也就很輕鬆了。

SICP更流行一些,不過我更喜歡 D.Friedman 的 EOPL。

EOPL前後看了三遍,SICP的書只粗看了一下,不過MIT是有SICP講座視頻的,講師就是兩位作者,有時間可以一看。

EOPL的preface是 Hal Abelson 寫的,SICP的作者之一。

這幫喜歡scheme的,思想體系應該都差不多,但 Friedman 更擅長將複雜的概念和思想以簡單的方式表達出來(從他寫的那幾本大象書可見一斑)。

如作者所寫,「Our goal is to provide a deep, working understanding of the essential concepts of programming languages」 。

從書的章節編排上來說,作者也是深思熟慮的。一定要把每個章節都吃透,並且完成習題,舉一反三。

這樣,這本書啃下來後,對於初學者來說,肯定可以起到 "change your perspective" 的作用。在學習新的語言的時候,不會糾結於其 concrete syntax 和 representation,而是把握住essential。

在項目應用的時候有創建DSL 或者 mini language的思路和能力,從而簡化問題,實現更好的抽象。


對寫解釋器不太熟練的話,這本書還是比較難的,習題是又多又麻煩.

樓上兩位都是大神


推薦閱讀:

淺嘗The Little Prover一書, 重逢Chez Scheme
怎麼理解從lambda運算元到實際的函數式程序設計語言?
相比 Scheme 與 Common Lisp,Clojure 有哪些坑?
Haskell 和 Scheme, 哪一個更適合用於生產環境?
SICP 1.16

TAG:書籍 | 編程 | Lisp | Scheme | SICP |