(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-书》)

相关文章
相关标签/搜索