-
Notifications
You must be signed in to change notification settings - Fork 27
Description
Before we go too far down the path of building a traditional compiler (#9), it probably makes sense to start thinking about how we might incrementalise things. This will be super important for supporting a good editor experience (#97). If we put this off for too long we might end up having to rebuild a bunch - this is what Rust is facing, for example.
Without knowing much about it, perhaps something like the Incremental Lambda Calculus would be handy for this. We could try to find the derivative of each pass of our compiler, based on the result of a previous run. This could also be a helpful framework for formalising our incremental compiler as well (#39)!
CRDT-style data structures could also be of potential use, and perhaps projects like timely-dataflow and differential-dataflow.
Unresolved Questions
What is the difference between 'incremental' vs. 'query-driven'?
Resources
- Rust's demand-driven compilation (Rustc Book)
- matklad/rust-analyzer - experimental frontend for Rust with a focus on IDE support
- Swift's RequestEvaluator Docs
- Merlin: A Language Server for OCaml (Experience Report)
- Grzegorz Kossakowski: gkossakowski/kentuckymule
- Grzegorz Kossakowski: Can Scala have a highly parallel typechecker?
- Grzegorz Kossakowski: Kentucky Mule — limits of Scala typechecking speed
- Anders Hejlsberg on Modern Compiler Construction (YouTube)
- Tamás Szabó & Sebastian Erdweg - Better living through incrementality (YouTube)
- IncA: Incremental Program Analysis Framework
- Incremental Lambda Calculus
- Fungi: Typed incremental computation with names
- Salsa: A generic framework for on-demand, incrementalized computation (in Rust)
- LINVIEW: Incremental View Maintenance for Complex Analytical Queries
- Differential Dataflow
- Incremental Evaluation of Reference Attribute Grammars using Dynamic Dependency
Tracking - Answer to "In which way should I structure a compiler/Interpeter?"
- Incremental Compilation In Sixten