Reading
Compiler
Interpreters
Tutorials/Walkthroughs
Compilers
-
Creating the Bolt compiler (series):
-
LLVM Tutorial: Kaleidoscope
- Let's build a compiler (4 parts)
- Let’s Build a Compiler! - Jack W. Crenshaw
- Let's make a Teeny Tiny compiler
-
Let’s Build a Programming Language (Series):
-
Minsk: Immo Landwerth has done a collection of videos on building a language for the CLR platform in a live-streaming style: Source:
-
Subtype Inference by Example (series):
Compilers
Native/raw
LLVM
CLR
- Concatenative Thinking (wiki): We are interested in both theoretical results and practical programming advice, especially as it pertains to any Concatenative language. We want to bring together disparate language communities and build a common knowledge repository that people can consult to learn more about this family of languages.
- Video - Creating a domain specific language for .NET Application
- How to Design Worlds (PDF)
- Kaleidoscope: Implementing a language with LLVM in CSharp: "By the end of the tutorial, we’ll have written a bit less than 1000 lines of non-comment, non-blank, lines of code. With this small amount of code, we’ll have built up a very reasonable compiler for a non-trivial language including a hand-written lexer, parser, AST, as well as code generation support with a JIT compiler. While other systems may have interesting “hello world" tutorials, I think the breadth of this tutorial is a great testament to the strengths of LLVM and why you should consider it if you’re interested in language or compiler design."
- learn-programming-languages: Resources for the working programmer to learn more about the fundamentals and theory of programming languages. (Jean Yang)
- Presentation - Write your own domain specific language with F#
JVM
Python
Rust
Go
A simple Hindley-Milner type system in Go
Haskell
Write You a Haskell
Learning/AI-related
Toy/experimental
-
Language Incubator: Repo of language experiments/explorations; "An incubator/sandbox for learning compilers, interpreters, code generation, virtual machines, assemblers, JITs, etc."
-
Bhai: A toy programming language written in Typescript
- Blink
- Bob: A Tiny Object-Oriented Language
- Dwarf: A very small scripting language written in Elixir.
- Epic: interpreter for Python-like programming language with braces
- Eval: a lightweight interpreter framework written in Swift, evaluating expressions at runtime.
- Imp:
-
Kaleidoscope: the classic from the LLVM website
- Lepton: Simple Programming Language
- ModLang: A minimal, toy programming language implemented in C++ and STL
- Maverick
- miniUni: A concurrent scripting language
- Pointless (Source): a scripting language for learning and fun.
- The Super Tiny Compiler (JS)
- TinyML: A tiny functional language interpreter (Tomas Petricek)
- uza: a simple statically-typed programming language
- X-expressions in XMLisp: S-expressions and Extensible Markup Language Unite: "XMLisp unites S-expressions with XML into X-expressions that unify the notions of data sharing with computation. Using a combination of the Meta Object Protocol (MOP), readers and printers, X-expressions uniquely integrate XML at a language, not API level, into Lisp in a way that could not be done with other programming languages."
-
https://github.com/yangtau/hedgehog: a toy programming language
- https://github.com/mattgreen/hython: Haskell-powered Python 3 interpreter
- https://github.com/proglangclass/interpreter: Language built during the Programming Language Masterclass.
- https://github.com/hisystems/Interpreter: Simple language interpreter written in pure C#.
- https://github.com/jamesdhutton/Interpreter: Interpreter for a simple language
- https://github.com/progschj/jtc: A toy programming language interpreter that has no dependencies and sits in a single C++ file. C++11 capable compilers should compile it without extra options other than enabling C++11.
- https://github.com/airtrack/luna: A toy interpreter of lua-like language
- https://github.com/hijkzzz/mini-interpreter: A simple scripting language (supports anonymous functions and clases)
- https://github.com/drmenguin/minilang-interpreter: Interpreter and Read-Eval-Print-Loop for a simple programming language called "MiniLang", written in C++
- https://github.com/JohnEarnest/ok: An open-source interpreter for the K5 programming language.
- https://github.com/oriontransfer/PL0-Language-Tools: An implementation of PL/0 including a tree-based interpreter and virtual machine. http://programming.dojo.net.nz/study/pl0-language-tools/index
- https://github.com/bbu/simple-interpreter: A hackable and extensible lexer, parser and interpreter for a minimalistic, imperative, C-like language.
- https://github.com/totalspectrum/tinyscript
- https://github.com/sam-astro/Z-Sharp: Custom programming interpreter for ZSharp (Z#), a language I made up.
Monkey
This is the language described by the book "Writing an Interpreter in Go". Also has a paired book, "Writing a Compiler in Go" which appears to include the creation of a virtual machine for executing the compiled code.
Esolangs
Uncategorized
CLang
Escape analysis
Escape analysis is an optimization for identifying objects which do not escape the dynamic extent of a function; such objects can be stack-allocated, or 'flattened' so that usages of them are replaced with a series of local variables (the latter optimization is known as "scalar replacement").
An overview of the escape analysis algorithm used in Factor's Optimizing compiler: http://factor-language.blogspot.com/2008/08/algorithm-for-escape-analysis.html http://en.wikipedia.org/wiki/Escape_analysis
Register allocation
-
Linear scan: The linear scan algorithm sacrifices code quality for compilation speed; it only needs to make one or two passes over the intermediate representation to assign registers, and therefore runs in O(n) time; therefore it is much faster than graph coloring, which runs in O(n2) time.
-
Graph coloring
- Graph coloring is traditionally implemented by building an interference graph, attempting to color it, and if coloring fails, spilling some values and building the interference graph again. Building the graph is pretty expensive; if your program is in SSA form, it turns out you can perform spilling, build the graph and color it all in one shot. Register allocation for programs in SSA form using chordal graph coloring, Sebastian Hack, http://digbib.ubka.uni-karlsruhe.de/volltexte/documents/6532
Static Single Assignment (SSA)
Instruction selection
Superoptimization
Scheduling languages
Tags:
langdev
reading
language
llvm
native
Last modified 11 December 2025