Post-undergrad projects
- CS 4410: Compiler Design (1–2 weeks)
- Nand to Tetris (1–2 weeks)
- Dependent types:
- Simply Easy (1 week)
- Eightfold interpreter (1/2 week)
- Idris (3 weeks)
- Software Foundations (interspersed)
- Design my perfect language
- Compiler front-end:
- Design language to compile to esolangs
- wspace-syntax
- Assembly dialects
- Languages: HaPyLi, Nospace
- Advent of Code (interspersed)
- Compiler middle-end
- Compiler back-end and runtime:
- Crafting Interpreters
- Hacker’s Delight
- Handbook of Floating-Point Arithmetic by Jean-Michel Muller, Nicolas
Brunie, Florent de Dinechin, Claude-Pierre Jeannerod, Mioara Joldes, Vincent
Lefèvre, Guillaume Melquiond, Nathalie Revol, and Serge Torres, 2018
- Build Whitespace runtime with GMP and a GC (e.g., Boehm GC)
Self-guided courses
- Nand to Tetris
- “An Incremental Approach to Compiler Construction”
(Abdulaziz Ghuloum, 2006)
- Nada Amin’s implementation, including
“Compilers: Backend to Frontend and Back to Front Again” (Abdulaziz Ghuloum,
2006) and “How to compile with continuations” (Matt Might)
- Northeastern CS 4410/6410: Compiler Design
- UCSD CSE131/231: Compiler Construction
- EECS 483: Compiler Construction
- Cornell CS 6120: Advanced Compilers
- EECS 598: Category Theory for Computer Scientists
- University of Cambridge Compiler Construction
- Semesters:
2022-23,
2021-22,
2020-21,
2019-20,
2018-19,
2017-18,
2016-17,
2015-16,
2014-15,
2013-14,
2012-13,
2011-12
- University of Pennsylvania CIS 341: Compilers
- KAIST CS420: Compiler Design
- (Repeat) CMU Computer Systems: A Programmer’s Perspective
- Software Foundations
- To start: Merge my SF work from as a student and TA, to use as a base.
- Logical Foundations (7/17 chapters remaining)
- Programming Language Foundations (14/16 chapters remaining)
- Verified Functional Algorithms (16 chapters)
- QuickChick: Property-Based Testing in Coq (4/5 chapters remaining)
- Verifiable C (19 chapters)
- Separation Logic Foundations (13 chapters)
Books
- Crafting Interpreters
- Hacker’s Delight
- The Rustonomicon
- Compilers: Principles, Techniques, and Tools
Implementing papers
- Type systems
- Logic programming
- Adaptive programming
- Partial evaluation
- Futamura projections
- “Collapsing Towers of Interpreters” and “Lightweight Modular Staging”
- Compiler IRs
- Regular expressions
- Category theory
- Data-codata duality
- Self-modifying programs
See the papers chosen for Kimball’s winter 2023 CS 630
and 2019 PL winter school.
Lectures
Learning languages
Implementing languages
- Esolangs
- 2-dimensional: Aheui, Befunge, Funciton, Piet
- Automata: Game of Life
- Bitstrings: Bitwise Cyclic Tag
- Challenging: Malbolge
- Dependent types: Eightfold
- Metacircular: Emmental
- Object-oriented: Glass
- Rewriting: Cratylus, Fractran,
///, Thue
- Self-modifying:
- Befunge
- Intcode
- Synacor Challenge
- Single-instruction: Subleq
- Stack-oriented: Piet
- Trees:
- µ-recursive functions: Myopia
- Instruction sets
Challenges
- Advent of Code
- Implement challenges in a language of my design