Awesome
<samp>Programming Language Research
Research on programming languages, compilers, functional programming, devtools.
Table of Contents
- Courses
- Books
- Learning Paths
- Experiments
- Papers
- Programming Language Design / PLT
- Compiler
- PL Paradigms
- Interpreter
- PL Research
- Type System
- Parsers
- Backend
- Program Synthesis
- Language Learnings
- Browser
- Web UI
- Careers
- People in PL
Courses
- π₯ 301 - Organization of Programming Languages
- π₯ Benjamin Pierce - Software foundations
- π₯ CIS352 - Principles of Programming Languages
- π₯ CMSC 430: Design and Implementation of Programming Languages
- π₯ CS 3520/6520 - Programming Languages
- π₯ CS3110 - Functional Data Structures
- π₯ CS3MI3 - Principles of Programming Languages
- π₯ CS520 - Theories Of Programming Languages
- π₯ CSE340 - Principles of Programming Languages
- π₯ LINFO1131 - Advanced programming language concepts
- π» Accelerated 1
- π» All the courses Matthias Felleisen teach
- π» Building a Parser from scratch
- π» CMSC330 - Organization of Programming Languages
- π» CMU - CS6120 - Advanced Compilers
- π» Compilers β Stanford
- π» Compilers Design Recipe
- π» Compilers: Theory and Practice β Udacity
- π» Concepts in Programming Languages
- π» COP 4020 - Programming Languages I
- π» COS 326 - Functional Programming
- π» CS 242: Programming Languages, Fall 2019
- π» CS019 - Accelerated Introduction to Computer Science
- π» CS164 Programming Languages and Compilers
- π» CS242 - Programming Languages - Stanford
- π» CS2500 - Fundamentals of Computer Science
- π» CIS 341 - Compilers
- π» CSCI1730 - Programming Languages - Application and Interpretation
- π» CSE 131 - Compiler Construction
- π» CSE230 - Principles/Programming Languages
- π» Essentials of Programming Languages
- π» Fundamentals 1
- π» Fundamentals 2
- π» Hack Your Own Language
- π» History of Programming Languages
- π» Indiana University Compiler Course
- π» Introduction to Compiler Construction
- π» Jay McCarthy - 406 Compiler Construction
- π» Matthias Felleisen - Intensive Principles of Programming Languages
- π» Matthias Felleisen - Principles of Programming Languages
- π» Principles of Compiler Design
- π» Programming Language Foundations in Agda
- π» Programming Languages and Logic
- π» Programming Languages Course given by DCC-UFMG
- π» Programming Languages β
- π» Programming Languages β ‘
- π» Ray Total Courses
- π» Theory of Programming Languages
Books
- π Compiler Construction
- π Compiler Design
- π Compiling with Continuations
- π Concepts of Programming Languages
- π Discrete Mathematics for Computing
- π Engineering a Compiler
- π Homotopy Type Theory
- π How to Design Programs: An Introduction to Programming and Computing
- π HTDP
- π Human-Centered Programming Languages
- π Introduction to Compilers and Language Design
- π Modern Compiler Design
- π Modern Compiler Implementation in C
- π Parsing Techniques: A Practical Guide
- π Parsing Techniques. A Practical Guide
- π Practical Foundations for Programming Languages
- π Programming Languages: Application and Interpretation
- π SICP β Structure and Interpretation of Computer
- π The Elements Of Computing Systems
- π Thinking with Types: Type-Level Programming in Haskell
- π Type Theory and Formal Proof: An Introduction
- π Type Theory and Functional Programming
Learning Paths
- Advanced Programming Languages
- Compiler Engineer Path
- Learn Type Theory
- PLR & Compiler Learning Path
- Programming Language Theory Path
- So You Want to Be a (Compiler) Wizard
- Programming languages resources
Experiments
- A miniature model of the Typescript compiler
- An interpreter for the Lox programming language
- An interpreter for the Monkey programming language
- How the TypeScript compiler works
Papers
- π 10 papers that all PhD students in programming languages ought to know
- π A syntactic approach to type soundness
- π A Theory of Type Polymorphism in Programming
- π Abstracting Gradual Typing
- π An Axiomatic Basis for Computer Programming
- π Call-by-name, call-by-value, and the Ξ»-calculus
- π Classic Papers in Programming Languages and Logic
- π Efficient Gradual Typing
- π Fundamental concepts in programming languages
- π Gradual Type Theory
- π Gradual Typing for Functional Languages
- π Gradual Typing: A New Perspective
- π How Statically-Typed Functional Programmers Write Code
- π Migrating Gradual Types
- π On Model Subtyping
- π On Understanding Types, Data Abstraction, and Polymorphism
- π Papers on programming languages: ideas from 70's for today
- π Papers to read
- π Pluggable Type Systems
- π Programming in Homotopy Type Theory
- π Refined Criteria for Gradual Typing
- π Static Typing Where Possible, Dynamic Typing When Needed: The End of the Cold War Between Programming Languages
- π The Behavior of Gradual Types: A User Study
- π The Design Principles of the Elixir Type System
- π The Next 700 Programming Languages
- π Towards a theory of type structure
- π Towards Practical Gradual Typing
- π Type Inference Algorithms
- π Type Inference for Records in a Natural Extension of ML
- π Type Systems for Object-Oriented Programming Languages
- π Type Systems
- π What every compiler writer should know about programmers
- π Why Dependent Types Matter
Programming Language Design / PLT
- π₯ A Language Creators' Conversation: Guido van Rossum, James Gosling, Larry Wall & Anders Hejlsberg
- π₯ A Tale of Two Asyncs: Open Source Language Design in Rust and Node.js
- π₯ Another Go at Language Design
- π₯ Bjarne Stroustrup : C++: evolving a useful language
- π₯ Concepts of Programming Languages
- π₯ CS520 Theories of Programming Languages β KAIST
- π₯ Delimited Continuations, Demystified by Alexis King
- π₯ Going beyond JavaScript
- π₯ Growing a Language, by Guy Steele
- π₯ How Rust does OSS
- π₯ JavaScript Static Analysis for Evolving Language Specifications
- π₯ Linguistics and Compilers
- π₯ On understanding types, data abstraction and effects
- π₯ Principles of Programming Languages by Robert M. Siegfried
- π₯ Principles of Programming Languages
- π₯ Rob Pike - What We Got Right, What We Got Wrong
- π₯ So many programming languages so little time
- π₯ Stephanie Weirich speaks about Programming Language Design
- π₯ The Economics of Programming Languages
- π₯ The Mess We're In
- π₯ The Next Programming Language - Douglas Crockford
- π₯ What's Next for Our Programming Languages
- π₯ Why Programming Languages Matter
- π Programming language semantics: Itβs easy as 1,2,3
- π Programming Language Semantics
- π A Frontend Programmer's Guide to Languages
- π Building a Debugger: Code Analysis
- π Concepts of Programming Languages
- π Grammars for programming languages
- π How To Create Your Own Programming Language
- π Language-oriented software engineering
- π Letβs Build a Programming Language
- π Minimalism in Programming Language Design
- π Panel: The Future of Programming Languages
- π Principles of Programming Languages
- π Programming and Programming Languages
- π Programming Language and Compilers Reading List
- π Programming Language Foundations in Agda
- π Programming language theory and practice in ReScript
- π Shriram Krishnamurthi and Joe Gibbs Politz - Programming Languages: Application and Interpretation
- π The Programming Language Enthusiast
- π The Study of Programming Languages
- π Why Study Programming Languages
Compiler
- π₯ Anders Hejlsberg on Modern Compiler Construction
- π₯ Building a parser in C#, from first principles
- π₯ Compiler Design course
- π₯ How To Build A Programming Language From Scratch
- π₯ How would compilers change in the next 10 years?
- π₯ Implementing a bignum calculator
- π₯ JavaScript β© WebAssembly
- π₯ JavaScript implementation in SpiderMonkey
- π₯ KAIST CS420: Compiler Design
- π₯ Lexical Scanning in Go
- π₯ Mozilla Hacks Compiler Compiler
- π₯ Quick look at the TypeScript Compiler API
- π₯ Rethinking compiler technology in a heterogeneous world
- π₯ The business of selling compilers
- π₯ Typescript Compiler explained by the Author Anders Hejlsberg
- π₯ Understanding compiler optimization
- π A miniature model of the Typescript compiler
- π Alias analysis in React Compiler
- π Alias analysis
- π An Incremental Approach to Compiler Construction
- π An Introduction to Interpreters and JIT Compilation
- π AST (Abstract Syntax Tree)
- π Bob Nystrom - Expression Parsing Made Easy
- π Building a Parser from scratch
- π Compiler Theory and Reactivity
- π Compilers and Interpreters
- π Compilers Resources
- π Compilers: Nuts and bolts of Programming Languages
- π Compiling Scheme to C with closure conversion
- π Compiling to Java
- π Compiling to lambda-calculus
- π Douglas Crockford - Top Down Operator Precedence
- π Dr. Dobbs - Bob: A Tiny Object-Oriented Language
- π Flattening ASTs (and Other Compiler Data Structures)
- π Fredrik Lundh - Simple Town-Down Parsing In Python
- π Garbage Collection Algorithms
- π How to implement a programming language in JavaScript
- π IU Compiler Course
- π Jack W. Crenshaw - Letβs Build a Compiler!
- π Language grammar
- π Lessons from Writing a Compiler
- π Let's build a compiler
- π Let's make a Teeny Tiny compiler, part 1
- π Let's make a Teeny Tiny compiler, part 2
- π Let's make a Teeny Tiny compiler, part 3
- π Lexical Analysis
- π Lexing in JS style
- π Make a Lisp
- π Nick Desaulniers - Interpreter, Compiler, JIT
- π Parsing Algorithms
- π Pursuit of Performance on Building a JavaScript Compiler
- π Resources for Amateur Compiler Writers
- π Scheme from Scratch - Introduction
- π TypeScript Compiler Notes
- π Understanding GC in JSC From Scratch
- π Which Interpreters are Faster, AST or Bytecode?
- π Write you a Haskell
PL Paradigms
- π₯ Compiling with Continuations or without? Whatever
- π Continuation-passing style in JavaScript
- π Continuation-passing style
Interpreter
- π₯ Cheaply writing a fast interpreter
- π» Building an Interpreter from scratch
- π» Crafting an Interpreter
- π (How to Write a (Lisp) Interpreter (in Python))
- π A Python Interpreter Written in Python
- π Building an Interpreter
- π Crafting Interpreters
- π How languages work #1: String interpolation
- π Implementing a Simple Compiler on 25 Lines of JavaScript
- π Letβs Build A Simple Interpreter
- π Little lisp interpreter
- π Little Lisp interpreter
- π Pratt Parsers: Expression Parsing Made Easy
- π What do people mean when they say βtranspilerβ?
PL Research
Type System
- π₯ "Hindley-Milner Type Inference β Part 1
- π₯ "Hindley-Milner Type Inference β Part 2
- π₯ "Propositions as Types" by Philip Wadler
- π₯ A Taste of Type Theory
- π₯ A Type System From Scratch
- π₯ Bringing Types to Elixir by Giuseppe Castagna and Guillaume Duboc
- π₯ Discrete Math β Dr. Trefor Bazett
- π₯ Gradual Type Theory
- π₯ Gradual Typing: A New Perspective
- π₯ How to Evaluate the Performance of Gradual Type Systems
- π₯ Let's build a typesystem in Haskell!
- π₯ The Hindley-Milner Type System
- π₯ Thinking with Types
- π₯ Type Systems - The Good, Bad and Ugly
- π₯ Type-safe embedded domain-specific languages 1/4
- π₯ Type-safe embedded domain-specific languages 2/4
- π₯ Type-safe embedded domain-specific languages 3/4
- π₯ Type-safe embedded domain-specific languages 4/4
- π₯ Types and Programming Languages Book club
- π₯ Types are like the Weather, Type Systems are like Weathermen
- π₯ Typing the Untyped: Soundness in Gradual Type Systems
- π₯ What is Decidable about Gradual Types?
- π₯ Why Static Typing Came Back
- π» Building a Typechecker from scratch
- π How to evaluate the performance of gradual type systems
- π Optimizing and Evaluating Transient Gradual Typing
- π Putting gradual types to work
- π Safe & Efficient Gradual Typing for TypeScript
- π What Is Decidable about Gradual Types?
- π A brief introduction to type theory and the univalence axiom
- π A reckless introduction to Hindley-Milner type inference
- π An accessible introduction to type theory and implementing a type-checker
- π Bootstrapping a Type System
- π Gradual Typing from Theory to Practice
- π Hindley-Milner Type Checking AST
- π How should I read type system notation?
- π Introduction to Type Theory
- π MyPy TypeChecker
- π Programming and Programming Languages: Type Inference
- π Propositions as types: explained
- π Python internals: Symbol tables, part 1
- π Python internals: Symbol tables, part 2
- π Strong arrows: a new approach to gradual typing
- π Type Checking If Expressions
- π Type inference under the hood
- π Type system of the React compiler
- π Type Systems by Luca Cardelli, Microsoft Research
- π Type Theory Workshop
- π Understanding types as sets
- π What is Gradual Typing
Parsers
- π Building Extensible Parsers with Camlp4
- π Demystifying Pratt Parsers
- π Rewriting the Ruby parser
Backend
Program Synthesis
Formal Methods
Parallel/Concurrent Programming
- π A Science of Concurrent Programs
- π The Art of Multiprocessor Programming
- π The Parallel Event Loop Model and Runtime
Language Learnings
TypeScript
- π₯ A horrifically deep dive into TypeScript module resolution
- π₯ A Trip into the Compiler
- π₯ Advanced Types in TypeScript
- π₯ AreTheTypesWrong with Andrew Branch
- π₯ Hidden Gems of TypeScript compiler
- π₯ How safe is "safe enough" for TypeScript
- π₯ How the TypeScript Compiler Compiles
- π₯ The Road to Private Methods
- π₯ Type Level Programming in TypeScript
- π₯ Typescript Performance: Going Beyond The Surface
- π₯ TypeScript Performance
- π₯ Typescript Type System
- π @typescript/analyze-trace
- π A preview of Ezno's checker
- π An Introduction To Type Programming In TypeScript
- π Debugging the TypeScript Codebase
- π Designing with types: Making illegal states unrepresentable
- π Investigating TypeScript compiler APIs
- π JavaScript scope, Closures, and the TypeScript compiler
- π Making Sense of TypeScript Generics
- π Making sense of TypeScript using set theory
- π Modules in TypeScript
- π Optimizing TypeScript Memory Usage
- π Reconstructing TypeScript, part 0: intro and background
- π Reconstructing TypeScript, part 1: bidirectional type checking
- π Reconstructing TypeScript, part 2: functions and function calls
- π Reconstructing TypeScript, part 3: operators and singleton types
- π Reconstructing TypeScript, part 4: union types
- π Reconstructing TypeScript, part 5: intersection types
- π Reconstructing TypeScript, part 6: narrowing
- π Static TypeScript
- π Type level programming in TypeScript
- π Types as axioms, or: playing god with static types
- π TypeScript / How the compiler compiles
- π TypeScript and the dawn of gradual types
- π TypeScript AST Resources
- π TypeScript Bytecode Interpreter / Runtime Types
- π TypeScript Compiler API: Improve API Integrations Using Code Generation
- π TypeScript Compiler Internals
- π TypeScript Compiler Manual
- π TypeScript Modules - Theory
- π TypeScript Performance Tracing
- π TypeScript Performance
- π TypeScript's type-independent output
- π The Making of a TypeScript Feature: Inferring Type Predicates
Ecmascript
- π₯ Create Your Own JavaScript Runtime
- π₯ Ectype - bringing type safety (and more!) to vanilla JavaScript
- π₯ Implementing one feature set in two JavaScript engines
- π₯ JavaScript and C++ in Node.js core
- π₯ Node.js startup performance
- π₯ Static Hermes: the Next Generation of Hermes
- π₯ TC39 β From the proposal to ECMAScript - Step by Step
- π
SingleEscapeCharacter
- π Automatic semicolon insertions in JavaScript
- π Deep JavaScript
- π Empty Statement
- π From Research Prototypes to Continuous Integration: Guiding the Design and Implementation of JavaScript
- π JavaScript Closures
- π JavaScript Garbage Collector
- π JavaScript Memory management
- π JavaScript Static Analysis for Evolving Language Specifications
- π Relation of Garbage Collector and Closure in JavaScript
- π V8: full compiler
- π V8: Garbage Collection
Rust
- π₯ Things I Learned (TIL) - Nicholas Matsakis
- π Notes on a smaller Rust
- π Removing Garbage Collection From the Rust Language
- π Rust fact vs. fiction: 5 Insights from Google's Rust journey in 2022
- π Rust: Project Goals
- π Rust's language ergonomics initiative
- π Why Static Languages Suffer From Complexity
Python
- π₯ A JIT Compiler for CPython
- π₯ Python's type system explained: Static vs dynamic typing | Guido van Rossum
OCaml
Browser
- π₯ The internet computer
- π₯ Servo: Designing and Implementing a Parallel Browser
- π₯ Servo: A Web View From Somewhere Else
- π₯ Intro to Rust-lang (Building the Dom and an HTML Parser)
- π₯ Intro to Rust-lang (Adding a Style Tree to our Browser)
- π₯ Intro to Rust-lang (Adding a CSS engine and CSS parsing to our Browser)
- π₯ Intro to Rust (Building a Browser Engine: Commands and Rendering in OpenGL)
- π₯ In The Loop - setTimeout, micro tasks, requestAnimationFrame, requestIdleCallback
- π₯ Critical rendering path - Crash course on web performance
- π₯ Chrome University 2018: Life of a Script
- π₯ Browser From Scratch Live Streams
- π Web Browser Engineering
- π Browser from scratch
- π Browser from Scratch
- π Browser Performance
- π Building a Rust Web Browser
- π Concurrent JavaScript: It can work!
- π David Baron's blog: Blink engineer
- π How Browsers Work: Behind the scenes of modern web browsers
- π How browsers work
- π Key data structures and their roles in RenderingNG
- π Let's build a browser engine!
- π Notes on how browsers work
- π Notes on JavaScript Interpreters
- π Notes on Javascript Memory Profiling in Google Chrome
- π Overview of the RenderingNG architecture
- π reflows & repaints: css performance making your javascript slow?
- π Rendering: repaint, reflow/relayout, restyle
- π RenderingNG deep-dive: LayoutNG
- π RenderingNG: an architecture that makes and keeps Chrome fast for the long term
- π Round-up of web browser internals resources
- π Understanding Reflow and Repaint in the browser
- π Web Browser Engineering
- π What forces layout / reflow
Web UI
- π₯ Algebraic effects, Fibers, Coroutines
- π₯ React Forget: React for developers and compilers
- π Algebraic Effects for React Developers
- π Algebraic Effects for the Rest of Us
- π PL web frameworks
- π React - Basic Theoretical Concepts
- π React Concurrent mode
- π TypeScript + fp-ts: ReaderTaskEither and React
Careers
Jobs
- Chromium Engineer at Browser Company
- Senior Software Engineer at Mozilla Corporation
- JavaScript Virtual Machine Compiler Engineer at Apple
- Compiler Jobs
- Swift Type System Engineer
- Compiler Engineer
- Groq Compiler Engineer
- Modular AI Compiler Engineer
Schools
- Programming Language and Compiler Research Groups
- Indiana University Bloomington
- KAIST Programming Language Research Group
- Tokyo Institute of Technology
People in PL
- Anders Hejlsberg
- Bob Nystrom
- Cynthia Richey
- Dmitry Soshnikov
- Gavin Bierman
- Gilad Bracha
- Graham Hutton
- Jihyeok Park
- Lexi Lambda
- Mads Torgersen
- Matthias Felleisen
- Niko Matsakis
- Patrick Walton
- Paulette Koronkevich
- Programming Linnguistics
- Researchers in Programming Languages and Compilers
- Roberto Giacobazzi
- Simon Peyton Jones
- StackExchange: Programming Language Design and Implementation
- Stefan Marr
- Sukyoung Ryu
- Ronald Garcia
- TK