Crafting interpreters 中文翻译(全),持续修正

news/2024/4/27 2:06:41/文章来源: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_72381.aspx

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

相关文章

23年PMP真的值得考吗?分析+资料分享

我觉得,如过是真的想学习项目管理,或者工作要求考PMP,招聘要求又的确“PMP证书”优先,那考一个是划算的,毕竟在项目管理这一块,PMP是专业和知名度最高的证书了。 它是由美国项目管理协会(PMI)在全球范围内推…

数组-二分查找-搜索插入位置/在排序数组中查找元素的第一个和最后一个位置/x 的平方根/有效的完全平方数

二分查找 35搜索插入位置 https://leetcode.cn/problems/search-insert-position/submissions/ class Solution:def searchInsert(self, nums: List[int], target: int) -> int:l 0r len(nums)-1# // 整数除法 int /浮点数除法while(l<r):mid l (r - l)//2if nums…

二叉树——找树左下角的值

找树左下角的值 链接 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 递归法 二叉树的 最底层 最左…

一维,二维差分の详解(简单易懂)

一,差分定义差分,就是前缀和的逆运算。二,具体过程1.一维差分例题构造差分数组首先给定一个原数组a&#xff1a;a[1], a[2], a[3],,,,,, a[n];然后我们构造一个数组b &#xff1a; b[1], b[2], b[3],,,,,, b[i];使得 a[i] b[1] b[2] b[3] ,,,,,, b[i]也就是说&#xff0c;…

Redis分布式锁实现及使用

文章目录分布式锁全局ID生成器一人一单实现超卖问题一人一单分布式锁Redis setnx实现分布式锁Redis在业内解决秒杀等业务场景有非常广的应用&#xff0c;如何设计实现一个分布式锁是解决超卖、一人一单问题非常重要… 分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的…

CRM客户管理系统的作用和四大优势

CRM系统是一种以客户管理为核心&#xff0c;帮助营销、销售、服务部门实现业务自动化&#xff0c;为企业进行客户数据的收集、管理和分析&#xff0c;提高客户体验和留存&#xff0c;实现以客户为中心的管理模式的企业管理工具。那么&#xff0c;企业为什么要使用CRM系统&#…

Javaweb之mybits入门

2.1 Mybatis概述 2.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为MyBatis 。2013年11月迁移到Github …

XSS注入进阶练习篇(三) XSS原型链污染

XSS原型链污染1.原型链的概念1.1 构造函数的缺点1.2 prototype 属性的作用1.3 原型链1.4 constructor属性1.5 prototype和__proto__2. 原型链污染2.1 原型链污染是什么&#xff1f;2.2 原型链污染的条件2.3 原型连污染实例2.3.1 hackit 20182.3.2 challenge-04223.总结1.原型链…

新项目分析

1&#xff1a;数据类型处理 # sep‘\s‘ 这是正则表达式&#xff0c;通过一定规则的表达式来匹配字符串用的 \s 表示空白字符&#xff0c;包括但不限于空格、回车(\r)、换行(\n)、tab或者叫水平制表符(\t)等&#xff0c;这个根据编码格式不同代表的含义也不一样&#xff0c;感…

Codeforces Round #851 (Div. 2) A-E

题目链接&#xff1a;https://codeforces.com/contest/1788 A - One and Two 解题思路&#xff1a;将数组分成两半&#xff0c;两边二一样多就行了。 #include<bits/stdc.h> using namespace std; #define inf 0x3f3f3f3f #define lson l,mid,rt<<1 #define rso…

Kaggle系列之识别狗的品种类别(深度残差网络模型ResNet-34)

我们来到这个比赛页面&#xff1a;https://www.kaggle.com/competitions/dog-breed-identification这个数据集的目标是Determine the breed of a dog in an image(确定图像中狗的品种)我们先下载数据集解压之后来看下(当然不手动解压&#xff0c;也可以使用)&#xff0c;这里我…

记住这12个要点,你也能打造出让HR和技术主管前一亮的前端简历

第一篇章&#xff1a;吸引HR 如果你想在众多简历中脱颖而出&#xff0c;需要注意以下几点&#xff1a; 1、突出你的亮点&#xff1a; 给你的简历一个吸引人的文件命名和头部&#xff0c;突出你的关键技能和经验。 2、采用简洁的语言&#xff1a; 用简单易懂的语言来描述你的…

笔记本cpu温度多少正常?温度过高的4个常见原因

电脑CPU指的是中央处理器&#xff0c;它与电脑运行速度的快慢存在很大关系。如果电脑的处理器温度过高&#xff0c;就会影响我们电脑的运行速度&#xff0c;甚至出现蓝屏、卡顿的情况。 那么&#xff0c;对于电脑来说&#xff0c;笔记本cpu温度多少正常&#xff1f;有什么原因…

macOS Big Sur 11.7.4(20g1220)With OpenCore 0.8.9正式版 and winPE双引导分区原版镜像

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。镜像特点完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要&#xff0c;可以自行直接替换…

KT1025A蓝牙音频芯片_立讯KC认证FCC测试现场整改记录

目录 一、问题说明简介 测试机构立讯反馈&#xff0c;客户寄的样板进行无线KC【韩国】测试不过&#xff0c;体现在如下两点 蓝牙部分接收杂散不过 蓝牙的发射功率偏低 2.1 单独只给蓝牙部分供电的测试图片--OK 2.2 单独给整板供电--但是使用电池供电 2.3 单独给整板供电-…

关于机器人坐标系变换的笔记

ROS TFros中&#xff0c;可以通过TF Tree来进行获取 机器人不同坐标系之间的转换关系&#xff0c;命令如下&#xff1a;rosrun tf tf_echo base_link head_link1意思为&#xff0c;从源坐标系base_link&#xff0c;到目标坐标系head_link1的变换关系&#xff0c;结果如下所示。…

Crafting interpreters 中文翻译,持续修正

本书在线地址 http://craftinginterpreters.com/ 感谢作者 作者用近 4 年的时间持续创作和改进本书&#xff0c;并把其 Web 版本公开在网上。这本纸质书于今年 7 月出版&#xff0c;立刻在 Hacker News 等网络媒介上引起关注和讨论。 书中作者首先定义了一个动态类型的语言 …

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

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

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

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

【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 章的内容…