Ruby原理剖析(中文版)_第1页
Ruby原理剖析(中文版)_第2页
Ruby原理剖析(中文版)_第3页
Ruby原理剖析(中文版)_第4页
Ruby原理剖析(中文版)_第5页
已阅读5页,还剩359页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ruby原理剖析(中文版)目录1分词与语法解析3

1.1词条:构成Ruby语言的单词5

1.2语法解析:Ruby如何理解代码13

1.2.1理解LALR解析算法14

1.2.2真实的Ruby语法规则21

1.3总结31

2编译33

2.1Ruby1.8没有编译器34

2.2Ruby1.9和Ruby2.0引入了编译器35

2.3Ruby如何编译简单脚本37

2.4编译块调用41

2.5本地表49

2.5.1编译可选参数52

2.5.2编译关键字参数53

2.6总结57

3Ruby如何执行代码59

3.1YARV内部栈和Ruby调用栈60

3.1.1逐句查看Ruby如何执行简单脚本62

3.1.2执行块调用65

3.2访问Ruby变量的两种方式72

3.2.1本地变量访问72

3.2.2方法参数被看成本地变量75

3.2.3动态变量访问76

3.3总结86

4控制结构与方法调度89

4.1Ruby如何执行if语句90

4.2作用域之间的跳转93

4.2.1捕获表94

4.2.2捕获表的其他用途96

4.3send指令:Ruby最复杂的控制结构99

4.3.1方法查找和方法调度99

4.3.2Ruby方法的11种类型100

4.4调用普通Ruby方法102

4.4.1为普通Ruby方法准备参数103

4.5调用内建的Ruby方法104

4.5.1调用attr_reader和attr_writer105

4.5.2方法调度优化attr_reader和attr_writer106

4.6总结110

5对象与类113

5.1Ruby对象内部114

5.1.1检验klass和ivptr115

5.1.2观察同一个类的两个实例117

5.1.3基本类型对象118

5.1.4简单立即值完全不需要结构体119

5.1.5基本类型对象有实例变量吗120

5.1.6基本类型对象的实例变量保存在哪里122

5.2RClass结构体内部有什么125

5.2.1继承128

5.2.2类实例变量vs类变量129

5.2.3存取类变量131

5.2.4常量134

5.2.5真实的RClass结构体135

5.3总结140

6方法查找和常量查找143

6.1Ruby如何实现模块145

6.1.1模块是类145

6.1.2将模块include到类中147

6.2Ruby的方法查找算法148

6.2.1方法查找示例149

6.2.2方法查找算法实践151

6.2.3Ruby中的多继承152

6.2.4全局方法缓存153

6.2.5内联方法缓存154

6.2.6清空Ruby的方法缓存155

6.2.7在同一个类中include两个模块155

6.2.8在模块中include模块157

6.2.9Module#prepend示例158

6.2.10Ruby如何实现Module#prepend161

6.2.11在已被include的模块中增加方法164

6.2.12在已被include的模块中include其他模块164

6.2.13“被include的类”与原始模块共享方法表166

6.3常量查找168

6.3.1在超类中查找常量169

6.3.2Ruby如何在父级命名空间中查找常量170

6.4Ruby中的词法作用域171

6.4.1为新类或模块创建常量172

6.4.2在父命名空间中使用词法作用域查找常量173

6.4.3Ruby的常量查找算法175

6.4.4Ruby真实的常量查找算法177

6.5总结178

7散列表:Ruby内部的主力军181

7.1Ruby中的散列表182

7.1.1在散列表中保存值183

7.1.2从散列表中检索值185

7.2散列表如何扩展以容纳更多的值188

7.2.1散列冲突188

7.2.2重新散列条目189

7.3Ruby如何实现散列函数195

7.3.1Ruby2.0中的散列优化202

7.4总结203

8Ruby如何借鉴Lisp几十年前的理念207

8.1块:Ruby中的闭包208

8.1.1Ruby如何调用块210

8.1.2借用1975年的理念212

8.2Lambda和Proc:把函数当做一等公民219

8.2.1栈内存vs堆内存220

8.2.2深入探索Ruby如何保存字符串的值220

8.2.3Ruby如何创建Lambda223

8.2.4Ruby如何调用Lambda226

8.2.5Proc对象227

8.2.6在同一个作用域中多次调用lambda232

8.3总结234

9元编程237

9.1定义方法的多种方式239

9.1.1Ruby的普通方法定义过程239

9.1.2使用对象前缀定义类方法241

9.1.3使用新的词法作用域定义类方法242

9.1.4使用单类定义方法244

9.1.5在单类的词法作用域中定义方法245

9.1.6创建Refinement246

9.1.7使用Refinement248

9.1.8顶级作用域中的self250

9.1.9类作用域中的self251

9.1.10元类作用域中的self252

9.1.11类方法中的self253

9.2元编程与闭包:eval、instance_eval和binding255

9.2.1能写代码的代码255

9.2.2使用binding参数调用eval257

9.2.3instance_eval示例259

9.2.4Ruby闭包的另一个重点260

9.2.5instance_eval改变接收者的self262

9.2.6instance_eval为新的词法作用域创建单类262

9.2.7使用define_method266

9.2.8充当闭包的方法266

9.3总结268

10JRuby:基于JVM的Ruby271

10.1使用MRI和JRuby运行程序272

10.1.1JRuby如何解析和编译代码274

10.1.2JRuby如何执行代码276

10.1.3用Java类实现Ruby类278

10.1.4使用-J-XX:+PrintCompilation选项281

10.1.5JIT是否提升了JRuby程序的性能283

10.2JRuby和MRI中的字符串284

10.2.1JRuby和MRI如何保存字符串数据284

10.2.2写时复制286

10.2.3创建唯一且非共享的字符串288

10.2.4可视化写时复制290

10.2.5修改共享字符串更慢291

10.3总结293

11Rubinius:用Ruby实现的Ruby295

11.1Rubinius内核和虚拟机296

11.1.1词法分析和解析298

11.1.2使用Ruby编译Ruby299

11.1.3Rubinius字节码指令300

11.1.4Ruby和C++一起工作302

11.1.5使用C++对象实现Ruby对象303

11.1.6Rubinius中的(栈)回溯305

11.2Rubinius和MRI中的数组307

11.2.1MRI中的数组307

11.2.2Rubinius中的数组309

11.2.3阅读Array#shift源码311

11.2.4修改Array#shift方法312

11.3总结315

12MRI、JRuby、Rubinius垃圾回收317

12.1垃圾回收器解决三个问题319

12.2MRI中的垃圾回收:标记与清除320

12.2.1空闲列表320

12.2.2标记321

12.2.3MRI如何标记存活对象323

12.2.4清除323

12.2.5延迟清除324

12.2.6标记-清除的缺点325

12.2.7观察MRI执行延迟清除327

12.2.8观察MRI执行全回收328

12.2.9解读GC分析报告329

12.3JRuby和Rubinius中的垃圾回收332

12.4复制垃圾回收333

12.4.1碰撞分配333

12.4.2半空间算法334

12.4.3伊甸堆336

12.5分代垃圾回收337

12.5.1弱代假说337

12.5.2为新生代使用半空间算法338

12.5.3晋升对象338

12.5.4成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论