松本行弘_编程语言的设计与实现 - (EPUB全文下载)
文件大小:2.87 mb。
文件格式:epub 格式。
书籍内容:
版权信息
书名:松本行弘 : 编程语言的设计与实现
作者:[日] 松本行弘
ISBN:978-7-115-51616-9
本书由北京图灵文化发展有限公司发行数字版。版权所有,侵权必究。
您购买的图灵电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
图灵社区会员 clp96(26234020@qq.com) 专享 尊重版权
版权声明
译者序
前言
第 1 章 创造一门什么样的语言
1-1 自己创造编程语言的意义
进入创造编程语言的世界
微机杂志的时代
个人创造编程语言的现状
提升个人品牌
乐趣第一
为什么创造新编程语言的人不多
没必要想得很难
1-2 语言处理器的结构
语言和语言处理器
语言处理器的结构
语言处理器的构成
编译器的构成
(1) 词法分析
(2) 语法分析
(3) 代码生成
(4) 优化
小结
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 函数进行模式匹配
变量模式
通配符模式
............
书籍插图:
以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。
书云 Open E-Library » 松本行弘_编程语言的设计与实现 - (EPUB全文下载)