awesome-compilers
by aalhour
Curated list of awesome resources on Compilers, Interpreters and Runtimes
AI summary
Compiler toolkit
A curated collection of resources and learning materials for building compilers, interpreters, and runtimes.
- stars
- 9K
- forks
- 651
- watching
- 294
- awesome lists
- 2
- entries
- 344
What's in the list
344 links in 85 sections, with live GitHub stats.activeno commit in 2y
Books
- Computer Systems: A Programmer’s Perspective
General treatment of Computer Systems including Compilers, Interpreters and Runtimes
- Elements of Computing Systems
How to build a computer from Nand Gates all the way to Compilers and Operating Systems
- Structure and Interpretation of Computer Programs
Study the building blocks of computation using Scheme by building a Scheme interpreter in a Scheme!
Books / Structure and Interpretation of Computer Programs
- HTML5/EPUB version
Other editions:
Books
- Basics of Compiler Design
Provides a short treatment of the basic concepts
- Beautiful Racket
How to make your own Programming Language with Racket
- Build Your Own Lisp
Learn C and build your own Lisp Programming Language in 1000 LoC
- Compilers: Principles, Techniques and Tools
The Dragons Book. A classic textbook on Compiler Construction
- Crafting Interpreters
An all-stop-shop for learning (nearly) everything you need to learn to build an interpreted, full-featured, efficient scripting language
Books / Crafting Interpreters
- HN
Discussions:
Books
- Create Your Own Programming Languauge
Example-driven approach to building your own programming language with video tutorials and source code projects
Books / Create Your Own Programming Languauge
- HN
Discussions:
Books
- Engineering a Compiler
The modern textbook on Compilers Construction, covering SSA-Form and recent research on Code Generation
- Essentials of Programming Languages
Fundamental concepts of programming languages with a focus on Semantics, Interpretation and CPS (Continuation Passing Style)
- Language Implementation Patterns
Learn the patterns behind building programming languages and build an interpreter yourself, using ANTLR
- Modern Compiler Implementation in ML
Build a compiler using ML (MetaLanguage) with a textbook that has one of the best coverage on all compiler stages. The book comes with a reference compiler implementation to guide your software development process
Books / Modern Compiler Implementation in ML
- MCI in C
Other editions: ,
Books
- Programming Language Pragmatics
Integrated treatement of language design and implementation, the examples feature famous architectures like ARM and x86 64-bit
- Programming Languages: Application and Interpretation
Excellent introduction to the subject that uses an incremental approach to building programs. The mistakes are included too to highlight key concepts
Books / Programming Languages: Application and Interpretation
Books
- Programming Languages: Theory and Practice
Collected lecture notes for the course taught at Carnegie Mellon University, most suitable as an introductory text on the subject
- Project Oberon
The design of an operating system and compiler
Books / Project Oberon
- 2013 Edition
Other editions:
Books
The BEAM Book
Description of the ERTS (Erlang Runtime System) and the BEAM Virtual Machine
- Virtual Machines
Good book on how to build Virtual Machines especially tailored for the topic of building Programming Languages
- Virtual Machines: Versatile Platforms for Systems and Processes
Key textbook on the subject of Virtual Machines which examines virtual machine technologies across the disciplines that use them, e.g.: OS and Programming Languages
- Write a Compiler in Go
Well-known introduction to the Go programming language and its ecosystem through building a Compiler project
- Write an Interpreter in Go
Successor of the "Write a Compiler in Go" book, but this one builds an interpreter project instead
- Writing Compilers and Interpreters: A Software Engineering Approach
How to build Compilers using Java, this book is tailored for the working Software Engineer
Books / Writing Compilers and Interpreters: A Software Engineering Approach
- Using C++
Other editions: ,
Books
- Writing Interpreters and Compilers for the Raspberry Pi Using Python
If you want to learn how to write interpreters and compilers, and at the same time learn how Python, Python bytecode, assembly language, and dynamic typing work, this is the book for you
- Advanced Compiler Design and Implementation
In-depth treatement of advanced design topics such as: Intermediate Representation, SSA, Code Optimization and the various processor architectures
- Advanced Design and Implementation of Virtual Machines
Step-by-step hollistic introduction to the design of Virtual Machine architectures, topics and algorithms. Contains illustrated figures and implementations for the algorithms in the book
- Advanced Topics in Types and Programming Languages
Intensive study of Type Systems, covering topics such as, but not limited to: Precise Type Analyses; Type Systems for Low-Level Languages and Advanced Techniques in ML-style Type Inference
- A Retargetable C Compiler: Design and Implementation
Examines the design and implementation of Icc, a production-quality, retargetable compiler, designed at AT&T Bell Labs for the ANSI C programming language
- Building an Optimizing Compiler
Fills the gap in the domain of code optimization. This book provides a high level design for a thorough optimizer, code generator, scheduler and register allocator for a generic modern RISC processor
- Compiling with Continuations
Introduction to CPS (Continuation-Passing Style) as an Intermediate Representation in Compiler for doing optimizations and program transformations
- Design Concepts in Programming Languages
Systematic exploration of techniques and ideas used in Programming Language Design, covers topics such as: Operational and Denotational Semantic techniques, Dynamic Semantic techniques and Static Semantic techniques
- Instruction Level Parallelism
This book precisely formulates and simplifies the presentation of Instruction Level Parallelism (ILP) compilation techniques
- Linkers and Loaders
Definitive text on the compile-time and runtime processes of linking and loading
- Optimizing Compilers for Modern Architectures
Optimizing program generation based on recent gains and breakthroughs in modern high-performance CPU architectures
- Parsing Techniques: A Practical Guide
Definitive guide on parsing algorithms and techniques, also contains an introduction to Formal Grammar and Parsing Theory
Books / Parsing Techniques: A Practical Guide
Books
- The Garbage Collection Handbook: The Art of Automatic Memory Management
The living-classic and definitive text on the topic of Garbage Collection, also covers hardware-based optimizations in light of modern advances in CPU architectures
- The Implementation of Functional Programming Languages
Classic textbook on implementing Functional Languages, covers Structured Types, Pattern Matching Semantics, Lambda Calculus Transformation, Polymorphic Type Checking and many other topics
- The SSA Book
The only in-depth study of SSA-form (Static Single Assignment Form) in book format
- Types and Programming Languages
Comprehensive introduction to the topic of Type Systems and Programming Languages from a Type-Theoretic perspective
- Warren's Abstract Machine: Prolog in Haskell
Introduction to WAM from Logic Programming in Prolog
Papers
Papers / A Micro-Manual for LISP - Not the Whole Truth, J. McCarthy
Neat and nice typeset
Other editions:
Papers
- An Evil Copy: How the Loader Betrays You
About security issues related to Dynamic Loading
Papers / MOV is Turing-Complete, S. Dolan
- HN
Discussions: ,
Papers
Specifications
Courses
- Compilers Construction, Cambridge
Introduction to compiler construction course from the University of Cambridge
- Compiler Construction for Undergrads, RICE University
Introduction to compiler construction and language translators course from the RICE University
- YouTube
Compilers Theory, Stanford - , , -Introduction to Compilers theory and construction course from Stanford
- Design and Construction of Compilers, University of Texas
Design and construction of compilers including lexical analysis, parsing, code generation techniques, error analysis and simple code optimizations
Courses / Design and Construction of Compilers, University of Texas
- PDF
Lecture Notes: ,
Courses
- DSL Design and Implementation Summer School
Summer School program on the topics of DSL Design and Implementation hosted by the EPFL University
- Foundations of Programming Languages
Concepts that underlie the design, definition, implementation and use of modern programming languages from a formal standpoint
- Nand2Tetris: How to Build a Computer from First Principles, Part 2
This 2nd part of the Nand2Tetris course covers basic language design and elementary compiler construction concepts in addition to many other topics on a basic level
- NPTEL's Principles of Compiler Design Course
Introductory course from NPTEL on Compiler Design
- NPTEL's Compiler Design Course
Slightly more advanced course than their Principles of Compiler Design course, covers SSA Form to a good degree
Courses / NPTEL's Compiler Design Course
Courses
- Programming Languages: Part A, by Grossman
Part 1 of a 3-part course series to the basic concepts of programming languages, with a strong emphasis on functional programming
- Programming Languages: Part B, by Grossman
Part 2 of a 3-part course series to the basic concepts of programming languages, with a strong emphasis on functional programming
- Programming Languages: Part C, by Grossman
Part 3 of a 3-part course series to the basic concepts of programming languages, with a strong emphasis on functional programming
- Types, Logic, Semantics, and Verification from Oregon University's Summer School
Summer School program that consists of 80 minute lectures presented by internationally recognized leaders in programming languages and formal reasoning research
- Virtual Machines and Managed Runtimes, UCB CS294
Introductory course on Virtual Machines and Managed Runtimes from the University of Berkeley
- Virtual Machines Summer School 2016 (VMSS 2016)
VMSS is a Summer School program that aims to give an overview of the field, targeted at early career researchers
Courses / Virtual Machines Summer School 2016 (VMSS 2016)
Talks and Conferences
- Curry On! Conference
Programming Languages Conference
Talks and Conferences / Curry On! Conference
Talks and Conferences
- How to Build a Virtual Machine
Terence Parr gives an idea of the core mechanisms behind virtual machines by building one, in front of your eyes, from scratch. It is the same kind of commercial interpreter he made for Renault cars
- MetaScala: A Tiny DIY JVM
Metascala is a tiny metacircular Java Virtual Machine (JVM) written in the Scala programming language
- One VM to Rule Them All, One VM to Bind Them
Tutorial on the Truffel technology
- Programming Should Eat Itself
StrangeLoop Talk on Reflective Programming and Kenichi Asai's Black Programming Language
- Single Static Assignment Form Seminar
Introductory seminar on SSA Form, Compiler Optimizations under it and its applications in other areas such as Program Analysis and Verification
- The Most Beautiful Program Ever Written
William Byrd on a Lisp interpreter written in 15 lines of Lisp
Talks and Conferences / The MoVfuscator: turning mov into a soul crushing RE nightmare
- HN
Discussions: ,
Talks and Conferences / Courses
Talks and Conferences
Articles
Articles / Adventures in JIT Compilation by Eli Bendersky:
Articles
- Graal and Truffel
Obscure research project could radically accelerate innovation in programming language design
Articles / Graal and Truffel
- Reddit
Discussions:
Articles
- LLVM Architecture
Chapter from the book Architecture of Open Source Applications
- LLVM for Graduate Students
Introduction to doing research with the LLVM compiler infrastructure
Tutorials
- A Beginner's Guide to Linkers
Tutorial for helping C & C++ programmers understand the essentials of what the linker does
Hindley-Damas-Milner Tutorial
Extensively documented walkthrough for typechecking a basic functional language using the Hindley-Damas-Milner algorithm
Tutorials / How I Wrote a Programming Language, and How You Can Too
- Reddit
Discussions:
Tutorials
- Lisperator
How to implement a programming language in JavaScript
- Little Lisp Interpreter
Interpreter that supports function invocation, lambdas, lets, ifs, numbers, strings, a few library functions, and lists in under 120 lines of JavaScript
Tutorials / Little Lisp Interpreter
Tutorials
- lis.py, v1: (How to Write a (Lisp) Interpreter (in Python))
Tutorial by Peter Norvig on writing a simple Lisp interpreter
- lis.py, v2: An ((Even Better) Lisp) Interpreter (in Python)
Follow-up tutorial by Peter Norvig on making slightly better
Tutorials / LLVM Tutorial: Implementing Kaleidoscope
Tutorials
- Project: A Programming Language
Chapter 11 from the book , 2nd Edition
- Writing a Language in Truffel
Interpreter development tutorial using Truffel, by Cristian Esquivias
Community Discussions
- Can we stop recommending the Dragon Book, please?
StackExchange thread criticising the in favor of alternatives
- @HN
Does a compiler use all x86 instructions? - , - Article discussions on HN and Reddit
- How to Write a Compiler
Article discussion on Reddit
Community Discussions / How to Write a Prolog Interpreter in a Purely Functional Language
- Reddit
Discussions:
Community Discussions
Tools and Frameworks / Language Agnostic
- B3: The Bare Bones Backend
WebKit's optimizing JIT Compiler for procedures containing C-like code
Capstone
Lightweight multi-platform, multi-architecture disassembly framework with bindings to various famous programming languages
Keystone
Lightweight multi-platform, multi-architecture assembler framework with bindings to various famous programming languages
LLILCL
LLVM-based Compiler Backend for .NET Core
- LLVM
The LLVM Compiler-Backend Framework
- MicroVM
The "Mu" Framewrok for Programming Languages development based on the MuVM Specification
Movfuscator Compiler
The compiles programs into "mov" instructions, and only "mov" instructions
- QBE: The Quick Backend
Pure C embeddable SSA-based compiler backend
Rubinius
Programming Languages Development Platform
Summus
Basic, reusable, compiler-frontend implementation using LLVM as a backend
ZetaVM
Multi-Language Platform for Dynamic Programming Languages
Tools and Frameworks / C / C++
AsmJIT
Complete x86/x64 JIT and Remote Assembler for C++
- GCC
The GNU Compiler Collection (C as a Backend)
LCC
The lcc retargetable ANSI C compiler (C as a Backend)
- libFirm
C-library that provides a graph-based intermediate representation, optimizations, and assembly code generation suitable for use in compilers
- libJIT
Library for generic Just-In-Time compiler functionality independent of any particular bytecode, language, or runtime
- myJIT
Library for machine-code generation and execution at run-time
- OrangeC
Win32 C11/C++2014 compiler and toolchain
- PCC
The Portable C Compiler (C as a Backend)
- Ragel
Ragel State Machine Compiler
- TCC
The Tiny C Compiler (C as a Backend)
Tools and Frameworks / CLR
- Cecil
Library to generate and inspect programs and libraries in the ECMA CIL format
DotNetPELib
Library to read and write .net assemblies in C++11
- ILSpy
.NET Decompiler
- Reflector
.NET Decompiler
- Reflexil
Assembly code editor which can be used as a plugin with other .NET/CLR tools
Tools and Frameworks / D
dunnart
LALR(1) Parser Generator
FancyPars-lite
Fast parser generator
libdparse
Library allowing to build lexers and parsers. Contains a lexer and a parser for the D language itself
llvm-d
D bindings for LLVM
Pegged
design, test and generate parsers for PEG grammars
Tools and Frameworks / Go
- goyacc
YACC Implementation in Go. Standard LALR(1) parser generator
- LLVM Go binding
Official Go LLVM binding
Tools and Frameworks / Graal
Graal
High-Performance Polyglot Runtime
- Graal Core
Compiler and Truffel Partial Evaluator
- Graal VM
Graal's multi-language VM distribution
Tools and Frameworks / Haskell
Bound
/ / - Libraries for manipulating bound variables
Hoopl
Higher-order optimization library
- llvm-general
Haskell bindings for LLVM
Parsec
/ / / / + - Parsers for every use case
wl-pprint-text
/ - Walder-style pretty-printing libraries
Tools and Frameworks / JavaScript
- IRHudra
Tool for displaying intermediate representations used by V8 and Dart VM optimizing compilers
Tools and Frameworks / JavaScript / IRHudra
Tools and Frameworks / JavaScript
- JISON
Context-free grammar parser generator for JavaScript
Tools and Frameworks / JavaScript / JISON
GerHobbelt/jison
active fork of jison with bunch of improvements
Tools and Frameworks / JavaScript
Tools and Frameworks / JVM
- ANTLR
Parser generator for reading, processing, executing, or translating structured text or binary files
- BYAAC/J
BYACC/Java is an extension of the Berkeley v 1.8 YACC-compatible parser generator for Java
CGLIB
High level API library for generating and transforming Java Byte Code
- FCP JVM
JVM Backend for generating Java Byte Code that conforms to the JDK v1.5+ Specification and the Dalvik VM
- JavaCC
Java Compiler Construction and Parser Generator Toolkit
JavaCPP Presets for LLVM
Library for easily interacting with the LLVM API
- JFlex
JFlex is a lexical analyzer generator for Java with full Unicode support
- JLex
JLex is a lexical analyzer generator, that can be used in combination with CUP
Tools and Frameworks / Kotlin
The Whimsy Compiler Framework
Compiler framework research project in Kotlin
Tools and Frameworks / Python
- AST
Python's builtin Abstract Syntax Tree package
- Dis
Python's builtin Disassembler package
- Parsing
Pure-Python module that implements an LR(1) parser generator, as well as CFSM and GLR parser drivers
- PLY
Implementation of lex and yacc parsing tools for Python
- PyParsing
Alternative approach to creating and executing simple grammars, vs. the traditional lex/yacc approach, or the use of regular expressions
RPLY
Port of the PLY project to RPython
- RPython
RPython is a framework for the implementatation of dynamic languages
Tools and Frameworks / Rust
Compilers and Interpreters / Serious Projects
Babel.js
Next-generation JavaScript Compiler
BOLT
Binary Optimization and Layout Tool
ChezScheme's Compiler
ChezScheme Language Compiler
ELENA Compiler
Elena programming language
Eta' Compiler
JVM-based Compiler for the Eta Programming Language
Frege's Compiler
JVM-based Compiler for the Frege Programming Language
Gluon's Compiler
Embedded Language Compiler written in Rust
HHVM
Virtual Machine for running programs written in Hack and PHP
Lua's Interpreter
Official Lua Language Interperter
Compilers and Interpreters / Serious Projects / Lua's Interpreter
- Lua's Annotated Source Code
Annotated source code of the Lua Programming Language Interpreter v5.1.4
Compilers and Interpreters / Serious Projects
Mirah's Compiler
JVM-based Compiler for the Mirah Programming Language
P Lang
The P Programming Language Runtime
Roslyn
The .NET "Roslyn" Compiler Platform
- Simple-MSIL-Compiler
C compiler that compiles to CLR
Zig's Compiler
Zig Language Compiler
Compilers and Interpreters / Educational and Toy Projects
Compilers and Interpreters / Educational and Toy Projects / amacc
- HN
Discussions:
Compilers and Interpreters / Educational and Toy Projects
- Black
Scheme interpreter for the Reflective Programming Language "Black", by Kenichi Asai's
Compilers and Interpreters / Educational and Toy Projects / Black
GitHub Mirror
Other sources:
Compilers and Interpreters / Educational and Toy Projects
C4
C Lang in 4 Functions
Compilers and Interpreters / Educational and Toy Projects / C4
- HN
Discussions:
Compilers and Interpreters / Educational and Toy Projects
CarpVM
Experimental VM implementation in C
Charly
Interpreter for a dynamically typed language written in Crystal
Dale
Lisp-flavoured C: a system programming language
EasyLang
Easy Programming Language / VM
Eschelle
Open source cross platform multi-paradigm language with VM & JIT
Gecho
Simple-stack language implementation in C
gocaml
Minimal functional programming language implementation in Go and LLVM
gone
Compiler for a tiny programming language called Gone, implemented using Python 3.6, SLY and llvmlite. Developed as part of the January 2018 , under the supervision of David Beazly
Hython
Haskell-powered Python 3 interpreter
Compilers and Interpreters / Educational and Toy Projects / Hython
- Reddit
Discussions:
Compilers and Interpreters / Educational and Toy Projects
llgo
Go frontend for LLVM written in Go
MAL
: Make a Lisp - Clojure-inspired Lisp interpreter implemented in 64 languages
MetaScala
Metacircular JVM implementation in Scala
mini-js
Experimental self-hosted JavaScript compiler in 1K LoC
MunVM
Lua VM & Compiler in C
MY-BASIC
An embeddable BASIC dialect interpreter in C with modern paradigms
oberonc
A single pass, self-hosting compiler for the Oberon-07 programming language. It targets the JVM
Poprc
Compiler for the Popr Language
PyCOOLC
Compiler for the COOL Programming Language written in Python 3
RabbitVM
RISC-based VM implementation in C
Squint
A peephole optimizer for educational compilers generating stack based assembly
StackVM
Virtual Machine with an integrated VRAM display
stack_cpu
Stack-machine simulator
The Super Tiny Compiler
Tiny educational compiler project in JavaScript
Compilers and Interpreters / Educational and Toy Projects / The Super Tiny Compiler
- HN
Discussions:
Compilers and Interpreters / Educational and Toy Projects
- tinyc.c
Tiny-C language compiler in C
tisp
"Time is Space" Programming Language Interpreter
Ultra Tiny Compiler
Another tiny compiler in less then 90 lines of code
Runtimes and VMs
Runtimes and VMs / JVM Implementations:
Blogs
- LLVM Weekly
Weekly newsletter about LLVM
Communities
- /r/Compilers
Subreddit community about the theory and development of compilers
- /r/ProgrammingLanguages
Subreddit community that is dedicated to discussion of programming languages, programming language theory, design, their syntax and compilers
Verticals
- miniKanren.org
Papers, Talks and Implementations of miniKanren and microKanren
Nothing in this list matches your filter.
Featured in 2 awesome lists
Each link jumps to the spot where the list mentions awesome-compilers.