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

news2025/7/9 21:13:56

在这里插入图片描述

本书在线地址 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.coloradmin.cn/o/362705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何写新闻稿?写好新闻稿的技巧与步骤

新闻稿是传递新闻事件和信息的重要手段,是传媒工作中不可或缺的一部分。写好一篇新闻稿可以让受众了解更多信息,进一步提高他们的关注度。以下是一些写好新闻稿的技巧和步骤,帮助你有效地传达新闻。1、确定新闻的核心信息在开始写新闻稿之前&…

解决doc命令startup.bat运行不了tomcat并配置tomcat服务器(超详细)

一、本文主要解决两个问题: 使用dos命令 startup.bat来运行tomcat,发现运行不了配置tomcat服务器变量 二、问题说明 2.1、启动Tomcat服务器只配置path对应的bin目录是不行的。有两个环境变量需要配置: JAVA_HOMEJDK的根CATALINA_HOMETomca…

「TCG 规范解读」第10章 TPM工作组 保护你的数字环境

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…

项目管理中,项目经理需要具备哪些能力?

项目经理是团队的领导者,是带领项目团队对项目进行策划、执行,完成项目目标,对于项目经理来说,想要有序推进项目,使项目更成功,光有理论知识是不够的,也要具备这些能力: 1、分清主…

[ELasticSearch]-Logstash的使用

[ELasticSearch]-Logstash的使用 森格 | 2023年2月 介绍:Logstash在Elastic Stack中担当着ELK的工作,在本文主要阐述Logstash的处理流程以及一些应用案例。 文章目录[ELasticSearch]-Logstash的使用一、Logstash介绍1.1 What is Logstash?1.…

分享5款小众良心软件,好用到让人惊艳

目前win7渐渐退出视野,大部分人都开始使用win10了,笔者在日常的工作和使用中,为了能够让效率的大提升,下载了不少软件,以下的软件都是个人认为装机必备,而且都是可以免费下载,且没有插件的。 1…

Node-RED 3.0升级,新增特性介绍

前言 最近给我的树莓派上的Node-RED(以下简称NR)做了一下升级,从2.x升级到得了3.0。这是一个比较大的版本升级,在用户体验方面,NR有了有很大的提升。下面让我们一起来看一如何升级以及,3.0新增了那些特性 升级3.0 由于之前的NR是直接使用npm来进行安装的,所以此处升级…

库存管理系统-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

【案例6-1】 库存管理系统 【案例介绍】 1.任务描述 像商城和超市这样的地方,都需要有自己的库房,并且库房商品的库存变化有专人记录,这样才能保证商城和超市正常运转。 本例要求编写一个程序,模拟库存管理系统。该系统主要包…

Mybatis持久层框架 | Mapper加载方式、目录结构解析

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Mapper(resource、class、package)加载方式 resource方式加载 通过resource或url加载单个mapper,接口文件与映射文件不在同一路径下,只能用re…

Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理

前言 在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的。最经典的就是密码了。如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的。 那么我们就需要对这些铭文进…

【C++】内存管理知识

💙作者:阿润菜菜 📖专栏:C 本文目录 C/C内存区域分布 对比C语言内存管理的方式 C内存管理的方式 operator new与operator delete函数(new和delete实现的底层调用) new和delete的实现原理 malloc/free…

行为型设计模式之中介者模式

中介者模式 中介者模式又称为调解者模式或调停者模式,属于行为型模式。它用一个中介对象封装系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介者模式包装了一系列对…

「TCG 规范解读」第11章 TPM工作组 TCG算法注册表

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…

allure简介

allure介绍allure是一个轻量级,灵活的,支持多语言的测试报告工具多平台的,奢华的report框架可以为dev/qa提供详尽的测试报告、测试步骤、log也可以为管理层提供high level统计报告java语言开发的,支持pytest,javaScript,PHP等可以…

springcloud入门+组件使用

代码gitee地址:https://gitee.com/bing520/springcloud 集群 cluster: 同一中软件服务的多个服务节点共同为系统提供服务过程,称之为软件服务集群。 分布式 distribute: 不同软件集群共同为一个系统提供服务,这个系统…

图解LeetCode——剑指 Offer 48. 最长不含重复字符的子字符串

一、题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 二、示例 2.1> 示例 1: 【输入】 "abcabcbb" 【输出】 3 【解释】 因为无重复字符的最长子串是 "abc",所以其长度为 3。 2.2> 示…

深入浅出深度学习Pytroch

本文将以通俗易懂的方式,深入浅出地为您揭开深度学习模型构建与训练的面纱: 深度学习数据data模型model损失函数loss优化optimizer可视化visualizer深度学习 数据data 模型model 损失函数loss 优化optimizer 可视化visualizer深度学习数据data模型m…

IP-GUARD离线的客户端如何更新策略?

在控制台上对指定客户端设置好策略后,在计算机树中找到该客户端右键-“策略导出”,导出相应的ipz格式的文件拿到离线的客户端上,客户端运行PolicyImportTool.exe工具,把ipz策略文件导入即可。

软件测试学习什么?好就业么

软件测试需要学习测试环境、网络环境、windows环境、数据库管理、编程技巧(java编程设计,脚本语言,设计工具,XML编程、软件测试技术,测试理论,方法,流程,文档写作,测试工…

Blazor入门100天 : 身份验证和授权 (5) - 本地化资源

目录 建立默认带身份验证 Blazor 程序角色/组件/特性/过程逻辑DB 改 Sqlite将自定义字段添加到用户表脚手架拉取IDS文件,本地化资源freesql 生成实体类,freesql 管理ids数据表初始化 Roles,freesql 外键 > 导航属性完善 freesql 和 bb 特性 本节源码 https://github.com/…