前言


本书探索了这样几个主题:

  • 了解ruby的构造
  • 学会语言处理的一般知识
  • 学会如何阅读源代码(source code)

Ruby是松本行弘一手打造的一种面向对象语言。现在大家所看到的ruby是Ruby语言的官方实现,它的产生依赖于活跃的网络开发社区。 探明ruby内部结构是本书的第一目标,希望本书可以为大家展现ruby的全貌。

此外,Ruby的处理系统与一般计算机语言的处理系统关系密切,有许多类似的地方,比如hash表, 扫描器、解析器和评估的方法等等, 所有这些必要的内容都在其中有对应的实现。本书并不是一本讲解如何设计计算机语言的教科书,无法全面涵盖计算机语言设计领域的各种概念, 但会尽可能介绍语言处理系统的概貌(框架)。另外,书中加入了对Ruby语言的简要介绍,尽量让不了解Ruby的读者也能阅读本书。

很明显,前述目的的第一点和第二点是本书的主要目标。但是我最想强调的是第三点,也就是“学会如何阅读源代码”。 为什么需要学会阅读源代码呢?这里要说明一下。

平时总说,“为了能够熟练的编程,最好的方法的就是阅读别人的代码”。的确如此。不过,“实际怎样做”,很少有书回答这个问题。 讲解OS内核和计算机语言处理系统内部实现的书汗牛充栋,但这些书通常都是直接给出(内核或语言的)实现,也就是最终的答案,很少提及获得答案的过程, 显然,这是这些书考虑不周的地方。

对于会编程的人来说,阅读程序是一件非常自然的事情。实际上,阅读程序代码也很简单,不过,是不是生活在这个世界上的人都有闲暇去阅读程序代码呢? 我不这么认为。因为,阅读程序和编写程序这两件事几乎同样困难。

在本书中,我们并不是将ruby作为已知的东西来讲解,而是将其当作一个未知事物,尽可能将分析过程展现得生动一些。虽然我对Ruby语言实现有一定认识, 不过,执笔本书时,却不是完全理解ruby的内部实现。总之,我会尽可能从贴近读者的角度对ruby进行讲解。 将从始至终的分析过程和结果汇集在一起,这就是本书。

此外,ruby的作者matz为本书严把质量关,但是,我觉得在他对本书的检查,会让本书失去它原有的“生动”。所以matz的检查仅限于最终阶段。 这样一来,保留阅读ruby源代码的现场感的同时,质量也得到了保证。

说实话,本书介绍的内容并不简单。至少对象的本质就不是那么容易理解。或许,这正是本书有趣的地方。只对付一些弱于自己的对手是很无趣的, 没人喜欢解那些一眼就能看出答案的迷题,没人愿意读那些书到一半就能发现罪犯的侦探小说,穷尽能力解答问题才能获得真知。 本书是一本实践着“让笨蛋喜欢读”这样理想理论的书。“因为难而有趣”,如果通过阅读本书多一个人这么想,我也会觉得很高兴。

本书的目标读者


首先Ruby语言不作为必须的前提条件。但是为了讲解语言实现,无论如何要用到一些Ruby语言的知识,因此,添加了几个讲解的章节,内容很少。

最好有一些C语言的知识,能够在运行时通过malloc分配结构体创建链表和堆栈,用过几次函数指针,这样的程度就可以了。

再者,考虑到面向对象基础部分的解释并不深入,如果没用过一些面向对象的语言的话,阅读可能会比较吃力。注意,书中大量的使用了Java/C++作为例子。

结构组织


本书主要由4个部分组成。

第一部分 对象

第二部分 语法分析

第三部分 评估

第四部分 评估器的周边

每个部分的开始都会加入一个章节,适当补充一些的基础知识,这样,不了解计算机语言的机制和Ruby语言的人也可以阅读。

下面给出了四个主要部分的组成。说明后括号里的记号表明该章的难易程度。按照CBA的逐渐变难,S为最高难度。

第一部分 对象

第1章 谈谈阅读第一部分所需的Ruby基础知识(C)

第2章 讲解Ruby语言对象的具体内部构造(C)

第3章 探讨Hash表(C)

第4章 描述Ruby的类系统。如果觉得这章内容抽象的话,开始的时候可以只是浏览一遍。 (A)

第5章 看看掌管对象的生成和释放的垃圾回收机制(GC: Garbage Collection),底层系列故事的第一集。(B)

第6章 讲解全局变量,类变量,常量的实现。(C)

第7章 Ruby安全机制的大致框架。(C)

第二部分 语法分析

第8章 全面讨论阅读第二部分和第三部分所需的Ruby语言知识。(C)

第9章 讲解阅读语法文件所需的最低限度的yacc知识。(B)

第10章 解读解析器的构造和规则。(A)

第11章 探索解析器中的难点lex_state及其周边。这是本书最难的地方。(S)

第12章 总结第二部分,展开第三部分的话题。(C)

第三部分 评估

第13章 描述评估器的基本机制。(C)

第14章 解读评估器堆栈,它创建了Ruby主要的上下文。(A)

第15章 探索方法的查找和调用。(B)

第16章 Ruby的最大特征,挑战迭代器(iterator)的实现。(A)

第17章 讲解eval系列方法的实现。(B)

第四部分 模拟器及其周边

第18章 探讨运行时加载Ruby和C的程序库。(B)

第19章 作为核心的最后一章描述了线程的实现。(A)

环境


本书讲解的是ruby 1.7.3 2002-09-12版。如果需要,可以到 http://i.loveruby.net/ja/rhg 下载。 本书出版之前,已经在以下环境通过了编译,并确认了基本的操作。

BeOS 5 Personal Edition/i386
Debian GNU/Linux potato/i386
Debian GNU/Linux woody/i386
Debian GNU/Linux sid/i386
FreeBSD 4.4-RELEASE/Alpha
FreeBSD 4.5-RELEASE/i386
FreeBSD 4.5-RELEASE/PC98
FreeBSD 5-CURRENT/i386
HP-UX 10.20
HP-UX 11.00 (32bit mode)
HP-UX 11.11 (32bit mode)
Mac OS X 10.2
NetBSD 1.6F/i386
OpenBSD 3.1
Plamo Linux 2.0/i386
Linux for PlayStation2 Release 1.0
Redhat Linux 7.3/i386
Solaris 2.6/Sparc
Solaris 8/Sparc
UX/4800
Vine Linux 2.1.5
Vine Linux 2.5
VineSeed
Windows 98SE (Cygwin, MinGW+Cygwin, MinGW+MSYS)
Windows Me (Borland C++ Compiler 5.5, Cygwin, MinGW+Cygwin, MinGW+MSYS, Visual C++ 6)
Windows NT 4.0 (Cygwin, MinGW+Cygwin)
Windows 2000 (Borland C++ Compiler 5.5, Visual C++ 6, Visual C++.NET)
Windows XP (Visual C++.NET, MinGW+Cygwin)

网站


本书网站: [http://i.loveruby.net/ja/rhg], 网站上提供了附加的程序的信息、附加的文档以及勘错表。并且,也会渐渐的包含整本书的全部内容。