awesome-compilers1
curated list of awesome resources on Compilers, Interpreters and Runtimes
https://github.com/eric-erki/awesome-compilers1
Last synced: 6 days ago
JSON representation
-
Learning
-
Talks and Conferences
- YouTube Channel
- Lang.NEXT Conference 2012
- Lang.NEXT Conference 2014
- LLVM Developers Meeting YouTube Channel
- Anders Hejlsberg on Modern Compiler Construction
- An Introduction to Combinator Compilers and Graph Reduction Machines
- Building an Interpreter in RPython
- CPython - A Ten-Hour Codewalk
- Exploring Python’s Bytecode
- How to Build a Virtual Machine - Terence Parr gives an idea of the core mechanisms behind virtual machines by building one, in front of your eyes, from scratch. It is the same kind of commercial interpreter he made for Renault cars.
- Java AOT (Ahead of Time) Compilation
- MetaScala: A Tiny DIY JVM - Metascala is a tiny metacircular Java Virtual Machine (JVM) written in the Scala programming language.
- Meta-Tracing, RPython and PyPy
- One VM to Rule Them All, One VM to Bind Them - Tutorial on the Truffel technology.
- Programming Should Eat Itself - StrangeLoop Talk on Reflective Programming and Kenichi Asai's Black Programming Language.
- Python, Linkers and Virtual Memory - PYCON US
- Reverse Engineering the MOS 6502 CPU
- Single Static Assignment Form Seminar - Introductory seminar on SSA Form, Compiler Optimizations under it and its applications in other areas such as Program Analysis and Verification.
- The JVM (Java Virtual Machine) Architecture
- The Most Beautiful Program Ever Written - William Byrd on a Lisp interpreter written in 15 lines of Lisp.
- The MoVfuscator: turning mov into a soul crushing RE nightmare
- HN
- Part 1
- Part 2
- Part 3
- Type-Driven Development with Idris
- Understanding Compiler Optimization
-
Tutorials
- A Tutorial Implementation of a Dependently Typed Lambda Calculus
- A Beginner's Guide to Linkers - Tutorial for helping C & C++ programmers understand the essentials of what the linker does.
- Algorithm W Step By Step
- Building a LISP from scratch with Swift
- Compiler Optmization Tutorial
- Hindley-Damas-Milner Tutorial - Extensively documented walkthrough for typechecking a basic functional language using the Hindley-Damas-Milner algorithm.
- How I Wrote a Programming Language, and How You Can Too
- Implementing a JIT Compiled Language with Haskell and LLVM
- Kaleidoscope: Implementing a Language with LLVM in Objective Caml
- Let’s Build A Simple Interpreter
- Lisperator - How to implement a programming language in JavaScript.
- Little Lisp Interpreter - Interpreter that supports function invocation, lambdas, lets, ifs, numbers, strings, a few library functions, and lists in under 120 lines of JavaScript.
- GitHub Repository
- `lis.py`, v1: (How to Write a (Lisp) Interpreter (in Python)) - Tutorial by Peter Norvig on writing a simple Lisp interpreter.
- `lis.py`, v2: An ((Even Better) Lisp) Interpreter (in Python) - Follow-up tutorial by Peter Norvig on making `lis.py` slightly better.
- LLVM Tutorial: Implementing Kaleidoscope
- Python version with LLVMPY
- Metacompiler Tutorial, Part 1
- Project: A Programming Language - Chapter 11 from the book _Eloquent JavaScript_, 2nd Edition.
- Write You a Haskell
- Writing a Language in Truffel - Interpreter development tutorial using Truffel, by Cristian Esquivias.
-
-
Runtimes and VMs
-
Educational and Toy Projects
- CakeML
- CoreCLR - The .NET's Common Language Runtime.
- Erlang BEAM
- HLVM
- OpenJDK
- Kaffe
- JamVM - [GitHub project mirror](https://github.com/cfriedt/jamvm).
- Apache Harmony
- Other JVM Runtimes
-
-
Tools and Frameworks
-
C / C++
- AsmJIT - Complete x86/x64 JIT and Remote Assembler for C++.
- GCC - The GNU Compiler Collection (C as a Backend).
- LCC - The lcc retargetable ANSI C compiler (C as a Backend).
- libFirm - C-library that provides a graph-based intermediate representation, optimizations, and assembly code generation suitable for use in compilers.
- libJIT - Library for generic Just-In-Time compiler functionality independent of any particular bytecode, language, or runtime.
- myJIT - Library for machine-code generation and execution at run-time.
- OrangeC - Win32 C11/C++2014 compiler and toolchain.
- PCC - The Portable C Compiler (C as a Backend).
- Ragel - Ragel State Machine Compiler.
- TCC - The Tiny C Compiler (C as a Backend).
-
CLR
- Cecil - Library to generate and inspect programs and libraries in the ECMA CIL format.
- DotNetPELib - Library to read and write .net assemblies in C++11
- ILSpy - .NET Decompiler.
- Reflector - .NET Decompiler.
- Reflexil - Assembly code editor which can be used as a plugin with other .NET/CLR tools.
-
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.
-
Go
- goyacc - YACC Implementation in Go. Standard LALR(1) parser generator.
- LLVM Go binding - Official Go LLVM binding.
-
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.
-
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.
- CGLIB - High level API library for generating and transforming Java Byte Code.
- FCP JVM - JVM Backend for generating Java Byte Code that conforms to the JDK v1.5+ Specification and the Dalvik VM.
- JavaCC - Java Compiler Construction and Parser Generator Toolkit.
- JavaCPP Presets for LLVM - Library for easily interacting with the LLVM API.
- JFlex - JFlex is a lexical analyzer generator for Java with full Unicode support.
- JLex - JLex is a lexical analyzer generator, that can be used in combination with CUP.
-
Kotlin
- The Whimsy Compiler Framework - Compiler framework research project in Kotlin.
-
Language Agnostic
- B3: The Bare Bones Backend - WebKit's optimizing JIT Compiler for procedures containing C-like code.
- Capstone - Lightweight multi-platform, multi-architecture disassembly framework with bindings to various famous programming languages.
- Keystone - Lightweight multi-platform, multi-architecture assembler framework with bindings to various famous programming languages.
- LLILCL - LLVM-based Compiler Backend for .NET Core.
- 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.
-
Python
- AST - Python's builtin Abstract Syntax Tree package.
- Dis - Python's builtin Disassembler package.
- Parsing - Pure-Python module that implements an LR(1) parser generator, as well as CFSM and GLR parser drivers.
- PLY - Implementation of lex and yacc parsing tools for Python.
- PyParsing - Alternative approach to creating and executing simple grammars, vs. the traditional lex/yacc approach, or the use of regular expressions.
- RPLY - Port of the PLY project to RPython.
- RPython - RPython is a framework for the implementatation of dynamic languages.
- List of Language Parsing Tools at the Python Wiki
- Survey of Python Parsers, by Ned Batchelder
-
Rust
-
-
Verticals
-
Educational and Toy Projects
- 68 Resources for Creating Programming Languages
- Awesome Static Analysis
- Compiler Conferences, Workshops and Journals
- Languages and Compilers Network Graph
- miniKanren.org - Papers, Talks and Implementations of miniKanren and microKanren.
- PLT Enlightenment
- Resources for Amateur Compiler Writers
- SSA Form Bibliography
- Summer Schools
- The Witchcraft Compiler Collection
- TypeFunc
-
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