awesome-compilers
:sunglasses: Curated list of awesome resources on Compilers, Interpreters and Runtimes
https://github.com/aalhour/awesome-compilers
Last synced: about 11 hours ago
JSON representation
-
Learning
-
Books
- 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!
- Basics of Compiler Design - Provides a short treatment of the basic concepts.
- Build Your Own Lisp - Learn C and build your own Lisp Programming Language in 1000 LoC.
- HN
- Create Your Own Programming Languauge - Example-driven approach to building your own programming language with video tutorials and source code projects.
- 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.
- Project Oberon - The design of an operating system and compiler.
- 2013 Edition
- Optimizing Compilers for Modern Architectures - Optimizing program generation based on recent gains and breakthroughs in modern high-performance CPU architectures.
- Warren's Abstract Machine: Prolog in Haskell - Introduction to WAM from Logic Programming in Prolog.
- HTML5/EPUB version
- 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.
- Computer Systems: A Programmer’s Perspective - General treatment of Computer Systems including Compilers, Interpreters and Runtimes.
- Basics of Compiler Design - Provides a short treatment of the basic concepts.
- Beautiful Racket - How to make your own Programming Language with Racket.
- Create Your Own Programming Languauge - Example-driven approach to building your own programming language with video tutorials and source code projects.
- Project Oberon - The design of an operating system and compiler.
- 2013 Edition
- The BEAM Book - Description of the ERTS (Erlang Runtime System) and the BEAM Virtual Machine.
- Optimizing Compilers for Modern Architectures - Optimizing program generation based on recent gains and breakthroughs in modern high-performance CPU architectures.
- Warren's Abstract Machine: Prolog in Haskell - Introduction to WAM from Logic Programming in Prolog.
- 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.
- GitHub Repo
- HN
- 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.
- MCI in C
- Programming Language Pragmatics - Integrated treatement of language design and implementation, the examples feature famous architectures like ARM and x86 64-bit.
- Programming Languages: Theory and Practice - Collected lecture notes for the _Programming Languages_ course taught at Carnegie Mellon University, most suitable as an introductory text on the subject.
- 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.
- Using C++
- 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.
- Parsing Techniques: A Practical Guide - Definitive guide on parsing algorithms and techniques, also contains an introduction to Formal Grammar and Parsing Theory.
- 1st Edition, PDF
- 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.
-
Papers
- A Graph Higher-Order IR, R. Leißa, M. Koster & S. Hack
- 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
- Draining the Swamp: Micro Virtual Machines as Solid Foundation for Language Development, K. Wang, Y. Lin, S. Blackburn, M. Norrish & A. Hosking
- Garbage Collection in an Uncooperative Environment, H. Boehm, M. Weiser
- 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
- 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
- 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
- Trace-based JIT Compilation for Lazy Functional Languages, T. Schilling
- 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.
- PyPy’s Approach to VM Construction, A. Rigo & S. Pedroni
- A Graph Higher-Order IR, R. Leißa, M. Koster & S. Hack
- Neat and nice typeset
- An Incremental Approach to Compiler Construction
- Compiler Construction Using Scheme, E. Hilsdale, J. Ashley, R. Dybvig & D. Friedman
- Draining the Swamp: Micro Virtual Machines as Solid Foundation for Language Development, K. Wang, Y. Lin, S. Blackburn, M. Norrish & A. Hosking
- Garbage Collection in an Uncooperative Environment, H. Boehm, M. Weiser
- 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
- 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
- Simple and Efficient Construction of SSA Form
- SSA-based Register Allocation, S. Hack & G. Goos
- Trace-based JIT Compilation for Lazy Functional Languages, T. Schilling
- Compilers Lab at Saarland University
- Kenichi Asai
- Packrat Parsing (PEG) Papers and Resources
- A Brief History of JIT Compilation, J. Aycock
- A Flexible Prolog Interpreter in Python, C. Bolz & M. Leuschel
- 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
- Compiling with Continuations: Continued, A. Kennedy
- Definitional Interpreters for Higher-Order Programming Languages, J. Reynolds
- Engineering Definitional Interpreters, J. Midtgaard, N. Ramsey, B. Larsen
- Machine Code Obfuscation via Instruction Set Reduction and CFG Linearization, C. Jonischkeit
- `MOV` is Turing-Complete, S. Dolan
- HN
- Packrat Parsing Thesis on PEG, B. Ford
- The Page-Faults Weird Machine: Lessons in Instruction-less Computation, J. Bangert, S. Bratus, R. Shapiro, S. Smith
- Using Datalog with Binary Decision Diagrams for Program Analysis, J. Whaley, D. Avots, M. Carbin & M. Lam
- C. Bolz’s Research Publications
-
Specifications
-
Courses
- Compilers Construction, Cambridge - Introduction to compiler construction course from the University of Cambridge.
- 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.
- 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
- 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
- Compilers Construction, Cambridge - Introduction to compiler construction course from the University of Cambridge.
- 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.
- 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
- 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
- Compiler Construction for Undergrads, RICE University - Introduction to compiler construction and language translators course from the RICE University.
- 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.
- 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.
- 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.
-
Talks and Conferences
- Curry On! Conference - Programming Languages Conference.
- YouTube Channel
- LLVM Developers Meeting YouTube Channel
- Anders Hejlsberg on Modern Compiler Construction
- Meta-Tracing, RPython and PyPy
- 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.
- Understanding Compiler Optimization
- Exploring Python’s Bytecode
- 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
- Meta-Tracing, RPython and PyPy
- 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.
- An Introduction to Combinator Compilers and Graph Reduction Machines
- Building an Interpreter in RPython
- CPython - A Ten-Hour Codewalk
- 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.
- 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
- 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
-
Articles
- Accidentally Turing Complete
- Part 1 - An Interpreter
- Part 2 - An x64 JIT
- Part 3 - LLVM
- Part 4 - In Python
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- How to Compile with Continuations
- 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
- The Memory Models that Underlie Programming Languages
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- A Tourist’s Guide to the LLVM Source Code
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- Accidentally Turing Complete
- Part 1 - An Interpreter
- Part 2 - An x64 JIT
- Part 3 - LLVM
- Part 4 - In Python
- Graal and Truffel - Obscure research project could radically accelerate innovation in programming language design.
- How to Compile with Continuations
- 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
- The Memory Models that Underlie Programming Languages
- ALIVe: Automatic LLVM InstCombine Verifier
- Interpreter, Compiler and JIT
- Introducing the B3 JIT Compiler
- Rust's Incremental Compilation
- Rust’s Upcoming MIR
-
Tutorials
- A Beginner's Guide to Linkers - Tutorial for helping C & C++ programmers understand the essentials of what the linker does.
- How I Wrote a Programming Language, and How You Can Too
- Kaleidoscope: Implementing a Language with LLVM in Objective Caml
- Lisperator - How to implement a programming language in 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.
- Writing a Language in Truffel - Interpreter development tutorial using Truffel, by Cristian Esquivias.
- A Beginner's Guide to Linkers - Tutorial for helping C & C++ programmers understand the essentials of what the linker does.
- How I Wrote a Programming Language, and How You Can Too
- Kaleidoscope: Implementing a Language with LLVM in Objective Caml
- 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.
- Writing a Language in Truffel - Interpreter development tutorial using Truffel, by Cristian Esquivias.
- A Tutorial Implementation of a Dependently Typed Lambda Calculus
- 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.
- Let’s Build A Simple Interpreter
- 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.
- Write You a Haskell
-
Community Discussions
- What is difference between an LL and Recursive Descent parser?
- Implementing Type Inference
- What are the good open source implementations of Java Virtual Machine?
- What is difference between an LL and Recursive Descent parser?
- Implementing Type Inference
- What are the good open source implementations of Java Virtual Machine?
- Can we stop recommending the Dragon Book, please? - StackExchange thread criticising the [Dragons Book](https://www.amazon.com/dp/0321486811) in favor of alternatives.
- @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
- I want to build a VM, any good references?
- Resources for Amatuer Compilers Writers
- What are the latest research trends in Compilers and PLs
-
-
Tools and Frameworks
-
Language Agnostic
- 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.
- B3: The Bare Bones Backend - WebKit's optimizing JIT Compiler for procedures containing C-like code.
-
C / C++
- myJIT - Library for machine-code generation and execution at run-time.
- 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).
- libFirm - C-library that provides a graph-based intermediate representation, optimizations, and assembly code generation suitable for use in compilers.
- myJIT - Library for machine-code generation and execution at run-time.
- OrangeC - Win32 C11/C++2014 compiler and toolchain.
- Ragel - Ragel State Machine Compiler.
- TCC - The Tiny C Compiler (C as a Backend).
- 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.
- PCC - The Portable C Compiler (C as a Backend).
-
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.
- 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.
-
Go
- goyacc - YACC Implementation in Go. Standard LALR(1) parser generator.
- LLVM Go binding - Official Go LLVM binding.
-
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.
- IRHudra - Tool for displaying intermediate representations used by V8 and Dart VM optimizing compilers.
- 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.
- 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.
- 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.
- 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.
- JavaCPP Presets for LLVM - Library for easily interacting with the LLVM API.
-
Python
- PLY - Implementation of lex and yacc parsing tools for Python.
- Survey of Python Parsers, by Ned Batchelder
- PLY - Implementation of lex and yacc parsing tools for Python.
- RPLY - Port of the PLY project to RPython.
- 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.
- PyParsing - Alternative approach to creating and executing simple grammars, vs. the traditional lex/yacc approach, or the use of regular expressions.
- 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
-
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.
-
Graal
- Graal - High-Performance Polyglot Runtime.
- Graal Core - Compiler and Truffel Partial Evaluator.
- Graal VM - Graal's multi-language VM distribution.
-
Haskell
- 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.
-
Kotlin
- The Whimsy Compiler Framework - Compiler framework research project in Kotlin.
-
Rust
-
-
Compilers and Interpreters
-
Serious Projects
- Lua's Annotated Source Code - Annotated source code of the Lua Programming Language Interpreter v5.1.4.
- 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.
- 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
- Simple-MSIL-Compiler - C compiler that compiles to CLR.
-
Educational and Toy Projects
- Black - Scheme interpreter for the Reflective Programming Language "Black", by Kenichi Asai's.
- HN
- tinyc.c - Tiny-C language compiler in C.
- Akilang - A compiler for a simple language, built with Python and LLVM
- amacc - Small C Compiler generating ELF executable for Arm architecture.
- Black - Scheme interpreter for the Reflective Programming Language "Black", by Kenichi Asai's.
- GitHub Mirror
- C4 - C Lang in 4 Functions.
- 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 [Write a compiler course](http://www.dabeaz.com/compiler.html), under the supervision of David Beazly.
- Hython - Haskell-powered Python 3 interpreter.
- llgo - Go frontend for LLVM written in Go.
- MAL - 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.
- 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.
- HN
- HN
-
-
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
- JamVM - [GitHub project mirror](https://github.com/cfriedt/jamvm).
-
-
Blogs
-
Educational and Toy Projects
- John Regehr
- LLVM Developers' Meetings
- Lambda The Ultimate
- Eli Bendersky
- LLVM Developers' Meetings
- LLVM Weekly - Weekly newsletter about LLVM.
- Krister Walfridsson
-
-
Communities
-
Educational and Toy Projects
- /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
-
Educational and Toy Projects
- Languages and Compilers Network Graph
- miniKanren.org - Papers, Talks and Implementations of miniKanren and microKanren.
- PLT Enlightenment
- SSA Form Bibliography
- Awesome Static Analysis
- Languages and Compilers Network Graph
- miniKanren.org - Papers, Talks and Implementations of miniKanren and microKanren.
- PLT Enlightenment
- SSA Form Bibliography
- The Witchcraft Compiler Collection
- TypeFunc
- 68 Resources for Creating Programming Languages
- Compiler Conferences, Workshops and Journals
- Resources for Amateur Compiler Writers
- Summer Schools
-
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