Conversation

Starting to get my head around compiling! It's fun! Trying to take a bidirectionally typed language and convert it into a reasonable Rust API. Kind of has the same energy as these little molecular machines that read/replicate DNA… tearing apart a program and reconstructing it.
Embedded video
GIF
1
10
It's taken a bit to get my head around... it seems there's lots of similarities to elaboration (where you take the concrete syntax and turn it into the core language, checking that it's well-typed in the process).
1
One thing I had to get my head around was how to compile a bidirectionally typed core language. You end up making a bidirectional compiler too: fn synth(&Context, &source::Term) -> (target::Term, target::Type) fn check(&Context, &source::Term, &target::Type) -> target::Term
1
2
Right, if you don't want to cache the types from the typecheck phase, then you need to fuse the typecheck and code generation stages otherwise you'll duplicate a lot of type checking logic
1
1
Yeah, that is what I was stuck on - if I _had_ to run the type checker again during my next compiler phase. It seems hat you really need seems to be the target language's types, rather than the source language's types.
1
Replying to
Thanks for the link, I'll give it my full attention tomorrow. For now, I'm wondering if his talk of 'meaning-making' means that I should only cache types for checked terms.
1
1