Crafting interpreters 中文翻译,持续修正

news/2024/4/27 12:22:56/文章来源:https://blog.csdn.net/xuejianxinokok/article/details/129146691

在这里插入图片描述

本书在线地址 http://craftinginterpreters.com/

感谢作者

作者用近 4 年的时间持续创作和改进本书,并把其 Web 版本公开在网上。这本纸质书于今年 7 月出版,立刻在 Hacker News 等网络媒介上引起关注和讨论。

书中作者首先定义了一个动态类型的语言 Lox。Lox 并不是一个“简单”的 toy 语言,它支持了 function、closure、class、inheritance、gabage collection 等高级特性。然后作者用两种不同的实现方式(Tree-walk Interpreter 和 Bytecode VM)给我们展示了如何 Parsing 以及实现这些高级特性。

  1. Tree-walk Interpreter. 作者认为上来直接用 C 语言实现 Bytecode VM 对于读者来说有点不友好,所以先用 Java 实现了一个 Tree-walk Interpreter。这部分主要 focus 在概念上,实现了一个简单易理解,但不是那么高效的 Interpreter。

  2. Bytecode VM. 在本书的第二部分,做着用 C 语言实现了一个基于 Bytecode VM 的解释器。包含了Pratt Parser、编译 Lox 代码到 VM 字节码、VM、gabage collection、optimization 等。

很佩服作者把一个复杂的 topic 分解成一步一步可以独立运行的模块的能力。本书共有 30 章,几乎每一章结尾时都有一个可以运行的解释器,只是后面的章节会在前面的章节上加一些 feature。这个说起来简单,但是如何分析 dependency、分解 feature、重构等还是比较挑战的。

最后,书中的每个插图都是作者亲手画在纸上,然后扫描的电脑上的。

目录

0.前言

奉献 Dedication

致谢 Acknowledgements

一.欢迎

1.介绍 Introduction

设计说明:名称中包含什么? Design Note: What’s in a Name?

2.概览 A Map of the Territory

3.Lox 语言 The Lox Language

设计说明:表达式和语句 Design Note: Expressions and Statements

二.基于树遍历的解释器 A TREE-WALK INTERPRETER

4.扫描 Scanning

设计说明:隐式分号 Design Note: Implicit Semicolons

5.代码表示 Representing Code

6.解析表达式 Parsing Expressions

设计说明:逻辑与历史 Design Note: Logic Versus History

7.表达式求值 Evaluating Expressions

设计说明:静态和动态类型 Design Note: Static and Dynamic Typing

8.语句和状态 Statements and State

设计说明:隐式变量声明 Design Note: Implicit Variable Declaration

9.控制流 Control Flow

设计说明:一勺语法糖 Design Note: Spoonfuls of Syntactic Sugar

10.函数 Functions

11.解析和绑定 Resolving and Binding

12.类 Classes

设计说明:原型和电源 Design Note: Prototypes and Power

13.继承 Inheritance

三.字节码虚拟机 A BYTECODE VIRTUAL MACHINE

14.字节码块 Chunks of Bytecode

设计笔记:测试你的语言 Design Note: Test Your Language

15.虚拟机 A Virtual Machine

设计说明:基于寄存器的字节码 Design Note: Register-Based Bytecode

16.按需扫描 Scanning on Demand

17.编译表达式 Compiling Expressions

设计说明:只是解析 Design Note: It’s Just Parsing

18.值的类型 Types of Values

19.字符串 Strings

设计说明:字符串编码 Design Note: String Encoding

20.哈希表 Hash Tables

21.全局变量 Global Variables

22.局部变量 Local Variables

23.跳转控制 Jumping Back and Forth

设计说明:考虑到有害的 Goto Design Note: Considering Goto Harmful

24.函数调用 Calls and Functions

25.闭包 Closures

设计说明:关闭循环变量 Design Note: Closing Over the Loop Variable

26.垃圾收集 Garbage Collection

设计说明:分代垃圾回收 Design Note: Generational Collectors

27.类和实例 Classes and Instances

28.方法和初始化器 Methods and Initializers

设计说明:新奇预算 Design Note: Novelty Budget

29. 超类 Superclasses

30. 优化 Optimization

四.后记

A1.附录1:Lox 语法 Lox Grammar

A2.附录2:生成的语法树类 Generated Syntax Tree Classes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72357.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

棋牌类游戏测试用例怎么写?我敢打赌你绝对不知道

目录 一.登陆 二.大厅 三.小游戏 四.银行功能 五.其他按钮 总结感谢每一个认真阅读我文章的人!!! 重点:配套学习资料和视频教学 一.登陆 1&#xff0e…

使用拦截器实现登录状态检测(以及在注册拦截器类时要使用ioc中的拦截器类)

拦截器 preHandler(HttpServletRequest request, HttpServletResponse response, Object handler) 方法在请求处理之前被调用。该方法在 Interceptor 类中最先执行,用来进行一些前置初始化操作或是对当前请求做预处理,也可以进行一些判断来决定请求是否…

【MyBatis】源码学习 04 - 从 MapperMethod 简单分析一条 SQL 的映射操作流程

文章目录前言参考目录学习笔记1、测试代码说明2、binding 包的主要功能3、获取 Mapper 接口实例过程4、SQL 语句执行流程4.1、方法调用器4.2、MapperMethod 绑定方法4.2.1、SqlCommand4.2.2、MethodSignature4.3、MapperMethod#execute前言 本文内容对应的是书本第 13 章的内容…

循环、函数、对象——js基础练习

