原创作者: 青木峰郎
阅读:3317次
评论:1条
更新时间:2011-05-26
本书有几个主题:
* 了解ruby的构造
* 学会语言处理的一般知识
* 学会如何阅读源代码(source code)
* 了解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++作为例子。
最好有一些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语言的人也可以阅读。
下面给出了四个主要部分的组成。说明后括号里的记号表明该章的难易程度。按照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)
* 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)
1 楼 yyyyy5101 2009-06-03 14:41