awesome-compilers
:sunglasses: Curated list of awesome resources on Compilers, Interpreters and Runtimes
https://github.com/aalhour/awesome-compilers
Last synced: 7 days ago
JSON representation
-
Learning
-
Courses
- Compiler Construction for Undergrads, RICE University - Introduction to compiler construction and language translators course from the RICE University.
- YouTube - 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.
- 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.
- YouTube Video Playlist
- 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.
- YouTube Videos Playlist
- YouTube - Introduction to Compilers theory and construction course from Stanford.
- 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.
- NPTEL's Principles of Compiler Design Course - Introductory course from NPTEL on Compiler Design.
- YouTube Video Playlist
- Virtual Machines and Managed Runtimes, UCB CS294 - Introductory course on Virtual Machines and Managed Runtimes from the University of Berkeley.
- YouTube Videos Playlist
- NPTEL's Compiler Design Course - Slightly more advanced course than their Principles of Compiler Design course, covers SSA Form to a good degree.
-
Papers
- A Brief History of JIT Compilation, J. Aycock
- A Flexible Prolog Interpreter in Python, C. Bolz & M. Leuschel
- A Graph Higher-Order IR, R. Leißa, M. Koster & S. Hack
- A Micro-Manual for LISP - Not the Whole Truth, J. McCarthy
- A Prolog Interpreter in Python, C. Bolz
- A Simple Multi-Processor Computer Based on Subleq, O. Mazonka, A. Kolodin
- An Evil Copy: How the Loader Betrays You - About security issues related to Dynamic Loading.
- An Incremental Approach to Compiler Construction
- Compiler Construction Using Scheme, E. Hilsdale, J. Ashley, R. Dybvig & D. Friedman
- Compiling with Continuations: Continued, A. Kennedy
- Definitional Interpreters for Higher-Order Programming Languages, J. Reynolds
- Draining the Swamp: Micro Virtual Machines as Solid Foundation for Language Development, K. Wang, Y. Lin, S. Blackburn, M. Norrish & A. Hosking
- Engineering Definitional Interpreters, J. Midtgaard, N. Ramsey, B. Larsen
- Garbage Collection in an Uncooperative Environment, H. Boehm, M. Weiser
- Machine Code Obfuscation via Instruction Set Reduction and CFG Linearization, C. Jonischkeit
- `MOV` is Turing-Complete, S. Dolan
- HN
- Nanopass Framework for Commercial Compiler Development, A. Keep & R. Dybvig
- Nanopass Framework for Compiler Education, D. Sarkar, O. Waddell & R. Dybvig
- Notes on Graph Algorithms Used in Optimizing Compilers, C. Offner
- Packrat Parsing Thesis on PEG, B. Ford
- PEG-based transformer provides front-end, middle-end and back-end stages in a simple Compiler, I. Piumarta
- Pycket: A Tracing JIT for a Functional Language
- PyPy’s Approach to VM Construction, A. Rigo & S. Pedroni
- RABBIT: A Compiler for SCHEME, G. Steele
- Simple and Efficient Construction of SSA Form
- SSA-based Register Allocation, S. Hack & G. Goos
- The Essence of Compiling with Continuations, C. Flanagan, A. Sabry, B. Duba & M. Felleisen
- The Page-Faults Weird Machine: Lessons in Instruction-less Computation, J. Bangert, S. Bratus, R. Shapiro, S. Smith
- Trace-based JIT Compilation for Lazy Functional Languages, T. Schilling
- Using Datalog with Binary Decision Diagrams for Program Analysis, J. Whaley, D. Avots, M. Carbin & M. Lam
- C. Bolz’s Research Publications
- Compilers Lab at Saarland University
- Kenichi Asai
- Packrat Parsing (PEG) Papers and Resources
- An Evil Copy: How the Loader Betrays You - About security issues related to Dynamic Loading.
- Neat and nice typeset
- An Incremental Approach to Compiler Construction
- PEG-based transformer provides front-end, middle-end and back-end stages in a simple Compiler, I. Piumarta
- Pycket: A Tracing JIT for a Functional Language
- Kenichi Asai
- A Graph Higher-Order IR, R. Leißa, M. Koster & S. Hack
- Simple and Efficient Construction of SSA Form
- SSA-based Register Allocation, S. Hack & G. Goos
- Compilers Lab at Saarland University
- Compiler Construction Using Scheme, E. Hilsdale, J. Ashley, R. Dybvig & D. Friedman
- Nanopass Framework for Commercial Compiler Development, A. Keep & R. Dybvig
- Nanopass Framework for Compiler Education, D. Sarkar, O. Waddell & R. Dybvig
-
Specifications
-
Talks and Conferences
- Curry On! Conference - Programming Languages Conference.
- YouTube Channel
- LLVM Developers Meeting YouTube Channel
- Anders Hejlsberg on Modern Compiler Construction
- An Introduction to Combinator Compilers and Graph Reduction Machines
- Building an Interpreter in RPython
- CPython - A Ten-Hour Codewalk
- Exploring Python’s Bytecode
- 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.
- Java AOT (Ahead of Time) Compilation
- MetaScala: A Tiny DIY JVM - Metascala is a tiny metacircular Java Virtual Machine (JVM) written in the Scala programming language.
- Meta-Tracing, RPython and PyPy
- 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.
- Python, Linkers and Virtual Memory - PYCON US
- Reverse Engineering the MOS 6502 CPU
- 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 JVM (Java Virtual Machine) Architecture
- The Most Beautiful Program Ever Written - William Byrd on a Lisp interpreter written in 15 lines of Lisp.
- The MoVfuscator: turning mov into a soul crushing RE nightmare
- HN
- Part 1
- Part 2
- Part 3
- Type-Driven Development with Idris
- Understanding Compiler Optimization
- Curry On! Conference - Programming Languages Conference.
- 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.
- Meta-Tracing, RPython and PyPy
-
Tutorials
- A Tutorial Implementation of a Dependently Typed Lambda Calculus
- A Beginner's Guide to Linkers - Tutorial for helping C & C++ programmers understand the essentials of what the linker does.
- Algorithm W Step By Step
- Building a LISP from scratch with Swift
- Compiler Optmization Tutorial
- Hindley-Damas-Milner Tutorial - Extensively documented walkthrough for typechecking a basic functional language using the Hindley-Damas-Milner algorithm.
- How I Wrote a Programming Language, and How You Can Too
- Kaleidoscope: Implementing a Language with LLVM in Objective Caml
- Let’s Build A Simple Interpreter
- 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.
- `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 `lis.py` slightly better.
- LLVM Tutorial: Implementing Kaleidoscope
- Python version with LLVMPY
- Metacompiler Tutorial, Part 1
- Project: A Programming Language - Chapter 11 from the book _Eloquent JavaScript_, 2nd Edition.
- Write You a Haskell
- Writing a Language in Truffel - Interpreter development tutorial using Truffel, by Cristian Esquivias.
- GitHub Repository
- `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 `lis.py` slightly better.
- Metacompiler Tutorial, Part 1
- Writing a Language in Truffel - Interpreter development tutorial using Truffel, by Cristian Esquivias.
- How I Wrote a Programming Language, and How You Can Too
- Python version with LLVMPY
- Lisperator - How to implement a programming language in JavaScript.
-
-
Runtimes and VMs
-
Educational and Toy Projects
- HLVM
- JamVM - [GitHub project mirror](https://github.com/cfriedt/jamvm).
- Apache Harmony
- Other JVM Runtimes
- OpenJDK
- CakeML
- CoreCLR - The .NET's Common Language Runtime.
- Erlang BEAM
- HLVM
- Kaffe
-
-
Tools and Frameworks
-
C / C++
- GCC - The GNU Compiler Collection (C as a Backend).
- 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.
- PCC - The Portable C Compiler (C as a Backend).
- Ragel - Ragel State Machine Compiler.
- AsmJIT - Complete x86/x64 JIT and Remote Assembler for C++.
- LCC - The lcc retargetable ANSI C compiler (C as a Backend).
- Ragel - Ragel State Machine Compiler.
- myJIT - Library for machine-code generation and execution at run-time.
-
CLR
- Cecil - Library to generate and inspect programs and libraries in the ECMA CIL format.
- Reflexil - Assembly code editor which can be used as a plugin with other .NET/CLR tools.
- DotNetPELib - Library to read and write .net assemblies in C++11
- Reflector - .NET Decompiler.
- Reflexil - Assembly code editor which can be used as a plugin with other .NET/CLR tools.
-
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.
-
Go
- goyacc - YACC Implementation in Go. Standard LALR(1) parser generator.
- LLVM Go binding - Official Go LLVM binding.
- goyacc - YACC Implementation in Go. Standard LALR(1) parser generator.
-
Graal
- Graal Core - Compiler and Truffel Partial Evaluator.
- Graal VM - Graal's multi-language VM distribution.
-
Haskell
- Hoopl - Higher-order optimization library.
- wl-pprint-text - wl-pprint](https://github.com/batterseapower/ansi-wl-pprint) - Walder-style pretty-printing libraries.
- Parsec - Parsers for every use case.
-
JavaScript
- IRHudra - Tool for displaying intermediate representations used by V8 and Dart VM optimizing compilers.
- JISON - Context-free grammar parser generator for JavaScript.
- PEG.js - Simple parser generator for JavaScript.
- GitHub Repo
- JISON - Context-free grammar parser generator for JavaScript.
- GerHobbelt/jison - active fork of jison with bunch of improvements.
- Nearley - Simple, fast, powerful parser toolkit for JavaScript.
- JISON - Context-free grammar parser generator for JavaScript.
- PEG.js - Simple parser generator for JavaScript.
-
JVM
- BYAAC/J - BYACC/Java is an extension of the Berkeley v 1.8 YACC-compatible parser generator for Java.
- FCP JVM - JVM Backend for generating Java Byte Code that conforms to the JDK v1.5+ Specification and the Dalvik VM.
- 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.
- CGLIB - High level API library for generating and transforming Java Byte Code.
- JavaCC - Java Compiler Construction and Parser Generator Toolkit.
-
Language Agnostic
- B3: The Bare Bones Backend - WebKit's optimizing JIT Compiler for procedures containing C-like code.
- MicroVM - The "Mu" Framewrok for Programming Languages development based on the MuVM Specification.
- QBE: The Quick Backend - Pure C embeddable SSA-based compiler backend.
- 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.
- MicroVM - The "Mu" Framewrok for Programming Languages development based on the MuVM Specification.
- Movfuscator Compiler - The `M/o/Vfuscator` 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.
-
Programming Languages
Categories
Sub Categories
Keywords
compiler
11
language
10
programming-language
8
interpreter
6
rust
4
parser
3
scripting-language
3
parsing
3
x86-64
3
repl
3
x86
3
arm
3
javascript
3
c
3
arm64
2
haskell
2
systemz
2
jit
2
ast
2
sparc
2
functional
2
security
2
reverse-engineering
2
powerpc
2
mips
2
embeddable
2
framework
2
python
2
php
2
lisp
2
java
2
assembler
2
webassembly
2
c-sharp
2
c-plus-plus
2
formal-verification
2
peg
2
zero-copy
1
aarch64
1
parser-combinators
1
systematic-testing
1
corefx
1
dotnet
1
dotnet-core
1
dotnetcore
1
state-machine
1
runtime
1
csharp
1
robotics
1
roslyn
1