mhtirogla
Home
Systems
API
Pricing
About
Log in
← Back
Home
›
Systems
›
Compilers and language tooling
type-checker
type checker
TypeScript
System
Techniques · 10
Primitives · 16
type-checker
Bidirectional type checking
compilers · medium: Split 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.
›
Control flow type narrowing
compilers · medium: Refine variable types along branches from guards (typeof, null checks, discriminants)
Dataflow analysis
compilers · medium: Compute a fact per program point (live variables, reaching definitions, available expressions) by iterating transfer functions over the CFG to a fixed point.
›
Incremental parsing
compilers · medium: Reparse only the region an edit damaged and splice the new subtrees into the old tree, sharing everything else; O(edit) instead of O(file).
›
Language server protocol
compilers · medium: One 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.
›
Structural subtyping
compilers · medium: Type compatibility by shape: object, union and intersection types, variance and caching
Type inference hindley milner
compilers · medium: Algorithm W and J: unification-based inference with let-polymorphism and generalization
Name resolution
compilers · low: Bind every use of a name to its declaration with a scope stack, handling shadowing, hoisting and closure capture in one AST walk.
›
Unification
compilers · low: First-order unification with union-find and occurs check; basis of type inference and logic programming
Recursive-descent parsing
compilers · low: Hand-written top-down parser with one function per grammar rule; simple, fast, with full control over error messages and recovery.
›
Hash consing
data-structures · low: Intern structurally equal immutable terms so equality is pointer comparison and sharing is maximal
String interning
data-structures · low: Store each distinct string once and refer to it by id
Pratt parsing
compilers · low: Table-driven expression parsing with one loop and a numeric binding power per operator; the compact core of precedence handling in hand-written parsers.
›
De bruijn indices
compilers · low: Nameless variable representation for binders: shifting, substitution, de Bruijn levels
Control-flow graph
compilers · low: Split a linear instruction list into basic blocks and connect them by jumps; the graph every optimizer, SSA builder and dataflow pass walks.
›
Topological sort
graphs · low: Order the vertices of a DAG so every edge points forward; the core of build systems, schedulers and dependency resolution, with cycle detection for free.
›
Rope
graphics · low: A balanced tree of small string chunks with cached byte and newline counts, so seek, insert, delete and snapshot cost O(log n) instead of O(n).
›
Union-find
graphs · low: Disjoint-set forest with union by size and path compression; merges sets and answers same-set queries in effectively constant time.
›
Swiss table
data-structures · low: Open-addressing hash table that filters 8-16 slots at once with 1-byte hash tags and SIMD, giving fast lookups at 87.5 % load.
›
Text position encoding
compilers · low: Store 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.
›
Edit distance
search-sort · low: Levenshtein/Damerau distance by DP, bit-parallel Myers variant
BFS and DFS
graphs · low: The two basic graph traversals; BFS gives hop distances and levels, DFS gives discovery/finish order for cycles, components and topological order.
›
Sparse matrices (CSR)
numerics · low: Compressed sparse row stores only nonzeros as row pointers, column indices and values; SpMV streams them once, so it is memory-bandwidth bound.
›
+ 3 more techniques
System
Techniques · 10
Primitives · 16
type-checker
Bidirectional type checking
compilers · medium: Split 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.
›
Control flow type narrowing
compilers · medium: Refine variable types along branches from guards (typeof, null checks, discriminants)
Dataflow analysis
compilers · medium: Compute a fact per program point (live variables, reaching definitions, available expressions) by iterating transfer functions over the CFG to a fixed point.
›
Incremental parsing
compilers · medium: Reparse only the region an edit damaged and splice the new subtrees into the old tree, sharing everything else; O(edit) instead of O(file).
›
Language server protocol
compilers · medium: One 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.
›
Structural subtyping
compilers · medium: Type compatibility by shape: object, union and intersection types, variance and caching
Type inference hindley milner
compilers · medium: Algorithm W and J: unification-based inference with let-polymorphism and generalization
Query based incremental computation
systems · medium: Memoized queries with dependency tracking and red-green revalidation (rustc, Salsa)
Lossless syntax trees
compilers · medium: Concrete syntax trees with trivia, green/red node split (Roslyn, rowan) for tools that rewrite code
Parser error recovery
compilers · medium: Recover from syntax errors via synchronization tokens and error nodes to keep a full tree
Name resolution
compilers · low: Bind every use of a name to its declaration with a scope stack, handling shadowing, hoisting and closure capture in one AST walk.
›
Unification
compilers · low: First-order unification with union-find and occurs check; basis of type inference and logic programming
Recursive-descent parsing
compilers · low: Hand-written top-down parser with one function per grammar rule; simple, fast, with full control over error messages and recovery.
›
Hash consing
data-structures · low: Intern structurally equal immutable terms so equality is pointer comparison and sharing is maximal
String interning
data-structures · low: Store each distinct string once and refer to it by id
Pratt parsing
compilers · low: Table-driven expression parsing with one loop and a numeric binding power per operator; the compact core of precedence handling in hand-written parsers.
›
De bruijn indices
compilers · low: Nameless variable representation for binders: shifting, substitution, de Bruijn levels
Control-flow graph
compilers · low: Split a linear instruction list into basic blocks and connect them by jumps; the graph every optimizer, SSA builder and dataflow pass walks.
›
Topological sort
graphs · low: Order the vertices of a DAG so every edge points forward; the core of build systems, schedulers and dependency resolution, with cycle detection for free.
›
Rope
graphics · low: A balanced tree of small string chunks with cached byte and newline counts, so seek, insert, delete and snapshot cost O(log n) instead of O(n).
›
Union-find
graphs · low: Disjoint-set forest with union by size and path compression; merges sets and answers same-set queries in effectively constant time.
›
Swiss table
data-structures · low: Open-addressing hash table that filters 8-16 slots at once with 1-byte hash tags and SIMD, giving fast lookups at 87.5 % load.
›
Text position encoding
compilers · low: Store 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.
›
Edit distance
search-sort · low: Levenshtein/Damerau distance by DP, bit-parallel Myers variant
BFS and DFS
graphs · low: The two basic graph traversals; BFS gives hop distances and levels, DFS gives discovery/finish order for cycles, components and topological order.
›
Sparse matrices (CSR)
numerics · low: Compressed sparse row stores only nonzeros as row pointers, column indices and values; SpMV streams them once, so it is memory-bandwidth bound.
›
Copy for AI
Similar systems
Share the most building blocks with this one.
incremental-compiler
29 %
proof-assistant
29 %
formatter-linter
26 %
sast
22 %
language-server
17 %