Compilers & runtimes
Parsing, type checking, IR and optimization, code generation, binaries, interpreters, JITs and garbage collectors.
Parsing & syntax trees
Turning text into trees that tools can edit, and back into text.
Recursive-descent parsing
lowHand-written top-down parser with one function per grammar rule; simple, fast, with full control over error messages and recovery.
Pratt parsing
lowTable-driven expression parsing with one loop and a numeric binding power per operator; the compact core of precedence handling in hand-written parsers.
Incremental parsing
mediumReparse only the region an edit damaged and splice the new subtrees into the old tree, sharing everything else; O(edit) instead of O(file).
parser error recovery
Planned.
lossless syntax trees
Planned.
pretty printing wadler
Planned.
tree pattern matching
Planned.
shell command parsing
Planned.
Names & types
Resolving names and checking or inferring types.
Name resolution
lowBind every use of a name to its declaration with a scope stack, handling shadowing, hoisting and closure capture in one AST walk.
module resolution
Planned.
type inference hindley milner
Planned.
unification
Planned.
Bidirectional type checking
mediumSplit checking into two mutually recursive modes, check against a known type and synthesize an unknown one, so annotations are needed only at a few points.
structural subtyping
Planned.
control flow type narrowing
Planned.
shape inference
Planned.
IR & program analysis
SSA, control flow and dataflow facts that optimizers and checkers rely on.
SSA form
lowGive every variable exactly one definition, merging at joins with phi functions; def-use becomes explicit and optimizations turn sparse and cheap.
Control-flow graph
lowSplit a linear instruction list into basic blocks and connect them by jumps; the graph every optimizer, SSA builder and dataflow pass walks.
dominator tree
Planned.
Dataflow analysis
mediumCompute a fact per program point (live variables, reaching definitions, available expressions) by iterating transfer functions over the CFG to a fixed point.
alias analysis
Planned.
call graph construction
Planned.
Escape analysis
mediumProve which allocations never outlive or leave their creator, then put them on the stack, split them into scalars, or drop their locks.
symbolic execution
Planned.
uniformity analysis
Planned.
datalog evaluation
Planned.
Structured control flow
mediumTurn a jump graph into nested block, loop and if constructs with numbered breaks; reducible graphs need no duplication.
Optimization passes
Classic passes that make code smaller and faster.
function inlining
Planned.
global value numbering
Planned.
sparse conditional constant propagation
Planned.
loop optimizations
Planned.
auto vectorization
Planned.
peephole optimization
Planned.
profile guided optimization
Planned.
e graphs
Planned.
tree shaking
Planned.
minification name mangling
Planned.
Code generation
From IR to machine code, bytecode and binary module formats.
Instruction selection
mediumCover the IR with target instruction patterns at least cost; greedy maximal munch is simple, dynamic programming over a tree or DAG is optimal.
Register allocation
mediumMap unlimited virtual registers onto a few machine registers, spilling the rest to the stack; linear scan is fast, graph coloring and splitting allocators give better code.
instruction scheduling
Planned.
machine code emission
Planned.
calling conventions abi
Planned.
Linking and relocation
mediumThe linker merges object files, matches each undefined name to one definition, assigns addresses and patches every recorded reference (relocation); dynamic linking defers part of that to load time.
executable formats elf pe
Planned.
WebAssembly binary format
lowA section-based module container with LEB128 integers and structured, typed code, so untrusted bytes are validated in one pass and compiled as they stream in.
spirv binary format
Planned.
Bytecode compilation
lowFlatten an AST into compact linear instructions with a constant pool, backpatched jumps and slot-numbered locals, so a small loop can execute it.
idl code generation
Planned.
FFI bindings generation
mediumDescribe a library's C-ABI surface once (header, attributes or IDL) and generate the declarations, converters and wrappers for each caller language.
Binaries & debugging
Reading machine code back: disassembly, recovery, debug info and stack traces.
disassembly
Planned.
cfg recovery
Planned.
binary lifting to ir
Planned.
function fingerprinting
Planned.
type recovery
Planned.
Debug info (DWARF)
mediumDWARF stores a tree of typed entries (DIEs), a line-number bytecode, unwind tables and location expressions that map machine state back to source; pick it for ELF/Mach-O debug builds.
stack unwinding
Planned.
symbolication
Planned.
source maps
Planned.
breakpoints watchpoints
Planned.
gdb remote protocol
Planned.
Code coverage instrumentation
lowInsert counters into compiled code to record which blocks, edges or lines ran; a spanning tree of the control-flow graph cuts the counters needed.
Interpreters & JITs
Executing dynamic languages and sandboxed bytecode fast.
bytecode interpreter
Planned.
JIT compilation
mediumRun cold code in a cheap tier, count executions, and compile only what gets hot, trading warm-up time and memory for peak speed.
Inline caches
mediumPer-call-site cache of "this object shape, that slot or target", turning dynamic property and method lookup into a compare and a load.
Hidden classes (shapes)
lowObjects that gained the same properties in the same order share one layout descriptor, so a property is an index and the layout is one comparable id.
Deoptimization
mediumSpeculate with guards, and on failure rebuild the slow-tier frames from compile-time metadata and resume there, so optimized code may assume the common case.
On-stack replacement
mediumCount loop back-edges, compile code that can start at a loop header, and copy the live frame state into it, so one running call gets faster.
Value tagging and NaN-boxing
lowPack the type and the payload of any value into one 64-bit word, using spare low bits of aligned pointers or the unused payload of NaNs, so type tests are one mask compare.
Closures and upvalues
lowHow interpreters and compilers let a function keep using its enclosing variables after they return: flat closures, open and closed upvalues, closure conversion, capture by value or reference.
Executable memory under W^X
lowHow JITs and code generators emit machine code under W^X: RW to RX flips, dual mappings, per-thread write toggles, and the instruction-cache flush.
Instruction metering
lowCharge a fuel budget per instruction or per basic block and trap at zero, so untrusted code is bounded by work done, deterministically.
webassembly runtime
Planned.
heap snapshot startup
Planned.
Hot reloading
mediumReplace code in a running process by swapping an indirection point, then migrate the live state to the new layout at a safe moment.
javascript event loop
Planned.
Garbage collection
Reclaiming memory automatically.
Mark-sweep garbage collection
lowFind everything reachable from the roots, free the rest in place; handles cycles, never moves objects, and is the base of most production collectors.
copying gc
Planned.
Generational garbage collection
mediumSplit the heap by age, collect the small young region often and cheaply, and rarely touch old data; wins whenever most objects die young.
Incremental and concurrent garbage collection
mediumTrace the heap in small steps or on other threads while the program runs, and use barriers to keep the collector's view correct.
Reference counting
lowKeep a count of owners in each object, free it when the count hits zero; deterministic and local, but pays on every copy and leaks cycles.
Developer tooling
Package resolution, code indexes, language servers and debugging aids.
dependency version resolution
Planned.
semver range matching
Planned.
Code symbol indexing
mediumExtract definitions and references per file, give each symbol a stable string id, and store symbol to occurrences, re-indexing only files whose content hash changed.
Language server protocol
mediumOne JSON-RPC conversation over a pipe lets any editor drive any language's analysis server; the cost is keeping a live, edited document in sync and answering before it changes.
Text position encoding
lowStore byte offsets, convert to (line, column) on demand with a line-start table and binary search, and count columns in the unit the peer negotiated.
delta debugging
Planned.
template engines
Planned.
Type theory & proof assistants
Kernels and automation behind proof assistants and equality reasoning.
dependent type theory
Planned.
normalization by evaluation
Planned.
tactic proof search
Planned.
de bruijn indices
Planned.
term rewriting
Planned.
congruence closure
Planned.