Problems:
- a lot of the complexity in modern programming comes from connecting various systems together & current paradigms aren't well suited for this kind of work
- it's easy to share code, but much harder to package up & share features seamlessly
Key Idea: Compile graphs should be shared between projects so compilers can understand how to connect to the higher level interfaces a program exposes.
General purpose programming languages have a wide range of uses because they are built on foundational abstractions. But this flexibility comes at a cost: there's a lot of distance between those higher level abstractions that we deal with (APIs, queries, data models, streams, HTTP requests, etc) and the language itself. This distance is the reason it's ridiculously hard to do something like code completion or compile-time-feedback for a higher order construct like a request to a specific endpoint.
It's easy to code complete a function because it's represented by a FunctionNode in the A