Crafting Interpreters by Bob Nystrom (Github)


Creating a DSL Step by Step, Part 1

Create a programming language that the whole company can understand

Creating a Ruby DSL: A Guide to Advanced Metaprogramming


"Three Things I Wish I Knew When I Started Designing Languages"

"The Naked Truth About Writing a Programming Language"

Open, extensible object models: "The artificial distinction between implementation language and end-user language can be eliminated by implementing the language using only end-user objects and messages, making the implementation accessible for arbitrary modification by programmers. We show that three object types and five methods are sufficient to bootstrap an extensible object model and messaging semantics that are described entirely in terms of those same objects and messages."

Intrinsically-Typed Definitional Interpreters for Linear, Session-Typed Languages

Interview with Jesper Louis Andsersen about a ton of languages.

"Less is more: language features"

"Languages I want to write"

"A wish list for a new programming language"

The Super Tiny Compiler (JS)

Program Analysis

Nanopass: A framework for compiler education

Language Incubator: Repo of language experiments/explorations; "An incubator/sandbox for learning compilers, interpreters, code generation, virtual machines, assemblers, JITs, etc."

Principles of Programming Languages (course) (Source)


Build your own Lisp teaches C by building a Lisp.

luax: Lua-like programming language for studying compiler and interpreter courses.

Square: A tiny programming language under 200kb.


Writing your own toy language using flex, bison, LLVM; code

Implementing a JIT Compiled Language with Haskell and LLVM

A Tutorial on How to Write a Compiler Using LLVM


How to Design Worlds (PDF)

learn-programming-languages: Resources for the working programmer to learn more about the fundamentals and theory of programming languages. (Jean Yang)

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

Presentation - Write your own domain specific language with F#


write_your_own_dynamic_language_runtime: How to write interpreters or dynamic compilers for dynamically typed languages on top of the JVM. This repository provides the basis to implement your own

of a dynamically typed language named smalljs which is almost a subset of JavaScript.

joeq: A Virtual Machine and Compiler Infrastructure (PDF) (Source): entirely implemented in JavaTM, leading to greater reliability, portability, maintainability, and efficiency. It is also language-independent, so code from any supported language can be seamlessly compiled, linked, and executed --- all dynamically!

Scripting and Dynamic Interaction in Java

Video: Nashorn: implementing a dynamic language runtime on JVM (Attila Szegedi)


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.


Eval: a lightweight interpreter framework written in Swift, evaluating expressions at runtime.

Pointless (Source): a scripting language for learning and fun.

IMP: A minimal interpreter for the toy language, IMP, used as an example for building interpreters.

Dwarf: A very small scripting language written in Elixir.


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.


From "Crafting Interpreters":

Tags: reading   langdev  

Last modified 14 April 2023