(cons '(〇 . 前言) 《爲本身寫本-Guile-書》)

爲何寫這本書?

物理學家 John Archibald Wheeler 曾言:『要想了解一個新的領域,就寫一本關於那個領域的書』。程序員

直到我開始寫這本可能會半途夭折的書時,Scheme 對我而言依然是一個新『領域』。雖然此前斷斷續續的看過一些講述 Scheme 語言的書,例如《The Little Scheme》,《Teach Yourself Scheme in Fixnum Days》以及《計算機程序的構造與解釋》(即 SICP,Structure and Interpretation of Computer Programs),可是我卻一直都沒有掌握它,或者說我一直都沒學會如何用它來寫現實中的程序。編程

我檢討了一下。耗費了許多時間去了解某種事物,結果卻未能達到目的,這隻能證實我不是真的須要瞭解它,於是致使我對它所做的任何觀察與分析都是無心義的。要讓對事物的觀察與分析變的有意義,必須建構與該事物相關的一些問題。從而將瞭解該事物的過程轉化爲解決這些問題的過程。segmentfault

因此,我開始寫這本書。編程語言

爲何是 Guile?

Guile 是 Scheme 語言的一種實現,也能夠稱爲一種 Scheme『方言』。雖然 Scheme 是有標準的,可是各家的實現都夾帶了一些私貨。Scheme 語言自己是 Lisp 語言的一種方言。函數

Guile 的解釋器的執行效率在衆多 Scheme 語言的解釋器中可能屬於末流。不過,我仍是選擇了它做爲本書的主角。由於我喜歡它的設計定位——嵌入應用程序,使應用程序具有腳本擴展能力。工具

有些語言與 Guile 的設計定位類似,可是它們缺少 Scheme 語言裏那些簡潔、優美的特性。例如,大部分編程語言都不會支持像 empty?string=?string->listi-am-super-man 這樣的變量或函數命名,可是 Scheme 支持——它甚至容許使用中文對變量或函數進行命名。大部分編程語言的宏語法的表現力遠遜於 Scheme,有的語言乾脆不支持宏。對於基於一種通用的編程語言定義一種領域專用語言而言,宏是很是有用的功能。雖然像 Scheme 這樣的語言,可能不太適合構建大型程序,可是 Guile 原本也沒有將本身定位爲可獨立擔當構建大型程序之重任的編程語言。學習

Guile 解釋器的執行效率雖然不是很理想,可是這些年也不斷在進步着——2.0 版本比 1.8 版本提高約 30%,而 2.2 版本又比 2.0 版本提高約 17%。ui

就這樣,我說服了本身,選擇了 Guile。在本書中,若無特別說明,凡我言及 Guile,它與 Scheme 同義。spa

這本書的主題是什麼?

以前我曾用 C 語言寫了一個文式編程工具,後來又以爲我『設計』的文式編程語法有些問題。如今,我打算將原來的全部設計推倒重來,而且將編程語言由 C 換爲 Guile。所以,對於 Guile 的學習,我不只要解決爲它寫一本書的問題,還要解決如何用它構建一個可用的文式編程工具的問題。設計

我喜歡文式編程這種來自史前的編程方式。所謂文式編程,是將程序文檔與程序源碼統一於某種元文檔——可從中提取所需的程序代碼以進行程序的構建,也能夠將其轉化爲排版語言以得到排版規範的程序文檔。文式編程,本質上只一種註解程序的方式——用寫篇文章或寫本書的方式來註解一個程序,或者在認可非形式化的人類語言與形式化的編程語言存在對立性的前提下,嘗試對兩者進行統一。

偉大的計算機科學家 Edsger Wybe Dijkstra 曾說過,『除數學外,對本土語言的異常的精通會是一個計算機程序員的最寶貴的財富』。從這一點來看,文式編程應該是一種頗有意義的編程方式。

Edsger Wybe Dijkstra

與 C 語言相比,使用 Guile 來實現這個新的文式編程工具,最大的好處在於 Guile 直接支持 UTF-8 文本的處理。以前用 C 語言實現的那個文式編程工具,在文本處理方面,我不得不依賴 GLib 庫提供的一些函數。

面向的讀者

這本書的第一個讀者確定是我。可是,這個世界上可能會有一些人的志趣與我相同,那麼這本書也是爲他們而寫。

在衆多編程語言中,我對 C 最爲熟悉。這本書在講述 Guile 的一些知識時,爲了便於理解,有時我會用 C 代碼來詮釋 Guile 代碼。這意味着,若是你決定閱讀這本書,對 C 語言有一些瞭解可能會更好一些。可是這不是必須的,一方面你也能夠爲本身寫一本不含 C 語言的 Guile 書,另外一方面有不少 Scheme 教材能夠幫助你理解這本書中的全部 Guile 代碼——我在寫這本書的過程當中也須要從它們那裏學會 Guile。

(cdr《爲本身寫本-Guile-書》)

相關文章
相關標籤/搜索