展开全部

主编推荐语

大师级程序员思维方式,Ruby之父全面公开新语言开发的全过程。

内容简介

本书由Ruby之父松本行弘在《日经Linux》杂志上的连载整合而成,主要介绍了新语言Streem的设计与实现过程。作者从设计Streem这门新语言的动机开始讲起,由浅入深,详细介绍了新语言开发中的各个环节,以及语言设计上的纠结与取舍,其中也不乏对其他编程语言的调查与思考,向读者展示了创建编程语言的乐趣。

目录

  • 版权信息
  • 内容提要
  • 译者序
  • 前言
  • 第1章 创造一门什么样的语言
  • 1-1 自己创造编程语言的意义
  • 进入创造编程语言的世界
  • 微机杂志的时代
  • 个人创造编程语言的现状
  • 提升个人品牌
  • 乐趣第一
  • 为什么创造新编程语言的人不多
  • 没必要想得很难
  • 1-2 语言处理器的结构
  • 语言和语言处理器
  • 语言处理器的结构
  • 语言处理器的构成
  • 编译器的构成
  • 小结
  • 1-3 虚拟机
  • 用软件实现的CPU来运行
  • 为什么以前的Ruby很慢
  • 在虚拟机上灵活运用缓存
  • 虚拟机的优点和缺点
  • 虚拟机的实现技术
  • CISC在虚拟机上有优势
  • 栈与寄存器
  • 指令格式
  • 直接跳转
  • 小结
  • 1-4 编程语言设计入门(前篇)
  • 创造人气语言的方法
  • 心里的疑问
  • 自己想用就足够了
  • 1993年有很多空闲时间
  • 图书的策划成为契机
  • 对shell脚本不满意
  • Python过于普通
  • 让脚本语言支持面向对象
  • 对代码块结构的表现方式的思索
  • 自动缩进的课题
  • 自制Emacs的语言模式
  • 是else if还是elsif还是elif
  • 开始实现
  • 人气在于细节
  • 1-5 编程语言设计入门(后篇)
  • 设计原则
  • 变量名
  • 让局部变量变得更简洁
  • 给脚本语言增加面向对象功能
  • 单一继承对多重继承
  • 单一继承的问题
  • Mix-in
  • Ruby的模块
  • 错误处理
  • 对异常的关键字有讲究
  • 代码块
  • 反复推敲语法结构
  • 扩大了使用范围
  • 语言设计的秘诀
  • 小结
  • 第2章 新语言Streem的设计与实现
  • 2-1 抽象的并发编程
  • 多核化接过大旗
  • 并行与并发编程
  • UNIX的fork可以进行复制
  • 创建进程的开销很大
  • 进程间通信困难
  • 通信开销小
  • 并发控制变得复杂
  • Actor模型
  • Erlang的“进程”
  • 容易共享数据
  • Go的goroutine
  • Clojure的STM
  • 引入数据库的概念
  • 小结
  • 2-2 新语言Streem
  • 现在的shell脚本还不够理想
  • 21世纪的脚本语言
  • 表达式
  • 赋值
  • 多条语句
  • Streem程序的例子
  • 不可变
  • 单词计数
  • 套接字编程
  • 配管工作
  • 管道的合并
  • 通道缓冲
  • 广播
  • 小结
  • 2-3 首先开发语法检查器
  • 任务构成模式
  • 生产者—消费者模式
  • 轮询调度模式
  • 广播模式
  • 汇总模式
  • 请求—应答模式
  • 从反复试验的地方开始开发
  • Streem语言也从语法检查器开始开发
  • 软件构成
  • 词法分析器的开发
  • 语法定义的编写
  • lex定义的语法
  • yacc脚本的语法
  • 用巴科斯范式定义语法
  • Streem的语法
  • 小结
  • 2-4 事件循环
  • main的原型
  • 管道的构造
  • 自行开发事件循环
  • I/O事件的检测
  • epoll系统调用
  • 事件队列
  • 处理函数的模式
  • 原型的代码
  • 今后的方向
  • 小结
  • 2-5 多线程与对象
  • 多线程化
  • 尝试多核化
  • 再次挑战多核化
  • 带优先级的队列
  • 队列的实现
  • 优先级的实现
  • 并发控制
  • 队列为空时的处理
  • 多线程处理的调试
  • 用结构体表示对象
  • GC
  • 被“搁置”的语法分析也取得了进展
  • 小结
  • 2-6 缓存与符号
  • 用缓存高速访问数据
  • 设置多级缓存
  • 数据更新时的问题
  • 对管道的再次思考
  • 在同一个内核中运行速度更快
  • 要意识到缓存的存在
  • Lisp的符号
  • 初学者的困惑
  • 其他语言中相当于符号的概念
  • Streem中实现符号功能的方法
  • 修改字符串生成函数
  • 线程问题
  • 符号垃圾问题
  • 符号的GC
  • 小结
  • 2-7 转换为抽象语法树
  • 支持符号语法的新方法
  • 语法分析动作
  • 转换为抽象语法树
  • 用结构体表示语法树的节点
  • 直接执行语法树
  • 遍历抽象语法树
  • 灵活应用递归调用
  • 用开源的方式开发
  • 理想的语言处理器
  • 今后的计划
  • 小结
  • 2-8 局部变量与异常处理
  • 回到30年前
  • 没有局部变量的世界
  • 局部变量的引入
  • 局部变量的实现
  • 在Streem中实现局部变量
  • 局部变量的嵌套
  • 作用域嵌套的特殊情况
  • 闭包(函数闭包)
  • 闭包的实现
  • Streem的闭包
  • 编译时检查
  • 错误检查
  • 让“异常”产生
  • Swift的Optional
  • 忽视错误
  • Streem的异常处理的实现
  • 小结
  • 第3章 设计面向对象功能
  • 3-1 各种各样的面向对象
  • Simula的面向对象
  • 开发者是和蔼可亲的人
  • Smalltalk的面向对象
  • 用Smalltalk表达LOGO
  • Ruby与Smalltalk相似吗
  • Actor的面向对象
  • Erlang也采用了Actor模型
  • CLOS的面向对象
  • 独立于类的方法
  • 大规模的方法组合
  • Ruby也借鉴了部分功能
  • C++的面向对象
  • Java的面向对象
  • Ruby的面向对象
  • 3-2 Streem的面向对象
  • Streem中需要动态绑定
  • 广义函数
  • 减少类功能的增加所带来的副作用
  • 不容易实现的Refinement
  • 广义函数与Refinement
  • 名称冲突
  • Streem的对象
  • 方法调用链
  • Lisp-1和Lisp-2
  • 小结
  • 3-3 再看Streem的语法
  • shift/reduce conflict
  • 声明和执行语句
  • 删除break语句
  • 修改if语句
  • 还有一些含混的地方
  • 增加右侧赋值
  • 修改函数调用
  • 函数的直接调用
  • Lisp-1和Lisp-2
  • Lisp-2的优缺点
  • Streem和Lisp-2
  • 小结
  • 3-4 模式匹配
  • Erlang的模式匹配
  • 与递归组合使用会很方便
  • 使用尾递归进行优化
  • 通过case和if语句实现模式匹配
  • 通过match函数进行模式匹配
  • 变量模式
  • 通配符模式
  • 字面量模式
  • 数组模式
  • 可变长度数组模式
  • 结构体模式
  • 命名空间模式
  • 小结
  • 第4章 实现Streem的对象
  • 4-1 套接字编程
  • Streem的套接字API
  • Streem网络服务器
  • Streem网络编程的客户端
  • Streem的功能扩展
  • 什么是套接字
  • 客户端套接字
  • 套接字的使用方法(客户端)
  • 服务器端套接字
  • 套接字的使用方法(服务器)
  • 任务的创建
  • 小结
  • 4-2 基本数据结构
  • 可以用指针进行运算
  • 自由转换的联合体
  • 从数据结构看C的特点
  • 应该把整数型合并为一个
  • 浮点数也是一种数据类型
  • OCaml的基本数据结构
  • Streem不需要链表
  • Streem的其他数据结构
  • 本节修改的地方
  • 小结
  • 4-3 对象表示与NaN Boxing
  • 洁净室设计
  • 引用的表示方法
  • 现在的Streem用结构体来表示对象
  • IEEE 754
  • 特殊的浮点数
  • NaN Boxing
  • 布尔值的保存方法
  • 整数的保存方法
  • 浮点数的情况
  • 指针的保存方法
  • 字符串的保存方法
  • 字符串的GC
  • 在Streem中引入NaN Boxing
  • GC的实现
  • 小结
  • 4-4 垃圾回收
  • 自动释放内存空间
  • 追踪法和引用计数法
  • 标记清除法
  • 复制法
  • GC的性能指标
  • 辅助的GC技巧
  • 分代GC
  • 记录老年代对新生代对象的引用
  • 增量GC
  • 引用计数法
  • Streem的GC
  • 旧的对象不能引用新的对象
  • GC的实现
  • 未来GC的实现
  • 小结
  • 4-5 无锁算法
  • 并发运行的陷阱
  • 引入并发控制
  • 锁的问题
  • 什么是无锁
  • CPU拥有原子操作指令
  • 无锁队列
  • 保证处理顺序
  • 并发控制
  • 无锁运算
  • 小结
  • 第5章 强化流编程
  • 5-1 管道编程
  • 数据统计
  • Web服务与管道
  • HTTP的软件构成
  • 服务器端架构
  • 电子游戏的示例
  • 不可变与状态
  • 引入嵌入式数据库的kvs
  • kvs的实现
  • khash
  • 使用khash实现kvs
  • 并发控制
  • 使用锁进行并发控制
  • 事务的实现
  • 小结
  • 5-2 管道的构成要素
  • 管道的构成要素
  • 全局范围重命名
  • 增加调试用的strm_p()
  • 管道编程的模式
  • 使用归约进行单词计数
  • 流的分叉与合流
  • 需要进行流量控制
  • 降低生产者的优先级
  • 不考虑分配时的滞留
  • 在目前使用的队列中增加对内存的考虑
  • 修改为优先考虑内核的灵活使用
  • 改善任务队列的实现
  • CAS
  • 小结
  • 5-3 CSV处理功能
  • RFC4180
  • CSV的变体
  • 探索GitHub
  • 许可证
  • csv_parser
  • Streem数组
  • CSV格式
  • CSV的任务化
  • 检查字段数
  • 多行记录
  • 字段类型
  • 表头处理
  • 错误运行
  • 小结
  • 5-4 时间表示
  • 时间与时刻
  • 用字符串表示时刻
  • 时刻的表示方法
  • 时刻类型的结构体
  • UTC
  • 时刻类型数据的生成
  • 时差的计算方法
  • 时刻操作的实现
  • 用任意时区表示时刻
  • 时刻字面量
  • 时刻字面量的实现
  • CSV的时刻支持
  • 小结
  • 5-5 统计基础的基础
  • 总和与平均数
  • 总和计算中的陷阱
  • Kahan算法
  • 平均数和方差(标准差)
  • 流算法
  • 用Streem计算标准差
  • 偏差值
  • 排序
  • 很难进行大规模的排序
  • 排序的应用
  • 抽样
  • 小结
  • 5-6 随机数
  • 真随机数和伪随机数
  • 伪随机数的评估
  • 线性同余法
  • 梅森旋转法
  • Xorshift
  • 伪随机数的初始值
  • /dev/random
  • 伪随机数的基准测试
  • Streem的随机数功能
  • 随机数的各种类型
  • 小结
  • 5-7 数据流图
  • GUI和CUI(或者叫CLI)
  • stag
  • 画面构成
  • 转义字符串
  • 获取窗口大小
  • 移动光标
  • 绘制标题
  • 绘制图表
  • graph_bar()函数
  • 调整窗口大小
  • 光标的事后处理
  • 今后的课题
  • Sixel图像库
  • 小结
  • 后记
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社·图灵出品

图灵社区成立于2005年6月,由人民邮电出版社投资控股,以策划出版高质量的科技书籍为核心业务,主要出版领域包括计算机、电子电气、数学统计、科普等,通过引进国际高水平的教材、专著,以及发掘国内优秀原创作品等途径,为目标读者提供一流的内容。