注册 登录 进入教材巡展
#

出版时间:2016-10

出版社:华中科技大学出版社

以下为《Ruby原理剖析》的配套数字资源,这些资源在您购买图书后将免费附送给您:
  • 华中科技大学出版社
  • 9787568022620
  • 191138
  • 2016-10
  • TP393.092.2
内容简介

  帕特里克·肖内西所著的《Ruby原理剖析》解开Ruby编程语言的魔法面纱。全书图文并茂、深入浅出地剖析了Ruby编程语言的核心工作原理。作者本着科学实证的精神,设计了一系列实验,帮助读者轻松了解这门编程语言的工作奥秘,包括Ruby如何用虚拟机执行代码,Ruby的垃圾回收算法,以及类和模块在Ruby内部的关系等。

目录
1 分词与语法解析
 1.1 词条:构成Ruby语言的单词
 1.2 语法解析:Ruby如何理解代码
  1.2.1 理解LALR解析算法
  1.2.2 真实的Ruby语法规则
 1.3 总结
2 编译
 2.1 Ruby 1.8没有编译器
 2.2 Ruby 1.9和Ruby 2.0引入了编译器
 2.3 Ruby如何编译简单脚本
 2.4 编译块调用
 2.5 本地表
  2.5.1 编译可选参数
  2.5.2 编译关键字参数
 2.6 总结
3 Ruby如何执行代码
 3.1 YARV内部栈和Ruby调用栈
  3.1.1 逐句查看Ruby如何执行简单脚本
  3.1.2 执行块调用
 3.2 访问Ruby变量的两种方式
  3.2.1 本地变量访问
  3.2.2 方法参数被看成本地变量
  3.2.3 动态变量访问
 3.3 总结
4 控制结构与方法调度
 4.1 Ruby如何执行if语句
 4.2 作用域之间的跳转
  4.2.1 捕获表
  4.2.2 捕获表的其他用途
 4.3 send指令:Ruby最复杂的控制结构
  4.3.1 方法查找和方法调度
  4.3.2 Ruby方法的11种类型
 4.4 调用普通Ruby方法
  4.4.1 为普通Ruby方法准备参数
 4.5 调用内建的Ruby方法
  4.5.1 调用attr_reader和attr_writer
  4.5.2 方法调度优化attr_reader和attr_writer
 4.6 总结
5 对象与类
 5.1 Ruby对象内部
  5.1.1 检验klass和ivptr
  5.1.2 观察同一个类的两个实例
  5.1.3 基本类型对象
  5.1.4 简单立即值完全不需要结构体
  5.1.5 基本类型对象有实例变量吗
  5.1.6 基本类型对象的实例变量保存在哪里
 5.2 RClass结构体内部有什么
  5.2.1 继承
  5.2.2 类实例变量vs类变量
  5.2.3 存取类变量
  5.2.4 常量
  5.2.5 真实的RClass结构体
 5.3 总结
6 方法查找和常量查找
 6.1 Ruby如何实现模块
  6.1.1 模块是类
  6.1.2 将模块include到类中
 6.2 Ruby的方法查找算法
  6.2.1 方法查找示例
  6.2.2 方法查找算法实践
  6.2.3 Ruby中的多继承
  6.2.4 全局方法缓存
  6.2.5 内联方法缓存
  6.2.6 清空Ruby的方法缓存
  6.2.7 在同一个类中include两个模块
  6.2.8 在模块中include模块
  6.2.9 Module#prepend示例
  6.2.10 Ruby如何实现Module#prepend
  6.2.11 在已被include的模块中增加方法
  6.2.12 在已被include的模块中include其他模块
  6.2.13 “被include的类”与原始模块共享方法表
 6.3 常量查找
  6.3.1 在超类中查找常量
  6.3.2 Ruby如何在父级命名空间中查找常量
 6.4 Ruby中的词法作用域
  6.4.1 为新类或模块创建常量
  6.4.2 在父命名空间中使用词法作用域查找常量
  6.4.3 Ruby的常量查找算法
  6.4.4 Ruby真实的常量查找算法
 6.5 总结
