Secondly, the macro caching idea is very cool: you're memoizing macros based on their input. I'm actually surprised that I haven't heard of that technique before... it seems like a really obvious thing to do.
Maybe it's because Kernel ditches macros and just uses raw vaus, in which case you'd have to memoize based on both the environment and the input... hm... that's actually a really interesting idea...
---
Thirdly, you mentioned your strategy for first-class continuations... I had actually been trying to figure out how to implement continuations in Nulan, but your explanation is simple enough that it should work, so much thanks for that!