Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
awesome-compilers
https://github.com/rsumner31/awesome-compilers
- Computer Systems: A Programmer’s Perspective, R. Bryant, D. O'Hallaron - Comprehensive treatement of Computer Systems including Compilers, Interpreters and Runtimes.
- Elements of Computing Systems, N. Nisan, S. Schocken - How to build a computer starting with Nand Logic Gates and then move to Machine Code, Assemblers, Compilers and Operating Systems.
- SICP, H. Abelson, G. Sussman - Structure and Interpretation of Computer Programs.
- HTML5/EPUB version
- Basics of Compiler Design, T. Mogensen - Short and concise book on the basic concepts behind Compiler Design.
- Beautiful Racket, M. Butterick - How to make your own Programming Language with Racket.
- Build Your Own Lisp, D. Holden - Learn C and build your own Lisp programming language in 1000 lines of code.
- Compilers: Principles, Techniques, and Tools, A. Aho, M. Lam, R. Sethi, J. Ullman - The infamous Dragons Book, a classic textbook on Compiler Construction.
- Crafting Interpreters, B. Nystrom - Everything you need to learn to build an interpreted, full-featured, efficient scripting language.
- GitHub Repo
- HN
- Create Your Own Programming Language - Very short book on building your own programming language with video tutorials and source code projects for 3 example programming languages.
- HN
- Engineering a Compiler, K. Cooper, L. Torczon - Modern comprehensive textbook on Compilers Construction. It covers SSA Form and recent research on Machine Code Generation.
- Essentials of Programming Languages, D. Friedman & M. Wand - Fundamental concepts of programming languages with a focus on Semantics, Interpretation and CPS (Continuation Passing Style).
- Language Implementation Patterns, T. Parr - Learn the patterns behind building programming languages and build an interpreter yourself, using ANTLR.
- Modern Compiler Implementation in ML, A. Appel
- MCI in C
- Programming Language Pragmatics, M. Scott
- Programming Languages: Application and Interpretation, S. Krishnamurthi
- Programming Languages: Theory and Practice
- Project Oberon, N. Wirth & J. Gutknecht
- 2013 Edition
- The BEAM Book - Description of the ERTS (Erlang Runtime System) and the BEAM Virtual Machine.
- Virtual Machines, Smith and Nait
- Virtual Machines, Iain Craig
- Writing an Interpreter in Go, T. Ball
- Writing Compilers and Interpreters: A Software Engineering Approach
- Writing Compilers and Interpreters: An Applied Approach Using C++
- Advanced Compiler Design and Implementation, S. Muchnick
- Advanced Topics in Types and Programming Languages, B. Pierce
- A Retargetable C Compiler: Design and Implementation, D. Hanson
- Building an Optimizing Compiler, B. Morgan
- Compiling with Continuations, A. Appel
- Design Concepts in Programming Languages, F. Turbak, D. Gifford, M. Sheldon - also contains some introductory level material.
- Instruction Level Parallelism, A. Aiken, U. Banerjee, A. Kejariwal, A. Nicolau
- Linkers and Loaders
- Optimizing Compilers for Modern Architectures, R. Allen & K. Kennedy
- Parsing Techniques: A Practical Guide
- 1st Edition, PDF
- The Garbage Collection Handbook: The Art of Automatic Memory Management, R. Jones, A. Hosking, E. Moss
- The Implemetation of Functional Programming Langauges, S. P. Jones
- The SSA Book, Springer, Zadeck
- Types and Programming Languages, B. Pierce
- Warren's Abstract Machine - Prolog in Haskell, H. Aït-Kaci
- 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
- Neat and nice typeset
- 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 Languauage 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
- CLI (ECMA-335) Specification
- Mu Specification
- JVM SE8 Specification
- 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 - 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
- Curry On! Conference - Programming Languages Conference.
- YouTube Channel
- Lang.NEXT Conference 2012
- Lang.NEXT Conference 2014
- 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
- 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
- A Tourist’s Guide to the LLVM Source Code
- Accidentally Turing Complete
- Part 1 - An Interpreter
- Part 2 - An x64 JIT
- Part 3 - LLVM
- Part 4 - In Python
- ALIVe: Automatic LLVM InstCombine Verifier
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- How to Compile with Continuations
- Interpreter, Compiler and JIT
- Introducing the B3 JIT Compiler
- LLVM Architecture - Chapter from the book Architecture of Open Source Applications.
- LLVM for Graduate Students - Introduction to doing research with the LLVM compiler infrastructure.
- Pratt Parsers: Expression Parsing Made Easy
- Rust Compiler Walk-Through
- Rust's Incremental Compilation
- Rust’s Upcoming MIR
- The Memory Models that Underlie Programming Languages
- 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
- Compiler Optmization Tutorial
- How I Wrote a Programming Language, and How You Can Too
- Implementing a JIT Compiled Language with Haskell and LLVM
- 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.
- 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.
- 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.
- Can we stop recommending the Dragon Book, please? - StackExchange thread criticising the [Dragons Book](https://www.amazon.com/dp/0321486811) in favor of alternatives.
- What is difference between an LL and Recursive Descent parser?
- @HN - Article discussions on HN and Reddit.
- How to Write a Compiler - Article discussion on Reddit.
- How to Write a Very Basic Compiler
- How to Write a Prolog Interpreter in a Purely Functional Language
- Implementing Type Inference
- I want to build a VM, any good references?
- Resources for Amatuer Compilers Writers
- What are the good open source implementations of Java Virtual Machine?
- What are the latest research trends in Compilers and PLs
- 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 `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.
- 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.
- PCC - The Portable C Compiler (C as a Backend).
- TCC - The Tiny C Compiler (C as a Backend).
- Cecil - Library to generate and inspect programs and libraries in the ECMA CIL format.
- ILSpy - .NET Decompiler.
- Reflector - .NET Decompiler.
- Reflexil - Assembly code editor which can be used as a plugin with other .NET/CLR tools.
- 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.
- goyacc - YACC Implementation in Go. Standard LALR(1) parser generator.
- LLVM Go binding - Official Go LLVM binding.
- Graal - High-Performance Polyglot Runtime.
- Graal Core - Compiler and Truffel Partial Evaluator.
- Graal VM - Graal's multi-language VM distribution.
- Bound - generics](https://github.com/lambdageek/unbound-generics) - 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 - wl-pprint](https://github.com/batterseapower/ansi-wl-pprint) - Walder-style pretty-printing libraries.
- IRHudra - Tool for displaying intermediate representations used by V8 and Dart VM optimizing compilers.
- GitHub Repo
- JISON - Context-free grammar parser generator for JavaScript.
- PEG.js - Simple parser generator for JavaScript.
- 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.
- 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.
- The Whimsy Compiler Framework - Compiler framework research project in Kotlin.
- 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.
- List of Language Parsing Tools at the Python Wiki
- Survey of Python Parsers, by Ned Batchelder
- Combine - Parser Combinator Library for Rust.
- IronLLVM - Safe LLVM bindings for Rust.
- LALRPOP - LR(1) parser generator for Rust.
- Nom - Parser Combinator Framework.
- PEG - PEG Parser Generator.
- Pest - PEG Parser Generator.
- RLS - The Rust Language Server implementation (aka RLS).
- Babel.js - Next-generation JavaScript Compiler.
- ChezScheme's Compiler - ChezScheme Language Compiler.
- 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.
- Lily's Interpreter
- Lua's Interpreter - Official Lua Language Interperter.
- Lua's Annotated Source Code - Annotated source code of the Lua Programming Language Interpreter v5.1.4.
- Mirah's Compiler - JVM-based Compiler for the Mirah Programming Language.
- Nim's Compiler
- P Lang - The P Programming Language Runtime.
- Red's Compiler
- Roslyn - The .NET "Roslyn" Compiler Platform.
- TypeScript's Compiler
- Wren's Compiler
- Zig's Compiler - Zig Language Compiler.
- Black - Scheme interpreter for the Reflective Programming Language "Black", by Kenichi Asai's.
- GitHub Mirror
- C4 - C Lang in 4 Functions.
- HN
- CarpVM - Experimental VM implementation in C.
- Dale - Lisp-flavoured C: a system programming language.
- 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.
- Hython - Haskell-powered Python 3 interpreter.
- llgo - Go frontend for LLVM written in Go.
- Mal's Interpreter - 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.
- Poprc - Compiler for the Popr Language.
- PyCOOLC - Compiler for the COOL Programming Language written in Python 3.
- RabbitVM - RISC-based VM implementation in C.
- stack_cpu - Stack-machine simulator.
- The Super Tiny Compiler - Tiny educational compiler project in JavaScript.
- HN
- tinyc.c - Tiny-C language compiler in C.
- tisp - "Time is Space" Programming Language Interpreter.
- CakeML
- CoreCLR - The .NET's Common Language Runtime.
- Erlang BEAM
- HHVM - Facebook's Open Source VM for running Hack and PHP programs.
- HLVM
- OpenJDK
- Kaffe
- JamVM - [GitHub project mirror](https://github.com/cfriedt/jamvm).
- Apache Harmony
- Other JVM Runtimes
- Eli Bendersky
- John Regehr
- Krister Walfridsson
- Lambda The Ultimate
- LLVM Developers' Meetings
- LLVM Weekly - Weekly newsletter about LLVM.
- /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.
- Awesome Static Analysis
- Compiler Conferences, Workshops and Journals
- Languages and Compilers Network Graph
- miniKanren.org - Papers, Talks and Implementations of miniKanren and microKanren.
- PLT Enlightenment
- Resources for Amateur Compiler Writers
- SSA Form Bibliography
- Summer Schools
- The Witchcraft Compiler Collection
- TypeFunc
- ![CC0
- Ahmad Alhour
- TextCraft
Programming Languages
Keywords
compiler
10
language
9
programming-language
6
interpreter
5
rust
4
parsing
3
parser
3
scripting-language
3
javascript
3
embeddable
2
ast
2
haskell
2
functional-programming
2
c-sharp
2
x86
2
x86-64
2
programming-languages
2
virtual-machine
2
php
2
jit
2
peg
2
functional
2
assembler
2
formal-verification
2
repl
2
python
2
lisp
2
java
2
c
2
grammar
1
zero-copy
1
parser-generator
1
parsing-expression-grammars
1
parser-combinators
1
babel
1
es2015
1
es6
1
flavortown
1
eta
1
jvm
1
gluon
1
type-inference
1
lily
1
scripting-languages
1
efficient
1
book
1
bytecode
1
lox
1
markdown
1
classic
1