7 散列表:Ruby内部的主力军
 7.1 Ruby中的散列表
  7.1.1 在散列表中保存值
  7.1.2 从散列表中检索值
 7.2 散列表如何扩展以容纳更多的值
  7.2.1 散列冲突
  7.2.2 重新散列条目
 7.3 Ruby如何实现散列函数
  7.3.1 Ruby 2.0中的散列优化
 7.4 总结
8 Ruby如何借鉴Lisp几十年前的理念
 8.1 块:Ruby中的闭包
  8.1.1 Ruby如何调用块
  8.1.2 借用1975年的理念
 8.2 Lambda和Proc:把函数当做一等公民
  8.2.1 栈内存vs堆内存
  8.2.2 深入探索Ruby如何保存字符串的值
  8.2.3 Ruby如何创建Lambda
  8.2.4 Ruby如何调用Lambda
  8.2.5 Proc对象
  8.2.6 在同一个作用域中多次调用lambda
 8.3 总结
9 元编程
 9.1 定义方法的多种方式
  9.1.1 Ruby的普通方法定义过程
  9.1.2 使用对象前缀定义类方法
  9.1.3 使用新的词法作用域定义类方法
  9.1.4 使用单类定义方法
  9.1.5 在单类的词法作用域中定义方法
  9.1.6 创建Refinement
  9.1.7 使用Refinement
  9.1.8 顶级作用域中的self
  9.1.9 类作用域中的self
  9.1.10 元类作用域中的self
  9.1.11 类方法中的self
 9.2 元编程与闭包:eval、instance_eval和binding
  9.2.1 能写代码的代码
  9.2.2 使用binding参数调用eval
  9.2.3 instance_eval示例
  9.2.4 Ruby闭包的另一个重点
  9.2.5 instance_eval改变接收者的self
  9.2.6 instance_eval为新的词法作用域创建单类
  9.2.7 使用define_method
  9.2.8 充当闭包的方法
 9.3 总结
10 JRuby:基于JVM的Ruby
 10.1 使用MRI和JRuby运行程序
  10.1.1 JRuby如何解析和编译代码
  10.1.2 JRuby如何执行代码
  10.1.3 用Java类实现Ruby类
  10.1.4 使用-J-XX:+PrintCompilation选项
  10.1.5 JIT是否提升了JRuby程序的性能
 10.2 JRuby和MRI中的字符串
  10.2.1 JRuby和MRI如何保存字符串数据
  10.2.2 写时复制
  10.2.3 创建唯一且非共享的字符串
  10.2.4 可视化写时复制
  10.2.5 修改共享字符串更慢
 10.3 总结
11 Rubinius:用Ruby实现的Ruby
 11.1 Rubinius内核和虚拟机
  11.1.1 词法分析和解析
  11.1.2 使用Ruby编译Ruby
  11.1.3 Rubinius字节码指令
  11.1.4 Ruby和C++一起工作
  11.1.5 使用C++对象实现Ruby对象
  11.1.6 Rubinius中的(栈)回溯
 11.2 Rubinius和MRI中的数组
  11.2.1 MRI中的数组
  11.2.2 Rubinius中的数组
  11.2.3 阅读Array#shift源码
  11.2.4 修改Array#shift方法
 11.3 总结
12 MRI、JRuby、Rubinius垃圾回收
 12.1 垃圾回收器解决三个问题
 12.2 MRI中的垃圾回收:标记与清除
  12.2.1 空闲列表
  12.2.2 标记
  12.2.3 MRI如何标记存活对象
  12.2.4 清除
  12.2.5 延迟清除
  12.2.6 标记-清除的缺点
  12.2.7 观察MRI执行延迟清除
  12.2.8 观察MRI执行全回收
  12.2.9 解读GC分析报告
 12.3 JRuby和Rubinius中的垃圾回收
 12.4 复制垃圾回收
  12.4.1 碰撞分配
  12.4.2 半空间算法
  12.4.3 伊甸堆
 12.5 分代垃圾回收
  12.5.1 弱代假说
  12.5.2 为新生代使用半空间算法
  12.5.3 晋升对象
  12.5.4 成熟代对象垃圾回收
 12.6 并发垃圾回收
  12.6.1 当对象图改变时进行标记
  12.6.2 三色标记
  12.6.3 JVM中的三种垃圾收集器
  12.6.4 触发主收集
 12.7 延伸阅读
 12.8 总结
索引