A big part of my recent work is about getting good combinations of predictable high performance and high-level abstraction, via PL design and theory. Staged compilation is an important part of it:
I've been doing some prototyping and design exploration. There's no usable standalone implementation but I do want to get to that point eventually.
Garbage collection is present in all of my designs, simply because the starting point is functional programming with ADTs and closures, and the most convenient setup for this is to have GC.
If we aim for the best performance, GC can be crucial for some workloads, but it's more common that we explicitly don't want to use a GC. Most latency-critical programs are written in C, C++ or Rust, without GC.
First, type safety is non-negotiable for me, both at runtime and compile time. By the latter I mean that well-typed code-generating programs must yield well-typed code. Every design choice has to accommodate type safety.
Second, two-level type theory (2LTT) is very expressive and convenient for two-stage compilation. But: systems that are memory-safe and GC-free tend to be sub-structural. This means that there are restrictions on the usage of variables. Sub-structural object languages haven't been researched for 2LTT-s.