The first time you implement lowering, it takes parsed code, expands macros, and compiles it to linear, untyped IR. But then you get users. Users have questions like "can I figure out what code this compiled thing came from so I can make essential tools like Revise.jl?" and "can we write macros without so many esc calls?" and "why are errors after lowering so cryptic?" and "not a question, but Revise works now because I've written a program that correctly reverses lowering about 80% of the time."
This talk is about the second time you implement lowering.