新手上路
1小时前
主楼
来源:https://github.com/aalhour/awesome-compilers
这是一份面向编译器、解释器、运行时和虚拟机方向的精选资源清单,覆盖学习路径、经典教材、论文、课程、工具框架、真实项目与社区入口。
这是一份面向编译器、解释器、运行时和虚拟机方向的精选资源清单,覆盖学习路径、经典教材、论文、课程、工具框架、真实项目与社区入口。
学习资料 / 书籍 / 通识总览
- Computer Systems: A Programmer’s Perspective - 计算机系统的一般处理,包括编译器、解释器和运行时。
- Elements of Computing Systems - 如何构建计算机,从与门一直到编译器和操作系统。
- Structure and Interpretation of Computer Programs - 通过在Scheme中构建Scheme解释器来研究使用Scheme的计算构建块!
学习资料 / 书籍 / 入门书籍
- Basics of Compiler Design - 简要介绍基本概念。
- Beautiful Racket - 如何使用 Racket 制作自己的编程语言。
- Build Your Own Lisp - 在 1000 LoC 中学习 C 并构建您自己的 Lisp 编程语言。
- Compilers: Principles, Techniques and Tools - 龙之书.编译器构建的经典教材。
- Crafting Interpreters - 一站式学习(几乎)您需要学习的一切内容,以构建解释性的、功能齐全的、高效的脚本语言。
- Create Your Own Programming Languauge - 通过示例驱动的方法,通过视频教程和源代码项目构建您自己的编程语言。
- Engineering a Compiler - 关于编译器构造的现代教科书,涵盖 SSA-Form 和代码生成的最新研究。
- Essentials of Programming Languages - 编程语言的基本概念,重点是语义、解释和 CPS(连续传递风格)。
- Language Implementation Patterns - 使用 ANTLR 了解构建编程语言背后的模式并自己构建解释器。
- Modern Compiler Implementation in ML - 使用 ML(元语言)构建编译器,并使用一本涵盖所有编译器阶段的最佳教科书之一。本书附带了参考编译器实现来指导您的软件开发过程。
- Programming Language Pragmatics - 语言设计和实现的集成处理,示例采用 ARM 和 x86 64 位等著名架构。
- Programming Languages: Application and Interpretation - 对使用增量方法构建程序的主题进行了精彩的介绍。错误也包含在内,以突出关键概念。
- Programming Languages: Theory and Practice - 卡内基梅隆大学教授的_编程语言_课程的讲义收集,最适合作为该主题的介绍性文本。
- Project Oberon - 操作系统和编译器的设计。
- The BEAM Book - ERTS(Erlang 运行时系统)和 BEAM 虚拟机的描述。
- Virtual Machines - 关于如何构建虚拟机的好书,特别适合构建编程语言的主题。
- Virtual Machines: Versatile Platforms for Systems and Processes - 关于虚拟机主题的重要教科书,研究了使用虚拟机技术的各个学科,例如:操作系统和编程语言。
- Write a Compiler in Go - 通过构建 Compiler 项目对 Go 编程语言及其生态系统进行著名介绍。
- Write an Interpreter in Go - 《Write a Compiler in Go》一书的后继者,但这本书构建了一个解释器项目。
- Writing Compilers and Interpreters: A Software Engineering Approach - 如何使用 Java 构建编译器,这本书是为软件工程师量身定制的。
- Writing Interpreters and Compilers for the Raspberry Pi Using Python - 如果您想学习如何编写解释器和编译器,同时了解 Python、Python 字节码、汇编语言和动态类型的工作原理,那么这本书就是适合您的。
学习资料 / 书籍 / 进阶书籍
- Advanced Compiler Design and Implementation - 深入探讨高级设计主题,例如:中间表示、SSA、代码优化和各种处理器架构。
- Advanced Design and Implementation of Virtual Machines - 逐步全面介绍虚拟机架构、主题和算法的设计。包含书中算法的插图和实现。
- Advanced Topics in Types and Programming Languages - 对类型系统的深入研究,涵盖但不限于以下主题:精确类型分析;用于低级语言的类型系统和 ML 风格类型推断的高级技术。
- A Retargetable C Compiler: Design and Implementation - 检查 Icc 的设计和实现,Icc 是一款生产质量的可重定向编译器,由 AT&T 贝尔实验室针对 ANSI C 编程语言设计。
- Building an Optimizing Compiler - 填补了代码优化领域的空白。本书为通用现代 RISC 处理器的彻底优化器、代码生成器、调度器和寄存器分配器提供了高级设计。
- Compiling with Continuations - 介绍 CPS(连续传递样式)作为编译器中用于进行优化和程序转换的中间表示形式。
- Design Concepts in Programming Languages - 对编程语言设计中使用的技术和思想的系统探索,涵盖的主题包括:操作和指称语义技术、动态语义技术和静态语义技术。
- Instruction Level Parallelism - 本书精确地阐述并简化了指令级并行(ILP)编译技术的呈现。
- Linkers and Loaders - 关于链接和加载的编译时和运行时过程的权威文本。
- Optimizing Compilers for Modern Architectures - 根据现代高性能 CPU 架构的最新成果和突破优化程序生成。
- Parsing Techniques: A Practical Guide - 有关解析算法和技术的权威指南,还包含形式语法和解析理论的介绍。
- The Garbage Collection Handbook: The Art of Automatic Memory Management - 关于垃圾收集主题的活生生的经典和权威文本,还涵盖了根据 CPU 架构的现代进步进行的基于硬件的优化。
- The Implementation of Functional Programming Languages - 关于实现函数式语言的经典教科书,涵盖结构化类型、模式匹配语义、Lambda 演算转换、多态类型检查和许多其他主题。
- The SSA Book - 唯一深入研究SSA-form(静态单一作业表)的书籍格式。
- Types and Programming Languages - 从类型理论的角度全面介绍类型系统和编程语言的主题。
- Warren's Abstract Machine: Prolog in Haskell - Prolog 逻辑编程中的 WAM 简介。
学习资料 / 论文
- An Evil Copy: How the Loader Betrays You - 关于动态加载相关的安全问题。
学习资料 / 课程
- Compilers Construction, Cambridge - 剑桥大学编译器构建课程简介。
- Compiler Construction for Undergrads, RICE University - RICE 大学的编译器构建和语言翻译简介课程。
- Design and Construction of Compilers, University of Texas - 编译器的设计和构建,包括词法分析、解析、代码生成技术、错误分析和简单代码优化。
- DSL Design and Implementation Summer School - 洛桑联邦理工大学主办的 DSL 设计与实现主题暑期学校项目。
- Foundations of Programming Languages - 从形式的角度来看,现代编程语言的设计、定义、实现和使用的基础概念。
- Nand2Tetris: How to Build a Computer from First Principles, Part 2 - Nand2Tetris 课程的第二部分涵盖了基本语言设计和基本编译器构造概念以及许多其他基础主题。
- NPTEL's Principles of Compiler Design Course - NPTEL 的编译器设计入门课程。
- NPTEL's Compiler Design Course - 比他们的《编译器设计原理》课程稍微高级一点,在很大程度上涵盖了 SSA 表格。
- Programming Languages: Part A, by Grossman - 由 3 部分组成的课程系列的第 1 部分介绍编程语言的基本概念,重点关注函数式编程。
- Programming Languages: Part B, by Grossman - 由 3 部分组成的课程系列的第 2 部分介绍编程语言的基本概念,重点关注函数式编程。
- Programming Languages: Part C, by Grossman - 由 3 部分组成的课程系列的第 3 部分介绍编程语言的基本概念,重点关注函数式编程。
- Types, Logic, Semantics, and Verification from Oregon University's Summer School - 暑期学校项目包括由国际公认的编程语言和形式推理研究领域的领导者进行的 80 分钟讲座。
- Virtual Machines and Managed Runtimes, UCB CS294 - 伯克利大学虚拟机和托管运行时入门课程。
- Virtual Machines Summer School 2016 (VMSS 2016) - VMSS 是一个暑期学校项目,旨在概述该领域,针对早期职业研究人员。
学习资料 / 演讲与会议 / 频道
- Curry On! Conference - 编程语言会议。
学习资料 / 演讲与会议 / 视频
- How to Build a Virtual Machine - Terence Parr 通过在您眼前从头开始构建虚拟机,让您了解虚拟机背后的核心机制。这和他为雷诺汽车制作的商业翻译器是同一种。
- MetaScala: A Tiny DIY JVM - Metascala 是一个用 Scala 编程语言编写的小型元循环 Java 虚拟机 (JVM)。
- One VM to Rule Them All, One VM to Bind Them - 松露技术教程。
- Programming Should Eat Itself - StrangeLoop 谈论反射式编程和 Kenichi Asai 的黑色编程语言。
- Single Static Assignment Form Seminar - SSA Form、其下的编译器优化及其在程序分析和验证等其他领域的应用介绍研讨会。
- The Most Beautiful Program Ever Written - William Byrd 谈用 15 行 Lisp 编写的 Lisp 解释器。
学习资料 / 文章
- Graal and Truffel - 默默无闻的研究项目可以从根本上加速编程语言设计的创新。
- LLVM Architecture - 摘自《开源应用程序架构》一书的章节。
- LLVM for Graduate Students - 使用 LLVM 编译器基础架构进行研究的简介。
学习资料 / 教程
- A Beginner's Guide to Linkers - 帮助 C 和 C++ 程序员了解链接器功能的基本原理的教程。
- Hindley-Damas-Milner Tutorial - 使用 Hindley-Damas-Milner 算法对基本函数语言进行类型检查的详细记录演练。
- Lisperator - 如何用 JavaScript 实现编程语言。
- Little Lisp Interpreter - 支持函数调用、lambda、let、ifs、数字、字符串、一些库函数以及不到 120 行 JavaScript 的列表的解释器。
lis.py, v1: (How to Write a (Lisp) Interpreter (in Python)) - Peter Norvig 编写简单 Lisp 解释器的教程。lis.py, v2: An ((Even Better) Lisp) Interpreter (in Python) - Peter Norvig 的后续教程,让lis.py变得更好。- Project: A Programming Language - 《Eloquent JavaScript》一书第 11 章,第二版。
- Writing a Language in Truffel - 使用 Truffel 的解释器开发教程,作者:Cristian Esquivias。
学习资料 / 社区讨论
- Can we stop recommending the Dragon Book, please? - StackExchange 线程批评 Dragons Book 支持替代方案。
- How to Write a Compiler - Reddit 上的文章讨论。
工具与框架 / 语言无关工具
- B3: The Bare Bones Backend - WebKit 针对包含类 C 代码的过程优化 JIT 编译器。
- Capstone - 轻量级多平台、多架构反汇编框架,绑定多种著名编程语言。
- Keystone - 轻量级多平台、多架构汇编器框架,绑定到各种著名的编程语言。
- LLILCL - 适用于。NET Core 的基于 LLVM 的编译器后端。
- LLVM - LLVM 编译器后端框架。
- MicroVM - 基于 MuVM 规范的编程语言开发“Mu”框架。
- Movfuscator Compiler -
M/o/Vfuscator将程序编译成“mov”指令,并且仅编译“mov”指令。 - QBE: The Quick Backend - 基于 SSA 的纯 C 嵌入式编译器后端。
- Rubinius - 编程语言开发平台。
- Summus - 使用 LLVM 作为后端的基本、可重用、编译器前端实现。
- ZetaVM - 动态编程语言的多语言平台。
工具与框架 / C / C++
- AsmJIT - 适用于 C++ 的完整 x86/x64 JIT 和远程汇编器。
- GCC - GNU 编译器集合(C 作为后端)。
- LCC - lcc 可重定向 ANSI C 编译器(C 作为后端)。
- libFirm - C 库,提供基于图形的中间表示、优化和适合在编译器中使用的汇编代码生成。
- libJIT - 独立于任何特定字节码、语言或运行时的通用即时编译器功能的库。
- myJIT - 用于在运行时生成和执行机器代码的库。
- OrangeC - Win32 C11/C++2014编译器和工具链。
- PCC - 便携式 C 编译器(C 作为后端)。
- Ragel - Ragel 状态机编译器。
- TCC - Tiny C 编译器(C 作为后端)。
工具与框架 / CLR / .NET
- Cecil - 用于生成和检查 ECMA CIL 格式的程序和库的库。
- DotNetPELib - 用于在 C++11 中读写。net 程序集的库。
- ILSpy - .NET反编译器。
- Reflector - .NET反编译器。
- Reflexil - 汇编代码编辑器,可作为其他。NET/CLR 工具的插件使用。
工具与框架 / D 语言
- dunnart - LALR(1) 解析器生成器。
- FancyPars-lite - 快速解析器生成器。
- libdparse - 允许构建词法分析器和解析器的库。包含 D 语言本身的词法分析器和解析器。
- llvm-d - LLVM 的 D 绑定。
- Pegged - 设计、测试和生成 PEG 语法的解析器。
工具与框架 / Go
- goyacc - YACC 在 Go 中的实现。标准 LALR(1) 解析器生成器。
- LLVM Go binding - 官方 Go LLVM 绑定。
工具与框架 / Graal
- Graal - 高性能多语言运行时。
- Graal Core - 编译器和 Truffle 部分评估器。
- Graal VM - Graal的多语言VM发行版。
工具与框架 / Haskell
- Hoopl - 高阶优化库。
- llvm-general - LLVM 的 Haskell 绑定。
工具与框架 / JavaScript
- IRHudra - 用于显示 V8 和 Dart VM 优化编译器使用的中间表示的工具。
- JISON - JavaScript 的上下文无关语法解析器生成器。
- Nearley - 简单、快速、强大的 JavaScript 解析器工具包。
- Ohm - 用于构建解析器、解释器、编译器等的库和语言。
- PEG.js - JavaScript 的简单解析器生成器。
工具与框架 / JVM
- ANTLR - 用于读取、处理、执行或翻译结构化文本或二进制文件的解析器生成器。
- BYAAC/J - BYACC/Java 是 Berkeley v 1.8 YACC 兼容 Java 解析器生成器的扩展。
- CGLIB - 用于生成和转换 Java 字节代码的高级 API 库。
- FCP JVM - 用于生成符合 JDK v1.5+ 规范和 Dalvik VM 的 Java 字节代码的 JVM 后端。
- JavaCC - Java 编译器构建和解析器生成器工具包。
- JavaCPP Presets for LLVM - 用于轻松与 LLVM API 交互的库。
- JFlex - JFlex 是一个用于 Java 的词法分析器生成器,具有完整的 Unicode 支持。
- JLex - JLex是一个词法分析器生成器,可以与CUP结合使用。
工具与框架 / Kotlin
- The Whimsy Compiler Framework - Kotlin 编译器框架研究项目。
工具与框架 / Python
- AST - Python内置的抽象语法树包。
- Dis - Python 内置的反汇编程序包。
- Parsing - 实现 LR(1) 解析器生成器以及 CFSM 和 GLR 解析器驱动程序的纯 Python 模块。
- PLY - Python的lex和yacc解析工具的实现。
- PyParsing - 创建和执行简单语法的替代方法,与传统的 lex/yacc 方法或使用正则表达式相比。
- RPLY - 将 PLY 项目移植到 RPython。
- RPython - RPython是一个用于实现动态语言的框架。
工具与框架 / Rust
- Combine - Rust 解析器组合器库。
- IronLLVM - Rust 的安全 LLVM 绑定。
- LALRPOP - Rust 的 LR(1) 解析器生成器。
- Nom - 解析器组合器框架。
- PEG - PEG 解析器生成器。
- Pest - PEG 解析器生成器。
- RLS - Rust 语言服务器实现(又名 RLS)。
编译器与解释器 / 严肃项目
- Babel.js - 下一代 JavaScript 编译器。
- BOLT - 二进制优化和布局工具。
- ChezScheme's Compiler - ChezScheme 语言编译器。
- ELENA Compiler - 埃琳娜编程语言。
- Eta' Compiler - 基于 JVM 的 Eta 编程语言编译器。
- Frege's Compiler - 基于 JVM 的 Frege 编程语言编译器。
- Gluon's Compiler - 用 Rust 编写的嵌入式语言编译器。
- HHVM - 用于运行 Hack 和 PHP 编写的程序的虚拟机。
- Lua's Interpreter - 官方 Lua 语言解释器。
- Mirah's Compiler - 基于 JVM 的 Mirah 编程语言编译器。
- P Lang - P 编程语言运行时。
- Roslyn - .NET“Roslyn”编译器平台。
- Simple-MSIL-Compiler - 编译为 CLR 的 C 编译器。
- Zig's Compiler - Zig 语言编译器。
编译器与解释器 / 教学与玩具项目
- Akilang - 使用 Python 和 LLVM 构建的简单语言编译器。
- amacc - 小型 C 编译器为 Arm 架构生成 ELF 可执行文件。
- Black - 反射编程语言“Black”的方案解释器,作者:Kenichi Asai。
- C4 - C 语言的 4 个函数。
- CarpVM - 用 C 语言实现实验性 VM。
- Charly - 用 Crystal 编写的动态类型语言的解释器。
- Dale - Lisp 风格的 C:一种系统编程语言。
- EasyLang - 简易编程语言/VM。
- Eschelle - 具有 VM 和 JIT 的开源跨平台多范式语言。
- Gecho - C 中的简单堆栈语言实现。
- gocaml - Go 和 LLVM 中的最小函数式编程语言实现。
- gone - 名为 Gone 的小型编程语言的编译器,使用 Python 3.6、SLY 和 llvmlite 实现。作为 2018 年 1 月 编写编译器课程 的一部分开发,由 David Beazly 监督。
- Hython - Haskell 支持的 Python 3 解释器。
- llgo - 用 Go 编写的 LLVM 的 Go 前端。
- MAL - Make a Lisp - 以 64 种语言实现的受 Clojure 启发的 Lisp 解释器。
- MetaScala - Scala 中的 Metacircular JVM 实现。
- mini-js - 1K LoC 中的实验性自托管 JavaScript 编译器。
- MunVM - C 语言的 Lua 虚拟机和编译器。
- MY-BASIC - 具有现代范式的 C 语言嵌入式 BASIC 方言解释器。
- oberonc - 适用于 Oberon-07 编程语言的单通道自托管编译器。它针对 JVM。
- Poprc - Popr 语言的编译器。
- PyCOOLC - 用 Python 3 编写的 COOL 编程语言编译器。
- RabbitVM - 基于 RISC 的 C 语言 VM 实现。
- Squint - 用于教育编译器生成基于堆栈的程序集的窥孔优化器。
- StackVM - 具有集成 VRAM 显示器的虚拟机。
- stack_cpu - 堆栈机模拟器。
- The Super Tiny Compiler - JavaScript 中的小型教育编译器项目。
- tinyc.c - C 中的 Tiny-C 语言编译器。
- tisp - 《时间就是空间》编程语言解释器。
- Ultra Tiny Compiler - 另一个微型编译器,代码不到 90 行。
运行时与虚拟机
博客
- LLVM Weekly - 关于 LLVM 的每周通讯。
社区
- /r/Compilers - 有关编译器理论和发展的 Reddit 子社区。
- /r/ProgrammingLanguages - Subreddit 社区,致力于讨论编程语言、编程语言理论、设计、语法和编译器。
垂直专题
- miniKanren.org - miniKanren 和 microKanren 的论文、演讲和实施。