Files
awesome-awesomeness/html/compilers.html
2025-07-18 23:13:11 +02:00

1190 lines
54 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<h1 id="awesome-compilers"><img src="img/awesome-compilers.png"
alt="AWESOME COMPILERS" /></h1>
<p>A curated list of awesome resources, learning materials, tools,
frameworks, platforms, technologies and source code projects in the
field of Compilers, Interpreters and Runtimes. This list has a bias
towards education.</p>
<p><a href="https://github.com/sindresorhus/awesome"><img
src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" /></a></p>
<hr />
<h2 id="contents">Contents</h2>
<ul>
<li><a href="#learning">Learning</a>
<ul>
<li><a href="#books">Books</a>
<ul>
<li><a href="#general-overview">General Overview</a></li>
<li><a href="#introductory">Introductory</a></li>
<li><a href="#advanced">Advanced</a></li>
</ul></li>
<li><a href="#papers">Papers</a>
<ul>
<li><a href="#researchers-and-institutes">Researchers and
Institutes</a></li>
</ul></li>
<li><a href="#specifications">Specifications</a></li>
<li><a href="#courses">Courses</a></li>
<li><a href="#talks-and-conferences">Talks and Conferences</a>
<ul>
<li><a href="#channels">Channels</a></li>
<li><a href="#videos">Videos</a></li>
</ul></li>
<li><a href="#articles">Articles</a></li>
<li><a href="#tutorials">Tutorials</a></li>
<li><a href="#community-discussions">Community Discussions</a></li>
</ul></li>
<li><a href="#tools-and-frameworks">Tools and Frameworks</a>
<ul>
<li><a href="#language-agnostic">Language Agnostic</a></li>
<li><a href="#c--c">C / C++</a></li>
<li><a href="#clr">CLR</a></li>
<li><a href="#d">D</a></li>
<li><a href="#go">Go</a></li>
<li><a href="#graal">Graal</a></li>
<li><a href="#haskell">Haskell</a></li>
<li><a href="#javascript">JavaScript</a></li>
<li><a href="#jvm">JVM</a></li>
<li><a href="#kotlin">Kotlin</a></li>
<li><a href="#python">Python</a>
<ul>
<li><a href="#lists-of-python-parsing-tools">Lists of Python Parsing
Tools</a></li>
</ul></li>
<li><a href="#rust">Rust</a></li>
</ul></li>
<li><a href="#compilers-and-interpreters">Compilers and Interpreters</a>
<ul>
<li><a href="#serious-projects">Serious Projects</a></li>
<li><a href="#educational-and-toy-projects">Educational and Toy
Projects</a></li>
</ul></li>
<li><a href="#runtimes-and-vms">Runtimes and VMs</a></li>
<li><a href="#blogs">Blogs</a></li>
<li><a href="#communities">Communities</a></li>
<li><a href="#verticals">Verticals</a></li>
</ul>
<hr />
<h2 id="learning">Learning</h2>
<h3 id="books">Books</h3>
<h4 id="general-overview">General Overview</h4>
<ul>
<li><a href="https://www.amazon.com/dp/9332573905">Computer Systems: A
Programmers Perspective</a> - General treatment of Computer Systems
including Compilers, Interpreters and Runtimes.</li>
<li><a href="https://www.amazon.com/dp/0262640686">Elements of Computing
Systems</a> - How to build a computer from Nand Gates all the way to
Compilers and Operating Systems.</li>
<li><a
href="https://mitpress.mit.edu/sicp/full-text/book/book.html">Structure
and Interpretation of Computer Programs</a> - Study the building blocks
of computation using Scheme by building a Scheme interpreter in a
Scheme!
<ul>
<li>Other editions: <a
href="https://sarabander.github.io/sicp/">HTML5/EPUB version</a>.</li>
</ul></li>
</ul>
<h4 id="introductory">Introductory</h4>
<ul>
<li><a href="http://hjemmesider.diku.dk/~torbenm/Basics/">Basics of
Compiler Design</a> - Provides a short treatment of the basic
concepts.</li>
<li><a href="http://beautifulracket.com">Beautiful Racket</a> - How to
make your own Programming Language with Racket.</li>
<li><a href="http://www.buildyourownlisp.com">Build Your Own Lisp</a> -
Learn C and build your own Lisp Programming Language in 1000 LoC.</li>
<li><a href="https://www.amazon.com/dp/0321486811">Compilers:
Principles, Techniques and Tools</a> - The Dragons Book. A classic
textbook on Compiler Construction.</li>
<li><a href="http://www.craftinginterpreters.com/">Crafting
Interpreters</a> - An all-stop-shop for learning (nearly) everything you
need to learn to build an interpreted, full-featured, efficient
scripting language.
<ul>
<li><a href="https://github.com/munificent/craftinginterpreters">GitHub
Repo</a>.</li>
<li>Discussions: <a
href="https://news.ycombinator.com/item?id=13406081">HN</a>.</li>
</ul></li>
<li><a href="http://createyourproglang.com/">Create Your Own Programming
Languauge</a> - Example-driven approach to building your own programming
language with video tutorials and source code projects.
<ul>
<li>Discussions: <a
href="https://news.ycombinator.com/item?id=813133">HN</a>.</li>
</ul></li>
<li><a href="https://www.amazon.com/dp/012088478X">Engineering a
Compiler</a> - The modern textbook on Compilers Construction, covering
SSA-Form and recent research on Code Generation.</li>
<li><a href="https://www.amazon.com/dp/0262062798">Essentials of
Programming Languages</a> - Fundamental concepts of programming
languages with a focus on Semantics, Interpretation and CPS
(Continuation Passing Style).</li>
<li><a href="https://www.amazon.com/dp/193435645X">Language
Implementation Patterns</a> - Learn the patterns behind building
programming languages and build an interpreter yourself, using
ANTLR.</li>
<li><a href="https://www.cs.princeton.edu/~appel/modern/ml/">Modern
Compiler Implementation in ML</a> - 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.
<ul>
<li>Other editions: <a
href="https://www.cs.princeton.edu/~appel/modern/c/">MCI in C</a>, <a
href="https://www.cs.princeton.edu/~appel/modern/java/">MCI in
Java</a>.</li>
</ul></li>
<li><a href="https://www.amazon.com/dp/0123745144">Programming Language
Pragmatics</a> - Integrated treatement of language design and
implementation, the examples feature famous architectures like ARM and
x86 64-bit.</li>
<li><a href="http://cs.brown.edu/courses/cs173/2012/book/">Programming
Languages: Application and Interpretation</a> - Excellent introduction
to the subject that uses an incremental approach to building programs.
The mistakes are included too to highlight key concepts.
<ul>
<li><a
href="http://cs.brown.edu/courses/cs173/2012/book/book.pdf">PDF</a>.</li>
</ul></li>
<li><a
href="http://people.cs.uchicago.edu/~blume/classes/aut2008/proglang/text/offline.pdf">Programming
Languages: Theory and Practice</a> - Collected lecture notes for the
<em>Programming Languages</em> course taught at Carnegie Mellon
University, most suitable as an introductory text on the subject.</li>
<li><a
href="http://people.inf.ethz.ch/wirth/ProjectOberon1992.pdf">Project
Oberon</a> - The design of an operating system and compiler.
<ul>
<li>Other editions: <a
href="http://www.cs.cmu.edu/~fp/courses/15312-f04/handouts/">2013
Edition</a>.</li>
</ul></li>
<li><a href="https://github.com/happi/theBeamBook">The BEAM Book</a> -
Description of the ERTS (Erlang Runtime System) and the BEAM Virtual
Machine.</li>
<li><a href="https://www.amazon.com/dp/1852339691">Virtual Machines</a>
- Good book on how to build Virtual Machines especially tailored for the
topic of building Programming Languages.</li>
<li><a href="https://www.amazon.com/dp/1558609105">Virtual Machines:
Versatile Platforms for Systems and Processes</a> - 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.</li>
<li><a href="https://compilerbook.com/">Write a Compiler in Go</a> -
Well-known introduction to the Go programming language and its ecosystem
through building a Compiler project.</li>
<li><a href="https://interpreterbook.com/">Write an Interpreter in
Go</a> - Successor of the “Write a Compiler in Go” book, but this one
builds an interpreter project instead.</li>
<li><a href="https://www.amazon.com/dp/0470177071">Writing Compilers and
Interpreters: A Software Engineering Approach</a> - How to build
Compilers using Java, this book is tailored for the working Software
Engineer.
<ul>
<li>Other editions: <a href="https://www.amazon.com/dp/0471113530">Using
C++</a>, <a href="https://www.amazon.com/dp/0471555800">Using
C</a>.</li>
</ul></li>
<li><a href="https://www.amazon.de/gp/product/1977509207">Writing
Interpreters and Compilers for the Raspberry Pi Using Python</a> - 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.</li>
</ul>
<h4 id="advanced">Advanced</h4>
<ul>
<li><a href="https://www.amazon.com/dp/1558603204">Advanced Compiler
Design and Implementation</a> - In-depth treatement of advanced design
topics such as: Intermediate Representation, SSA, Code Optimization and
the various processor architectures.</li>
<li><a href="https://www.amazon.com/dp/146658260X">Advanced Design and
Implementation of Virtual Machines</a> - 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.</li>
<li><a href="https://www.amazon.com/dp/0262162288">Advanced Topics in
Types and Programming Languages</a> - 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..</li>
<li><a href="https://www.amazon.com/dp/0805316701">A Retargetable C
Compiler: Design and Implementation</a> - Examines the design and
implementation of Icc, a production-quality, retargetable compiler,
designed at AT&amp;T Bell Labs for the ANSI C programming language.</li>
<li><a href="https://www.amazon.com/dp/155558179X">Building an
Optimizing Compiler</a> - 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.</li>
<li><a href="https://www.amazon.com/dp/052103311X">Compiling with
Continuations</a> - Introduction to CPS (Continuation-Passing Style) as
an Intermediate Representation in Compiler for doing optimizations and
program transformations.</li>
<li><a href="https://www.amazon.com/dp/0262201755">Design Concepts in
Programming Languages</a> - 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.</li>
<li><a href="https://www.amazon.com/dp/1489977953">Instruction Level
Parallelism</a> - This book precisely formulates and simplifies the
presentation of Instruction Level Parallelism (ILP) compilation
techniques.</li>
<li><a href="https://www.amazon.com/dp/1558604960">Linkers and
Loaders</a> - Definitive text on the compile-time and runtime processes
of linking and loading.</li>
<li><a href="https://www.amazon.com/dp/1558602860/">Optimizing Compilers
for Modern Architectures</a> - Optimizing program generation based on
recent gains and breakthroughs in modern high-performance CPU
architectures.</li>
<li><a href="https://www.amazon.com/dp/038720248X">Parsing Techniques: A
Practical Guide</a> - Definitive guide on parsing algorithms and
techniques, also contains an introduction to Formal Grammar and Parsing
Theory.
<ul>
<li><a href="https://dickgrune.com/Books/PTAPG_1st_Edition/">1st
Edition, PDF</a>.</li>
</ul></li>
<li><a href="https://www.amazon.com/dp/1420082795">The Garbage
Collection Handbook: The Art of Automatic Memory Management</a> - 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.</li>
<li><a
href="https://www.microsoft.com/en-us/research/wp-content/uploads/1987/01/slpj-book-1987-small.pdf">The
Implementation of Functional Programming Languages</a> - Classic
textbook on implementing Functional Languages, covers Structured Types,
Pattern Matching Semantics, Lambda Calculus Transformation, Polymorphic
Type Checking and many other topics.</li>
<li><a href="http://ssabook.gforge.inria.fr/latest/book.pdf">The SSA
Book</a> - The only in-depth study of SSA-form (Static Single Assignment
Form) in book format.</li>
<li><a href="https://www.amazon.com/dp/0262162091">Types and Programming
Languages</a> - Comprehensive introduction to the topic of Type Systems
and Programming Languages from a Type-Theoretic perspective.</li>
<li><a
href="https://mitpress.mit.edu/books/warrens-abstract-machine">Warrens
Abstract Machine: Prolog in Haskell</a> - Introduction to WAM from Logic
Programming in Prolog.</li>
</ul>
<h3 id="papers">Papers</h3>
<ul>
<li><a
href="http://eecs.ucf.edu/~dcm/Teaching/COT4810-Spring2011/Literature/JustInTimeCompilation.pdf">A
Brief History of JIT Compilation, J. Aycock</a>.</li>
<li><a
href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.103.1886&amp;rep=rep1&amp;type=pdf">A
Flexible Prolog Interpreter in Python, C. Bolz &amp; M.
Leuschel</a>.</li>
<li><a href="http://compilers.cs.uni-saarland.de/papers/lkh15_cgo.pdf">A
Graph Higher-Order IR, R. Leißa, M. Koster &amp; S. Hack</a>.</li>
<li><a href="https://www.uraimo.com/files/MicroManual-LISP.pdf">A
Micro-Manual for LISP - Not the Whole Truth, J. McCarthy</a>.
<ul>
<li>Other editions: <a
href="https://github.com/jaseemabid/micromanual">Neat and nice
typeset</a>.</li>
</ul></li>
<li><a
href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.8625&amp;rep=rep1&amp;type=pdf">A
Prolog Interpreter in Python, C. Bolz</a>.</li>
<li><a href="https://arxiv.org/abs/1106.2593">A Simple Multi-Processor
Computer Based on Subleq, O. Mazonka, A. Kolodin</a>.</li>
<li><a href="http://www.cse.psu.edu/~trj1/papers/ndss17.pdf">An Evil
Copy: How the Loader Betrays You</a> - About security issues related to
Dynamic Loading.</li>
<li><a href="http://scheme2006.cs.uchicago.edu/11-ghuloum.pdf">An
Incremental Approach to Compiler Construction</a>.</li>
<li><a href="https://www.cs.indiana.edu/~dyb/pubs/fple95.pdf">Compiler
Construction Using Scheme, E. Hilsdale, J. Ashley, R. Dybvig &amp; D.
Friedman</a>.</li>
<li><a
href="https://www.microsoft.com/en-us/research/wp-content/uploads/2007/10/compilingwithcontinuationscontinued.pdf">Compiling
with Continuations: Continued, A. Kennedy</a>.</li>
<li><a
href="http://www.cs.uml.edu/~giam/91.531/Textbooks/definterp.pdf">Definitional
Interpreters for Higher-Order Programming Languages, J.
Reynolds</a>.</li>
<li><a
href="http://drops.dagstuhl.de/opus/volltexte/2015/5034/pdf/24.pdf">Draining
the Swamp: Micro Virtual Machines as Solid Foundation for Language
Development, K. Wang, Y. Lin, S. Blackburn, M. Norrish &amp; A.
Hosking</a>.</li>
<li><a href="https://www.cs.tufts.edu/~nr/pubs/interps.pdf">Engineering
Definitional Interpreters, J. Midtgaard, N. Ramsey, B. Larsen</a>.</li>
<li><a
href="https://pdfs.semanticscholar.org/6434/aa10f3745dcf959cfca9c379aae120396724.pdf?_ga=2.133026126.1710272003.1495044697-300816831.1495044697">Garbage
Collection in an Uncooperative Environment, H. Boehm, M.
Weiser</a>.</li>
<li><a href="https://kirschju.re/static/ba_jonischkeit_2016.pdf">Machine
Code Obfuscation via Instruction Set Reduction and CFG Linearization, C.
Jonischkeit</a>.</li>
<li><a
href="https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf"><code>MOV</code>
is Turing-Complete, S. Dolan</a>.
<ul>
<li>Discussions: <a
href="https://news.ycombinator.com/item?id=6309631">HN</a>, <a
href="https://redd.it/1nft0x">Reddit</a>.</li>
</ul></li>
<li><a
href="https://www.cs.indiana.edu/~dyb/pubs/commercial-nanopass.pdf">Nanopass
Framework for Commercial Compiler Development, A. Keep &amp; R.
Dybvig</a>.</li>
<li><a href="https://www.cs.indiana.edu/~dyb/pubs/nano-jfp.pdf">Nanopass
Framework for Compiler Education, D. Sarkar, O. Waddell &amp; R.
Dybvig</a>.</li>
<li><a href="http://www.cs.umb.edu/%7Eoffner/files/flow_graph.pdf">Notes
on Graph Algorithms Used in Optimizing Compilers, C. Offner</a>.</li>
<li><a href="https://pdos.csail.mit.edu/~baford/packrat/thesis/">Packrat
Parsing Thesis on PEG, B. Ford</a>.</li>
<li><a href="http://www.vpri.org/pdf/tr2010003_PEG.pdf">PEG-based
transformer provides front-end, middle-end and back-end stages in a
simple Compiler, I. Piumarta</a>.</li>
<li><a
href="http://homes.soic.indiana.edu/samth/pycket-draft.pdf">Pycket: A
Tracing JIT for a Functional Language</a>.</li>
<li><a
href="http://www.csc.lsu.edu/~gb/csc7700/Reading/pypy-vm-construction.pdf">PyPys
Approach to VM Construction, A. Rigo &amp; S. Pedroni</a>.</li>
<li><a
href="http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AITR-474.pdf">RABBIT:
A Compiler for SCHEME, G. Steele</a>.</li>
<li><a
href="http://compilers.cs.uni-saarland.de/projects/ssaconstr/">Simple
and Efficient Construction of SSA Form</a>.</li>
<li><a
href="http://compilers.cs.uni-saarland.de/projects/ssara/">SSA-based
Register Allocation, S. Hack &amp; G. Goos</a>.</li>
<li><a href="https://users.soe.ucsc.edu/~cormac/papers/pldi93.pdf">The
Essence of Compiling with Continuations, C. Flanagan, A. Sabry, B. Duba
&amp; M. Felleisen</a>.</li>
<li><a
href="https://www.usenix.org/system/files/conference/woot13/woot13-bangert.pdf">The
Page-Faults Weird Machine: Lessons in Instruction-less Computation, J.
Bangert, S. Bratus, R. Shapiro, S. Smith</a>.</li>
<li><a
href="http://files.catwell.info/misc/mirror/tracing-jit-haskell-schilling.pdf">Trace-based
JIT Compilation for Lazy Functional Languages, T. Schilling</a>.</li>
<li><a
href="https://people.csail.mit.edu/mcarbin/papers/aplas05.pdf">Using
Datalog with Binary Decision Diagrams for Program Analysis, J. Whaley,
D. Avots, M. Carbin &amp; M. Lam</a>.</li>
</ul>
<h4 id="researchers-and-institutes">Researchers and Institutes</h4>
<ul>
<li><a href="https://scholar.google.com/citations?user=S0rpYpkAAAAJ">C.
Bolzs Research Publications</a>.</li>
<li><a href="http://compilers.cs.uni-saarland.de">Compilers Lab at
Saarland University</a>.</li>
<li><a href="http://pllab.is.ocha.ac.jp/%7Easai/papers/">Kenichi
Asai</a>.</li>
<li><a href="http://bford.info/packrat/">Packrat Parsing (PEG) Papers
and Resources</a>.</li>
</ul>
<h3 id="specifications">Specifications</h3>
<ul>
<li><a
href="http://www.ecma-international.org/publications/standards/Ecma-335.htm">CLI
(ECMA-335) Specification</a>.</li>
<li><a href="https://gitlab.anu.edu.au/mu/mu-spec">Mu
Specification</a>.</li>
<li><a href="https://docs.oracle.com/javase/specs/jvms/se8/html/">JVM
SE8 Specification</a>.</li>
</ul>
<h3 id="courses">Courses</h3>
<ul>
<li><a
href="http://www.cl.cam.ac.uk/teaching/1516/CompConstr/materials.html">Compilers
Construction, Cambridge</a> - Introduction to compiler construction
course from the University of Cambridge.</li>
<li><a href="https://www.clear.rice.edu/comp412/Lectures/">Compiler
Construction for Undergrads, RICE University</a> - Introduction to
compiler construction and language translators course from the RICE
University.</li>
<li>Compilers Theory, Stanford - <a
href="https://www.youtube.com/playlist?list=PLLH73N9cB21VSVEX1aSRlNTufaLK1dTAI">YouTube</a>,
<a
href="https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/">Stanford.edu</a>,
<a href="http://web.stanford.edu/class/cs143/">Class Notes</a>
-Introduction to Compilers theory and construction course from
Stanford.</li>
<li><a href="https://lambda.uta.edu/cse5317/">Design and Construction of
Compilers, University of Texas</a> - Design and construction of
compilers including lexical analysis, parsing, code generation
techniques, error analysis and simple code optimizations.
<ul>
<li>Lecture Notes: <a
href="https://lambda.uta.edu/cse5317/notes.pdf">PDF</a>, <a
href="https://lambda.uta.edu/cse5317/long/long.html">HTML</a>.</li>
</ul></li>
<li><a href="http://vjovanov.github.io/dsldi-summer-school/">DSL Design
and Implementation Summer School</a> - Summer School program on the
topics of DSL Design and Implementation hosted by the EPFL
University.</li>
<li><a href="http://www.cs.cmu.edu/~fp/courses/15312-f04/">Foundations
of Programming Languages</a> - Concepts that underlie the design,
definition, implementation and use of modern programming languages from
a formal standpoint.</li>
<li><a href="https://www.coursera.org/learn/nand2tetris2">Nand2Tetris:
How to Build a Computer from First Principles, Part 2</a> - 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.</li>
<li><a
href="https://www.youtube.com/playlist?list=PLbMVogVj5nJQNjkHZgwuAlfQ9tzmQDxjA">NPTELs
Principles of Compiler Design Course</a> - Introductory course from
NPTEL on Compiler Design.</li>
<li><a href="http://nptel.ac.in/courses/106108052/32">NPTELs Compiler
Design Course</a> - Slightly more advanced course than their Principles
of Compiler Design course, covers SSA Form to a good degree.
<ul>
<li><a
href="https://www.youtube.com/playlist?list=PLbMVogVj5nJTmKzaSlCpGgi7qxgcRRs8h">YouTube
Video Playlist</a>.</li>
</ul></li>
<li><a
href="https://www.coursera.org/learn/programming-languages">Programming
Languages: Part A, by Grossman</a> - Part 1 of a 3-part course series to
the basic concepts of programming languages, with a strong emphasis on
functional programming.</li>
<li><a
href="https://www.coursera.org/learn/programming-languages-part-b">Programming
Languages: Part B, by Grossman</a> - Part 2 of a 3-part course series to
the basic concepts of programming languages, with a strong emphasis on
functional programming.</li>
<li><a
href="https://www.coursera.org/learn/programming-languages-part-c">Programming
Languages: Part C, by Grossman</a> - Part 3 of a 3-part course series to
the basic concepts of programming languages, with a strong emphasis on
functional programming.</li>
<li><a
href="https://www.cs.uoregon.edu/research/summerschool/summer15/curriculum.html">Types,
Logic, Semantics, and Verification from Oregon Universitys Summer
School</a> - Summer School program that consists of 80 minute lectures
presented by internationally recognized leaders in programming languages
and formal reasoning research.</li>
<li><a href="http://www.wolczko.com/CS294/">Virtual Machines and Managed
Runtimes, UCB CS294</a> - Introductory course on Virtual Machines and
Managed Runtimes from the University of Berkeley.</li>
<li><a href="http://soft-dev.org/events/vmss16/">Virtual Machines Summer
School 2016 (VMSS 2016)</a> - VMSS is a Summer School program that aims
to give an overview of the field, targeted at early career researchers.
<ul>
<li><a
href="https://www.youtube.com/playlist?list=PLJq3XDLIJkib2h2fObomdFRZrQeJg4UIW">YouTube
Videos Playlist</a>.</li>
</ul></li>
</ul>
<h3 id="talks-and-conferences">Talks and Conferences</h3>
<h4 id="channels">Channels</h4>
<ul>
<li><a href="http://www.curry-on.org/">Curry On! Conference</a> -
Programming Languages Conference.
<ul>
<li><a
href="https://www.youtube.com/channel/UC-WICcSW1k3HsScuXxDrp0w/videos">YouTube
Channel</a>.</li>
</ul></li>
<li><a
href="https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012">Lang.NEXT
Conference 2012</a>.</li>
<li><a
href="https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2014">Lang.NEXT
Conference 2014</a>.</li>
<li><a
href="https://www.youtube.com/channel/UCv2_41bSAa5Y_8BacJUZfjQ">LLVM
Developers Meeting YouTube Channel</a>.</li>
</ul>
<h4 id="videos">Videos</h4>
<ul>
<li><a
href="https://channel9.msdn.com/Blogs/Seth-Juarez/Anders-Hejlsberg-on-Modern-Compiler-Construction">Anders
Hejlsberg on Modern Compiler Construction</a>.</li>
<li><a href="https://www.youtube.com/watch?v=GawiQQCn3bk">An
Introduction to Combinator Compilers and Graph Reduction
Machines</a>.</li>
<li><a href="https://www.youtube.com/watch?v=9tDpjzPLvNY">Building an
Interpreter in RPython</a>.</li>
<li><a href="http://pgbovine.net/cpython-internals.htm">CPython - A
Ten-Hour Codewalk</a>.</li>
<li><a
href="https://ep2016.europython.eu/media/conference/slides/exploring-python-bytecode.pdf">Exploring
Pythons Bytecode</a>.</li>
<li><a href="https://www.youtube.com/watch?v=OjaAToVkoTw">How to Build a
Virtual Machine</a> - 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.</li>
<li><a href="https://2016.javazone.no/program/java-aot-compilation">Java
AOT (Ahead of Time) Compilation</a>.</li>
<li><a
href="https://skillsmatter.com/skillscasts/4916-metascala-a-tiny-diy-jvm">MetaScala:
A Tiny DIY JVM</a> - Metascala is a tiny metacircular Java Virtual
Machine (JVM) written in the Scala programming language.</li>
<li><a
href="https://ia601503.us.archive.org/32/items/vmss16/bolz.pdf">Meta-Tracing,
RPython and PyPy</a>.</li>
<li><a href="https://www.youtube.com/watch?v=FJY96_6Y3a4">One VM to Rule
Them All, One VM to Bind Them</a> - Tutorial on the Truffel
technology.</li>
<li><a href="https://www.youtube.com/watch?v=SrKj4hYic5A">Programming
Should Eat Itself</a> - StrangeLoop Talk on Reflective Programming and
Kenichi Asais Black Programming Language.</li>
<li><a href="https://www.youtube.com/watch?v=twQKAoq2OPE">Python,
Linkers and Virtual Memory - PYCON US</a>.</li>
<li><a href="https://youtube.com/watch?v=fWqBmmPQP40">Reverse
Engineering the MOS 6502 CPU</a>.</li>
<li><a href="http://compilers.cs.uni-saarland.de/ssasem/">Single Static
Assignment Form Seminar</a> - Introductory seminar on SSA Form, Compiler
Optimizations under it and its applications in other areas such as
Program Analysis and Verification.</li>
<li><a href="https://www.youtube.com/watch?v=ZBJ0u9MaKtM">The JVM (Java
Virtual Machine) Architecture</a>.</li>
<li><a href="https://www.youtube.com/watch?v=OyfBQmvr2Hc">The Most
Beautiful Program Ever Written</a> - William Byrd on a Lisp interpreter
written in 15 lines of Lisp.</li>
<li><a href="https://www.youtube.com/watch?v=R7EEoWg6Ekk">The
MoVfuscator: turning mov into a soul crushing RE nightmare</a>.
<ul>
<li>Discussions: <a
href="https://news.ycombinator.com/item?id=9751312">HN</a>, <a
href="https://redd.it/4zl8mh">Reddit</a>.</li>
</ul></li>
<li>The SSA Form - Video Lectures from NPTELs Compilers Course (see: <a
href="#courses">Courses</a> for more info):
<ul>
<li><a href="https://www.youtube.com/watch?v=Q7hlcuCGbxE">Part
1</a>.</li>
<li><a href="https://www.youtube.com/watch?v=FV9fq_HfPsM">Part
2</a>.</li>
<li><a href="https://www.youtube.com/watch?v=GyYiic8trCE">Part
3</a>.</li>
</ul></li>
<li><a href="https://www.youtube.com/watch?v=X36ye-1x_HQ">Type-Driven
Development with Idris</a>.</li>
<li><a href="https://www.youtube.com/watch?v=FnGCDLhaxKU">Understanding
Compiler Optimization</a>.</li>
</ul>
<h3 id="articles">Articles</h3>
<ul>
<li><a href="https://blog.regehr.org/archives/1453">A Tourists Guide to
the LLVM Source Code</a>.</li>
<li><a
href="http://beza1e1.tuxen.de/articles/accidentally_turing_complete.html">Accidentally
Turing Complete</a>.</li>
<li>Adventures in JIT Compilation by Eli Bendersky:
<ul>
<li><a
href="http://eli.thegreenplace.net/2017/adventures-in-jit-compilation-part-1-an-interpreter/">Part
1 - An Interpreter</a>.</li>
<li><a
href="http://eli.thegreenplace.net/2017/adventures-in-jit-compilation-part-2-an-x64-jit/">Part
2 - An x64 JIT</a>.</li>
<li><a
href="http://eli.thegreenplace.net/2017/adventures-in-jit-compilation-part-3-llvm/">Part
3 - LLVM</a>.</li>
<li><a
href="http://eli.thegreenplace.net/2017/adventures-in-jit-compilation-part-4-in-python/">Part
4 - In Python</a>.</li>
</ul></li>
<li><a href="https://blog.regehr.org/archives/1170">ALIVe: Automatic
LLVM InstCombine Verifier</a>.</li>
<li><a href="https://blog.plan99.net/graal-truffle-134d8f28fb69">Graal
and Truffel</a> - Obscure research project could radically accelerate
innovation in programming language design.
<ul>
<li>Discussions: <a href="https://redd.it/4tm4mj">Reddit</a>.</li>
</ul></li>
<li><a href="http://matt.might.net/articles/cps-conversion/">How to
Compile with Continuations</a>.</li>
<li><a
href="https://nickdesaulniers.github.io/blog/2015/05/25/interpreter-compiler-jit/">Interpreter,
Compiler and JIT</a>.</li>
<li><a
href="https://webkit.org/blog/5852/introducing-the-b3-jit-compiler/">Introducing
the B3 JIT Compiler</a>.</li>
<li><a href="http://www.aosabook.org/en/llvm.html">LLVM Architecture</a>
- Chapter from the book Architecture of Open Source Applications.</li>
<li><a href="http://www.cs.cornell.edu/~asampson/blog/llvm.html">LLVM
for Graduate Students</a> - Introduction to doing research with the LLVM
compiler infrastructure.</li>
<li><a
href="http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/">Pratt
Parsers: Expression Parsing Made Easy</a>.</li>
<li><a
href="https://gchp.ie/2016/08/09/rust-compiler-walkthrough-introduction/">Rust
Compiler Walk-Through</a>.</li>
<li><a
href="https://blog.rust-lang.org/2016/09/08/incremental.html">Rusts
Incremental Compilation</a>.</li>
<li><a href="https://blog.rust-lang.org/2016/04/19/MIR.html">Rusts
Upcoming MIR</a>.</li>
<li><a href="http://canonical.org/~kragen/memory-models/">The Memory
Models that Underlie Programming Languages</a>.</li>
</ul>
<h3 id="tutorials">Tutorials</h3>
<ul>
<li><a href="https://www.andres-loeh.de/LambdaPi/">A Tutorial
Implementation of a Dependently Typed Lambda Calculus</a>.</li>
<li><a href="http://www.lurklurk.org/linkers/linkers.html">A Beginners
Guide to Linkers</a> - Tutorial for helping C &amp; C++ programmers
understand the essentials of what the linker does.</li>
<li><a
href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.65.7733&amp;rep=rep1&amp;type=pdf">Algorithm
W Step By Step</a>.</li>
<li><a
href="https://www.uraimo.com/2017/02/05/building-a-lisp-from-scratch-with-swift/">Building
a LISP from scratch with Swift</a>.</li>
<li><a href="https://www.youtube.com/watch?v=SfV8aRX0YY0">Compiler
Optmization Tutorial</a>.</li>
<li><a
href="https://github.com/quchen/articles/tree/master/hindley-milner">Hindley-Damas-Milner
Tutorial</a> - Extensively documented walkthrough for typechecking a
basic functional language using the Hindley-Damas-Milner algorithm.</li>
<li><a
href="https://medium.com/@william01110111/the-programming-language-pipeline-91d3f449c919">How
I Wrote a Programming Language, and How You Can Too</a>.
<ul>
<li>Discussions: <a href="https://redd.it/62ixbc">Reddit</a>.</li>
</ul></li>
<li><a href="http://www.stephendiehl.com/llvm/">Implementing a JIT
Compiled Language with Haskell and LLVM</a>.</li>
<li><a
href="http://llvm.org/docs/tutorial/index.html#kaleidoscope-implementing-a-language-with-llvm-in-objective-caml">Kaleidoscope:
Implementing a Language with LLVM in Objective Caml</a>.</li>
<li><a href="https://ruslanspivak.com/lsbasi-part1/">Lets Build A
Simple Interpreter</a>.</li>
<li><a href="http://lisperator.net/pltut/">Lisperator</a> - How to
implement a programming language in JavaScript.</li>
<li><a
href="https://maryrosecook.com/blog/post/little-lisp-interpreter">Little
Lisp Interpreter</a> - Interpreter that supports function invocation,
lambdas, lets, ifs, numbers, strings, a few library functions, and lists
in under 120 lines of JavaScript.
<ul>
<li><a href="https://github.com/maryrosecook/littlelisp">GitHub
Repository</a>.</li>
</ul></li>
<li><a href="http://norvig.com/lispy.html"><code>lis.py</code>, v1: (How
to Write a (Lisp) Interpreter (in Python))</a> - Tutorial by Peter
Norvig on writing a simple Lisp interpreter.</li>
<li><a href="http://norvig.com/lispy2.html"><code>lis.py</code>, v2: An
((Even Better) Lisp) Interpreter (in Python)</a> - Follow-up tutorial by
Peter Norvig on making <code>lis.py</code> slightly better.</li>
<li><a
href="http://releases.llvm.org/3.6.2/docs/tutorial/LangImpl1.html">LLVM
Tutorial: Implementing Kaleidoscope</a>.
<ul>
<li><a
href="http://www.llvmpy.org/llvmpy-doc/dev/doc/kaleidoscope/index.html">Python
version with LLVMPY</a>.</li>
</ul></li>
<li><a
href="http://www.bayfronttechnologies.com/mc_tutorial.html">Metacompiler
Tutorial, Part 1</a>.</li>
<li><a href="http://eloquentjavascript.net/11_language.html">Project: A
Programming Language</a> - Chapter 11 from the book <em>Eloquent
JavaScript</em>, 2nd Edition.</li>
<li><a href="http://dev.stephendiehl.com/fun/">Write You a
Haskell</a>.</li>
<li><a href="http://cesquivias.github.io/tags/truffle.html">Writing a
Language in Truffel</a> - Interpreter development tutorial using
Truffel, by Cristian Esquivias.</li>
</ul>
<h3 id="community-discussions">Community Discussions</h3>
<ul>
<li><a
href="https://meta.stackexchange.com/questions/25840/can-we-stop-recommending-the-dragon-book-please">Can
we stop recommending the Dragon Book, please?</a> - StackExchange thread
criticising the <a href="https://www.amazon.com/dp/0321486811">Dragons
Book</a> in favor of alternatives.</li>
<li><a
href="http://stackoverflow.com/questions/1044600/difference-between-an-ll-and-recursive-descent-parser">What
is difference between an LL and Recursive Descent parser?</a>.</li>
<li>Does a compiler use all x86 instructions? - <a
href="https://news.ycombinator.com/item?id=12352959"><span
class="citation" data-cites="HN">@HN</span></a>, <a
href="https://redd.it/4zgawj"><span class="citation"
data-cites="Reddit">@Reddit</span></a> - Article discussions on HN and
Reddit.</li>
<li><a href="https://redd.it/4o7qag">How to Write a Compiler</a> -
Article discussion on Reddit.</li>
<li><a
href="https://softwareengineering.stackexchange.com/questions/165543/how-to-write-a-very-basic-compiler">How
to Write a Very Basic Compiler</a>.</li>
<li><a
href="https://cs.stackexchange.com/questions/6618/how-to-implement-a-prolog-interpreter-in-a-purely-functional-language">How
to Write a Prolog Interpreter in a Purely Functional Language</a>.
<ul>
<li>Discussions: <a href="https://redd.it/4u2xt3">Reddit</a>.</li>
</ul></li>
<li><a
href="http://stackoverflow.com/questions/415532/implementing-type-inference">Implementing
Type Inference</a>.</li>
<li><a
href="https://softwareengineering.stackexchange.com/questions/178224/i-want-to-build-a-virtual-machine-are-there-any-good-references">I
want to build a VM, any good references?</a>.</li>
<li><a href="https://redd.it/4u15t1">Resources for Amatuer Compilers
Writers</a>.</li>
<li><a
href="http://stackoverflow.com/questions/1621899/what-are-the-good-open-source-implementations-of-java-virtual-machine">What
are the good open source implementations of Java Virtual
Machine?</a>.</li>
<li><a
href="https://www.quora.com/What-are-the-latest-research-trends-in-compilers-and-programming-languages">What
are the latest research trends in Compilers and PLs</a>.</li>
</ul>
<h2 id="tools-and-frameworks">Tools and Frameworks</h2>
<h3 id="language-agnostic">Language Agnostic</h3>
<ul>
<li><a href="https://webkit.org/docs/b3/">B3: The Bare Bones Backend</a>
- WebKits optimizing JIT Compiler for procedures containing C-like
code.</li>
<li><a href="https://github.com/aquynh/capstone">Capstone</a> -
Lightweight multi-platform, multi-architecture disassembly framework
with bindings to various famous programming languages.</li>
<li><a href="https://github.com/keystone-engine/keystone">Keystone</a> -
Lightweight multi-platform, multi-architecture assembler framework with
bindings to various famous programming languages.</li>
<li><a href="https://github.com/dotnet/llilc">LLILCL</a> - LLVM-based
Compiler Backend for .NET Core.</li>
<li><a href="http://llvm.org/">LLVM</a> - The LLVM Compiler-Backend
Framework.</li>
<li><a href="http://microvm.github.io/">MicroVM</a> - The “Mu” Framewrok
for Programming Languages development based on the MuVM
Specification.</li>
<li><a href="https://github.com/xoreaxeaxeax/movfuscator">Movfuscator
Compiler</a> - The <code>M/o/Vfuscator</code> compiles programs into
“mov” instructions, and only “mov” instructions.</li>
<li><a href="http://c9x.me/compile/">QBE: The Quick Backend</a> - Pure C
embeddable SSA-based compiler backend.</li>
<li><a href="https://github.com/rubinius/rubinius">Rubinius</a> -
Programming Languages Development Platform.</li>
<li><a href="https://github.com/igor84/summus">Summus</a> - Basic,
reusable, compiler-frontend implementation using LLVM as a backend.</li>
<li><a href="https://github.com/zetavm/zetavm">ZetaVM</a> -
Multi-Language Platform for Dynamic Programming Languages.</li>
</ul>
<h3 id="c-c">C / C++</h3>
<ul>
<li><a href="https://github.com/asmjit/asmjit">AsmJIT</a> - Complete
x86/x64 JIT and Remote Assembler for C++.</li>
<li><a href="https://gcc.gnu.org/">GCC</a> - The GNU Compiler Collection
(C as a Backend).</li>
<li><a href="https://github.com/drh/lcc">LCC</a> - The lcc retargetable
ANSI C compiler (C as a Backend).</li>
<li><a href="http://pp.ipd.kit.edu/firm/">libFirm</a> - C-library that
provides a graph-based intermediate representation, optimizations, and
assembly code generation suitable for use in compilers.</li>
<li><a href="https://www.gnu.org/software/libjit/">libJIT</a> - Library
for generic Just-In-Time compiler functionality independent of any
particular bytecode, language, or runtime.</li>
<li><a href="http://myjit.sourceforge.net/">myJIT</a> - Library for
machine-code generation and execution at run-time.</li>
<li><a href="http://github.com/LADSoft/OrangeC">OrangeC</a> - Win32
C11/C++2014 compiler and toolchain.</li>
<li><a href="http://pcc.ludd.ltu.se/">PCC</a> - The Portable C Compiler
(C as a Backend).</li>
<li><a href="http://www.colm.net/open-source/ragel/">Ragel</a> - Ragel
State Machine Compiler.</li>
<li><a href="http://bellard.org/tcc/">TCC</a> - The Tiny C Compiler (C
as a Backend).</li>
</ul>
<h3 id="clr">CLR</h3>
<ul>
<li><a
href="http://www.mono-project.com/docs/tools+libraries/libraries/Mono.Cecil/">Cecil</a>
- Library to generate and inspect programs and libraries in the ECMA CIL
format.</li>
<li><a href="https://github.com/LADSoft/DotNetPELib">DotNetPELib</a> -
Library to read and write .net assemblies in C++11</li>
<li><a href="http://ilspy.net">ILSpy</a> - .NET Decompiler.</li>
<li><a
href="http://www.red-gate.com/products/dotnet-development/reflector/">Reflector</a>
- .NET Decompiler.</li>
<li><a href="http://sebastien.lebreton.free.fr/reflexil/">Reflexil</a> -
Assembly code editor which can be used as a plugin with other .NET/CLR
tools.</li>
</ul>
<h3 id="d">D</h3>
<ul>
<li><a href="https://github.com/pwil3058/dunnart">dunnart</a> - LALR(1)
Parser Generator.</li>
<li><a
href="https://github.com/UplinkCoder/FancyPars-lite">FancyPars-lite</a>
- Fast parser generator.</li>
<li><a href="https://github.com/dlang-community/libdparse">libdparse</a>
- Library allowing to build lexers and parsers. Contains a lexer and a
parser for the D language itself.</li>
<li><a href="https://github.com/Calrama/llvm-d">llvm-d</a> - D bindings
for LLVM.</li>
<li><a href="https://github.com/PhilippeSigaud/Pegged">Pegged</a> -
design, test and generate parsers for PEG grammars.</li>
</ul>
<h3 id="go">Go</h3>
<ul>
<li><a href="https://godoc.org/golang.org/x/tools/cmd/goyacc">goyacc</a>
- YACC Implementation in Go. Standard LALR(1) parser generator.</li>
<li><a href="https://godoc.org/llvm.org/llvm/bindings/go/llvm">LLVM Go
binding</a> - Official Go LLVM binding.</li>
</ul>
<h3 id="graal">Graal</h3>
<ul>
<li><a href="https://github.com/graalvm/graal">Graal</a> -
High-Performance Polyglot Runtime.</li>
<li><a href="https://github.com/graalvm/graal-core">Graal Core</a> -
Compiler and Truffel Partial Evaluator.</li>
<li><a href="https://github.com/graalvm/graalvm">Graal VM</a> - Graals
multi-language VM distribution.</li>
</ul>
<h3 id="haskell">Haskell</h3>
<ul>
<li><a href="https://github.com/ekmett/bound/">Bound</a> / <a
href="https://github.com/sweirich/replib">unbound</a> / <a
href="https://github.com/lambdageek/unbound-generics">unbound-generics</a>
- Libraries for manipulating bound variables.</li>
<li><a href="https://github.com/haskell/hoopl">Hoopl</a> - Higher-order
optimization library.</li>
<li><a href="https://github.com/bscarlet/llvm-general/">llvm-general</a>
- Haskell bindings for LLVM.</li>
<li><a href="https://github.com/aslatter/parsec">Parsec</a> / <a
href="https://github.com/bos/attoparsec">attoparsec</a> / <a
href="https://github.com/mrkkrp/megaparsec">Megaparsec</a> / <a
href="https://github.com/ekmett/trifecta/">Trifecta</a> / <a
href="https://github.com/simonmar/alex">Alex</a> + <a
href="https://github.com/simonmar/happy">Happy</a> - Parsers for every
use case.</li>
<li><a
href="https://github.com/ivan-m/wl-pprint-text">wl-pprint-text</a> / <a
href="https://github.com/batterseapower/ansi-wl-pprint">ansi-wl-pprint</a>
- Walder-style pretty-printing libraries.</li>
</ul>
<h3 id="javascript">JavaScript</h3>
<ul>
<li><a href="http://mrale.ph/irhydra/2/">IRHudra</a> - Tool for
displaying intermediate representations used by V8 and Dart VM
optimizing compilers.
<ul>
<li><a href="https://github.com/mraleph/irhydra">GitHub Repo</a>.</li>
</ul></li>
<li><a href="http://zaa.ch/jison/docs/">JISON</a> - Context-free grammar
parser generator for JavaScript.
<ul>
<li><a href="https://github.com/GerHobbelt/jison">GerHobbelt/jison</a> -
active fork of jison with bunch of improvements.<br />
</li>
</ul></li>
<li><a href="https://github.com/Hardmath123/nearley">Nearley</a> -
Simple, fast, powerful parser toolkit for JavaScript.</li>
<li><a href="https://github.com/harc/ohm">Ohm</a> - A library and
language for building parsers, interpreters, compilers, etc.</li>
<li><a href="https://pegjs.org">PEG.js</a> - Simple parser generator for
JavaScript.</li>
</ul>
<h3 id="jvm">JVM</h3>
<ul>
<li><a href="http://www.antlr.org">ANTLR</a> - Parser generator for
reading, processing, executing, or translating structured text or binary
files.</li>
<li><a href="http://byaccj.sourceforge.net">BYAAC/J</a> - BYACC/Java is
an extension of the Berkeley v 1.8 YACC-compatible parser generator for
Java.</li>
<li><a href="https://github.com/cglib/cglib">CGLIB</a> - High level API
library for generating and transforming Java Byte Code.</li>
<li><a href="http://wiki.freepascal.org/FPC_JVM">FCP JVM</a> - JVM
Backend for generating Java Byte Code that conforms to the JDK v1.5+
Specification and the Dalvik VM.</li>
<li><a href="https://javacc.org">JavaCC</a> - Java Compiler Construction
and Parser Generator Toolkit.</li>
<li><a
href="https://github.com/bytedeco/javacpp-presets/tree/master/llvm">JavaCPP
Presets for LLVM</a> - Library for easily interacting with the LLVM
API.</li>
<li><a href="http://www.jflex.de">JFlex</a> - JFlex is a lexical
analyzer generator for Java with full Unicode support.</li>
<li><a
href="http://www.cs.princeton.edu/~appel/modern/java/JLex/">JLex</a> -
JLex is a lexical analyzer generator, that can be used in combination
with CUP.</li>
</ul>
<h3 id="kotlin">Kotlin</h3>
<ul>
<li><a href="https://github.com/norswap/whimsy">The Whimsy Compiler
Framework</a> - Compiler framework research project in Kotlin.</li>
</ul>
<h3 id="python">Python</h3>
<ul>
<li><a href="https://docs.python.org/3.5/library/ast.html">AST</a> -
Pythons builtin Abstract Syntax Tree package.</li>
<li><a href="https://docs.python.org/3.6/library/dis.html">Dis</a> -
Pythons builtin Disassembler package.</li>
<li><a href="http://www.canonware.com/Parsing/">Parsing</a> -
Pure-Python module that implements an LR(1) parser generator, as well as
CFSM and GLR parser drivers.</li>
<li><a href="http://www.dabeaz.com/ply/">PLY</a> - Implementation of lex
and yacc parsing tools for Python.</li>
<li><a href="http://pyparsing.wikispaces.com/">PyParsing</a> -
Alternative approach to creating and executing simple grammars, vs. the
traditional lex/yacc approach, or the use of regular expressions.</li>
<li><a href="https://github.com/alex/rply">RPLY</a> - Port of the PLY
project to RPython.</li>
<li><a href="https://rpython.readthedocs.io/en/latest/">RPython</a> -
RPython is a framework for the implementatation of dynamic
languages.</li>
</ul>
<h4 id="lists-of-python-parsing-tools">Lists of Python Parsing
Tools</h4>
<ul>
<li><a href="https://wiki.python.org/moin/LanguageParsing">List of
Language Parsing Tools at the Python Wiki</a>.</li>
<li><a href="http://nedbatchelder.com/text/python-parsers.html">Survey
of Python Parsers, by Ned Batchelder</a>.</li>
</ul>
<h3 id="rust">Rust</h3>
<ul>
<li><a href="https://github.com/Marwes/combine">Combine</a> - Parser
Combinator Library for Rust.</li>
<li><a href="https://github.com/jauhien/iron-llvm">IronLLVM</a> - Safe
LLVM bindings for Rust.</li>
<li><a href="https://github.com/nikomatsakis/lalrpop">LALRPOP</a> -
LR(1) parser generator for Rust.</li>
<li><a href="https://github.com/Geal/nom">Nom</a> - Parser Combinator
Framework.</li>
<li><a href="https://github.com/kevinmehall/rust-peg">PEG</a> - PEG
Parser Generator.</li>
<li><a href="https://github.com/pest-parser/pest">Pest</a> - PEG Parser
Generator.</li>
<li><a href="https://github.com/rust-lang-nursery/rls">RLS</a> - The
Rust Language Server implementation (aka RLS).</li>
</ul>
<h2 id="compilers-and-interpreters">Compilers and Interpreters</h2>
<p><em>This section aims at listing code projects of Compilers,
Interpreters, Translators, Runtimes, Virtual Machines and the
like.</em></p>
<h3 id="serious-projects">Serious Projects</h3>
<ul>
<li><a href="https://github.com/babel/babel">Babel.js</a> -
Next-generation JavaScript Compiler.</li>
<li><a href="https://github.com/facebookincubator/BOLT">BOLT</a> -
Binary Optimization and Layout Tool.</li>
<li><a href="https://github.com/cisco/ChezScheme">ChezSchemes
Compiler</a> - ChezScheme Language Compiler.</li>
<li><a href="https://github.com/ELENA-LANG/elena-lang">ELENA
Compiler</a> - Elena programming language.</li>
<li><a href="https://github.com/typelead/eta">Eta Compiler</a> -
JVM-based Compiler for the Eta Programming Language.</li>
<li><a href="https://github.com/Frege/frege">Freges Compiler</a> -
JVM-based Compiler for the Frege Programming Language.</li>
<li><a href="https://github.com/gluon-lang/gluon">Gluons Compiler</a> -
Embedded Language Compiler written in Rust.</li>
<li><a href="https://github.com/facebook/hhvm">HHVM</a> - Virtual
Machine for running programs written in Hack and PHP.</li>
<li><a href="https://github.com/FascinatedBox/lily">Lilys
Interpreter</a>.</li>
<li><a href="https://github.com/LuaDist/lua">Luas Interpreter</a> -
Official Lua Language Interperter.
<ul>
<li><a href="http://stevedonovan.github.io/lua-5.1.4/">Luas Annotated
Source Code</a> - Annotated source code of the Lua Programming Language
Interpreter v5.1.4.</li>
</ul></li>
<li><a href="https://github.com/mirah/mirah">Mirahs Compiler</a> -
JVM-based Compiler for the Mirah Programming Language.</li>
<li><a href="https://github.com/nim-lang/Nim">Nims Compiler</a>.</li>
<li><a href="https://github.com/p-org/P">P Lang</a> - The P Programming
Language Runtime.</li>
<li><a href="https://github.com/red/red">Reds Compiler</a>.</li>
<li><a href="https://github.com/dotnet/roslyn">Roslyn</a> - The .NET
“Roslyn” Compiler Platform.</li>
<li><a
href="https://github.com/LADSoft/Simple-MSIL-Compiler">Simple-MSIL-Compiler</a>
- C compiler that compiles to CLR.</li>
<li><a href="https://github.com/Microsoft/TypeScript">TypeScripts
Compiler</a>.</li>
<li><a href="https://github.com/munificent/wren">Wrens
Compiler</a>.</li>
<li><a href="https://github.com/zig-lang/zig">Zigs Compiler</a> - Zig
Language Compiler.</li>
</ul>
<h3 id="educational-and-toy-projects">Educational and Toy Projects</h3>
<ul>
<li><a href="https://github.com/syegulalp/Akilang">Akilang</a> - A
compiler for a simple language, built with Python and LLVM</li>
<li><a href="https://github.com/jserv/amacc">amacc</a> - Small C
Compiler generating ELF executable for Arm architecture.
<ul>
<li>Discussions: <a
href="https://news.ycombinator.com/item?id=11411124">HN</a>.</li>
</ul></li>
<li><a href="http://www.is.ocha.ac.jp/~asai/Black/">Black</a> - Scheme
interpreter for the Reflective Programming Language “Black”, by Kenichi
Asais.
<ul>
<li>Other sources: <a
href="https://github.com/readevalprintlove/black">GitHub
Mirror</a>.</li>
</ul></li>
<li><a href="https://github.com/rswier/c4">C4</a> - C Lang in 4
Functions.
<ul>
<li>Discussions: <a
href="https://news.ycombinator.com/item?id=8558822">HN</a>.</li>
</ul></li>
<li><a href="https://github.com/tekknolagi/carp">CarpVM</a> -
Experimental VM implementation in C.</li>
<li><a href="https://github.com/charly-lang/charly">Charly</a> -
Interpreter for a dynamically typed language written in Crystal.</li>
<li><a href="https://github.com/tomhrr/dale">Dale</a> - Lisp-flavoured
C: a system programming language.</li>
<li><a href="https://github.com/erhanbaris/EasyLang">EasyLang</a> - Easy
Programming Language / VM.</li>
<li><a href="https://github.com/Eschelle/Eschelle">Eschelle</a> - Open
source cross platform multi-paradigm language with VM &amp; JIT</li>
<li><a href="https://github.com/tekknolagi/gecho">Gecho</a> -
Simple-stack language implementation in C.</li>
<li><a href="https://github.com/rhysd/gocaml">gocaml</a> - Minimal
functional programming language implementation in Go and LLVM.</li>
<li><a href="https://github.com/paivett/gone">gone</a> - Compiler for a
tiny programming language called Gone, implemented using Python 3.6, SLY
and llvmlite. Developed as part of the January 2018 <a
href="http://www.dabeaz.com/compiler.html">Write a compiler course</a>,
under the supervision of David Beazly.</li>
<li><a href="https://github.com/mattgreen/hython">Hython</a> -
Haskell-powered Python 3 interpreter.
<ul>
<li>Discussions: <a href="https://redd.it/46f8j4">Reddit</a>.</li>
</ul></li>
<li><a href="https://github.com/llvm-mirror/llgo">llgo</a> - Go frontend
for LLVM written in Go.</li>
<li><a href="https://github.com/kanaka/mal">MAL</a>: Make a Lisp -
Clojure-inspired Lisp interpreter implemented in 64 languages.</li>
<li><a href="https://github.com/lihaoyi/Metascala">MetaScala</a> -
Metacircular JVM implementation in Scala.</li>
<li><a href="https://github.com/maierfelix/mini-js">mini-js</a> -
Experimental self-hosted JavaScript compiler in 1K LoC.</li>
<li><a href="https://github.com/MunVM/MunVM">MunVM</a> - Lua VM &amp;
Compiler in C.</li>
<li><a href="https://github.com/paladin-t/my_basic">MY-BASIC</a> - An
embeddable BASIC dialect interpreter in C with modern paradigms.</li>
<li><a href="https://github.com/lboasso/oberonc">oberonc</a> - A single
pass, self-hosting compiler for the Oberon-07 programming language. It
targets the JVM.</li>
<li><a href="https://github.com/HackerFoo/poprc">Poprc</a> - Compiler
for the Popr Language.</li>
<li><a href="https://github.com/aalhour/PyCOOLC">PyCOOLC</a> - Compiler
for the COOL Programming Language written in Python 3.</li>
<li><a href="https://github.com/rabbitvm/rabbit">RabbitVM</a> -
RISC-based VM implementation in C.</li>
<li><a href="https://github.com/HPCguy/Squint">Squint</a> - A peephole
optimizer for educational compilers generating stack based
assembly.</li>
<li><a href="https://github.com/KCreate/stackvm">StackVM</a> - Virtual
Machine with an integrated VRAM display.</li>
<li><a href="https://github.com/dsturnbull/stack_cpu">stack_cpu</a> -
Stack-machine simulator.</li>
<li><a
href="https://github.com/thejameskyle/the-super-tiny-compiler">The Super
Tiny Compiler</a> - Tiny educational compiler project in JavaScript.
<ul>
<li>Discussions: <a
href="https://news.ycombinator.com/item?id=11395656">HN</a>.</li>
</ul></li>
<li><a
href="http://www.iro.umontreal.ca/~felipe/IFT2030-Automne2002/Complements/tinyc.c">tinyc.c</a>
- Tiny-C language compiler in C.</li>
<li><a href="https://github.com/raviqqe/tisp">tisp</a> - “Time is Space”
Programming Language Interpreter.</li>
<li><a href="https://github.com/antonmedv/ultra-tiny-compiler">Ultra
Tiny Compiler</a> - Another tiny compiler in less then 90 lines of
code.</li>
</ul>
<h2 id="runtimes-and-vms">Runtimes and VMs</h2>
<ul>
<li><a href="https://github.com/CakeML/cakeml">CakeML</a>.</li>
<li><a href="https://github.com/dotnet/coreclr">CoreCLR</a> - The .NETs
Common Language Runtime.</li>
<li><a href="https://github.com/erlang/otp">Erlang BEAM</a>.</li>
<li><a href="https://github.com/facebook/hhvm">HHVM</a> - Facebooks
Open Source VM for running Hack and PHP programs.</li>
<li><a href="http://www.ffconsultancy.com/ocaml/hlvm/">HLVM</a>.</li>
<li>JVM Implementations:
<ul>
<li><a href="http://openjdk.java.net/">OpenJDK</a>.</li>
<li><a href="https://github.com/kaffe/kaffe">Kaffe</a>.</li>
<li><a href="http://jamvm.sourceforge.net">JamVM</a> - <a
href="https://github.com/cfriedt/jamvm">GitHub project mirror</a>.</li>
<li><a href="https://harmony.apache.org/">Apache Harmony</a>.</li>
<li><a
href="https://en.wikipedia.org/wiki/List_of_Java_virtual_machines">Other
JVM Runtimes</a>.</li>
</ul></li>
</ul>
<h2 id="blogs">Blogs</h2>
<ul>
<li><a href="http://eli.thegreenplace.net/">Eli Bendersky</a>.</li>
<li><a href="https://blog.regehr.org/">John Regehr</a>.</li>
<li><a href="https://kristerw.blogspot.com/">Krister
Walfridsson</a>.</li>
<li><a href="http://lambda-the-ultimate.org">Lambda The
Ultimate</a>.</li>
<li><a href="http://llvm.org/devmtg/">LLVM Developers
Meetings</a>.</li>
<li><a href="http://llvmweekly.org/">LLVM Weekly</a> - Weekly newsletter
about LLVM.</li>
</ul>
<h2 id="communities">Communities</h2>
<ul>
<li><a href="https://www.reddit.com/r/Compilers">/r/Compilers</a> -
Subreddit community about the theory and development of compilers.</li>
<li><a
href="https://reddit.com/r/ProgrammingLanguages">/r/ProgrammingLanguages</a>
- Subreddit community that is dedicated to discussion of programming
languages, programming language theory, design, their syntax and
compilers.</li>
</ul>
<h2 id="verticals">Verticals</h2>
<ul>
<li><a
href="https://tomassetti.me/resources-create-programming-languages/">68
Resources for Creating Programming Languages</a>.</li>
<li><a href="https://github.com/mre/awesome-static-analysis">Awesome
Static Analysis</a>.</li>
<li><a
href="https://github.com/MattPD/cpplinks/blob/master/compilers.md#conferences">Compiler
Conferences, Workshops and Journals</a>.</li>
<li><a href="https://mohd-akram.github.io/languages/">Languages and
Compilers Network Graph</a>.</li>
<li><a href="http://minikanren.org">miniKanren.org</a> - Papers, Talks
and Implementations of miniKanren and microKanren.</li>
<li><a href="http://steshaw.org/plt/">PLT Enlightenment</a>.</li>
<li><a href="https://c9x.me/compile/bib/">Resources for Amateur Compiler
Writers</a>.</li>
<li><a href="http://www.dcs.gla.ac.uk/~jsinger/ssa.html">SSA Form
Bibliography</a>.</li>
<li><a
href="https://gist.github.com/biboudis/377b4a4de4d1718df2d0">Summer
Schools</a>.</li>
<li><a href="https://github.com/endrazine/wcc">The Witchcraft Compiler
Collection</a>.</li>
<li><a
href="https://github.com/williamdemeo/TypeFunc">TypeFunc</a>.</li>
</ul>
<h2 id="contributors">Contributors</h2>
<p><a href="https://github.com/aalhour/awesome-compilers/graphs/contributors">
<img src="https://contributors-img.firebaseapp.com/image?repo=aalhour/awesome-compilers" />
</a></p>
<p><br />
<!-- Made with [contributors-img](https://contributors-img.firebaseapp.com). --></p>
<h2 id="license">License</h2>
<p><a href="https://creativecommons.org/publicdomain/zero/1.0/"><img
src="http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg"
alt="CC0" /></a></p>
<p>To the extent possible under law, <a href="http://aalhour.com">Ahmad
Alhour</a> has waived all copyright and related or neighboring rights to
this work.</p>
<p>The logo was designed using <a
href="https://textcraft.net">TextCraft</a>.</p>
<p><a href="https://github.com/aalhour/awesome-compilers">compilers.md
Github</a></p>