目录 一、循环练习 1.1 取款机案例 1.2 九九乘法表 1.3 根据数据生成柱形图 1.4 冒泡排序 1.6综合大练习 二、函数 2.1 转换时间案例 三、对象 1. 遍历数组对象 2. 猜数字游戏 3. 生成随机颜色 4. 学成在线页面渲染案例 一、循环练习 1.1 取款机案例 // 准备一个…

电商项目之Feign与Dubbo技术选型

文章目录1 问题背景2 前言3 思路4 Feign与Dubbo的区别5 总结6 真实案例1 问题背景 电商项目,B端以consul作为注册中心。重构了一个营销服务,以Nacos作为注册中心。B端需要调用营销服务。关于远程调用框架,营销服务用了Dubbo,而B端…

黑马程序员-Linux网络编程-01

目录 课程链接 协议 分层模型 网络传输数据封装流程 以太网帧和ARP请求 IP协议 TCP协议 BS与CS模型对比 套接字 网络字节序 IP地址转换函数 sockaddr地址结构 socket模型创建流程 socket()和bind() listen()和accept()​ 课程链接 03-协议_哔哩哔哩_bilibili 协…

java并发笔记

文章目录HashMapput方法resize方法ConcurrentHashMapput方法initTable方法sizectl代表什么:扩容计数器ConcurrentHashMap的读操作会阻塞嘛AQS唤醒线程时,AQS为什么从后往前遍历?AQS为什么要有一个虚拟的head节点AQS为什么用双向链表&#xff…

万字C语言学习笔记,带你学C带你飞(四)

文章目录单链表typedef1、基础typedef2、进阶typedef共用体枚举类型1、声明枚举类型2、定义枚举变量位域位操作文件的写入与写出C语言学习笔记,记录所学,便于复习。 由于篇幅过大,考虑到观感,准备分多篇记录。学习视频链接&#x…

Vue3.x使用Echarts绘制世界地图并进行定点

Vue3.x使用Echarts绘制世界地图并进行定点 一、需求 绘制世界地图并根据返回经纬度数据进行定点将定点数据展示在世界地图内 二、解决 绘制世界地图,利用Echarts图表组件时间,需要世界地图Geojson数据的可以在资源中下载世界地图Geojson数据-Javascr…

2022FALL嵌入式大纲

Jamslade 部分内容有遗漏,可结合 超文本 2022FALL《嵌入式系统原理》期末复习笔记 一起观看 文章目录嵌入式系统片上系统实时系统硬实时系统软实时系统伪指令DMA传输波特率单/半双/全双工通信;对齐/非对齐访问地址译码代码临界区RISCBIOSUARTSPII2CWDTRO…

2.5|shell简介|Linux支持的网络协议|Linux的网络服务

shell简介shell是一种具备特殊功能的程序,它是介于使用者和Unix/Linux操作系统内核间的一个接口。操作计算机需要通过命令(command)或是程序(program);程序需要编译器(compiler)将程…

东南大学研究生英语18-19秋试卷解析

写在前面 作者:夏日 博客地址:https://blog.csdn.net/zss192 本文为东南大学研究生英语上学期18-19年期末试卷解析,答案来源于 ChatGPT International Conference 单选题 1.A presenter is supposed to do the following in an introdu…

【数据结构趣味多】八大排序

目录 1.直接插入排序 基本思想 代码实现: 直接插入排序的特性总结: 2.希尔排序 基本思想 代码实现 (递归实现) 希尔排序的特性总结 3.直接选择排序 基本思想 代码实现: 直接选择排序的特性总结 4.堆排序 …

Springboot 全局异常处理类

全局异常处理 在开发过程中,不管是Dao、Servie、Controller,层都有可能发生异常,对于异常处理,通常是try-catch或者直接throw,这会让try-catch的代码在代码中任意出现,系统的代码耦合度高&…

深入Spring底层透析bean生命周期及循环引用的醍醐灌顶篇

目录前言一.Bean的生命周期1.1 Bean的实例化阶段1.2 Bean的初始化阶段(重点)1.3 Bean的完成阶段二.循环引用问题(面试常问题)三.Spring的三级缓存(重点来了)四.完整的Spring IoC整体总结前言 本篇是接着bean的创建基本…

2023/02/21 事件循环-eventloop 宏任务 微任务 讲解

1 JS是单线程 js是单线程的。也就是说,同一个时间只能做一件事。作为浏览器脚本语言,与它的用途有关。JavaScript的主要用途是和用户互动,以及操作DOM,这决定了它只能是单线程。 js是单线程的。也就是说,同一个时间只…

非常优秀的网站设计案例,设计师必备

厚积才能薄发,一个优秀的设计师的天性一定是想要获得更多网站设计灵感,擅于为新项目寻找创意切入点、搜索设计参考资源、最新的设计趋势。今天为大家带来了一组免费可商用的网站设计案例,通过这些网站设计案例,你可以获得&#xf…

CF707C Pythagorean Triples 题解

CF707C Pythagorean Triples 题解题目链接字面描述题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2样例 #3样例输入 #3样例输出 #3样例 #4样例输入 #4样例输出 #4样例 #5样例输入 #5样例输出 #5提示思路代码实现题目 链接 http…

华为OD机试 - 最短耗时(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…

算法笔记(十一)—— 并查集、KMP

并查集 支持集合快速合并 所有数据生成各自的集合,需要提供查询两个两素是不是属于一个集合,和集合合并操作,并查集能够在常数时间级别上对两个操作进行实现 1. 构造结构(数据指针),将自己的指针指向自己…