First in an ongoing series. Part 2 is also available.
What’s gained by using a new term “compile-time computing”? These techniques are well-established, and I feel like there are already too many terms.
I think metaprogramming is a good umbrella term which encompasses a variety of techniques. It’s more general than “compile-time computing”, and I think gets to the heart of the issue.
Metaprogramming is when the data a program operates on is code – whether in textual form, AST form, or “runtime form”. Not coincidentally, that’s also a good definition for a “compiler” or “interpreter”. Examples:
The problem with “compile-time computing” is that the same DSL can be implemented in a variety of ways. Whether it happens at compile time or runtime is orthogonal to what you’re doing. That you’re using metaprogramming is a more apt description than “compile-time computing”.
lexer / state machine generators
AST schema language, like ASDL 
schema compilers / message formats (like protobuf)
web template languages – You can find more than a dozen such languages in Python, Ruby, Perl, PHP, etc.
printf format strings – These are just like web template strings; in fact printf is accidentally Turing-complete 
My claim: for any example he gives of “compile-time computing”, you can find an equivalent example of metaprogramming that is not done at compile-time. The fact that that it’s metaprogramming is the interesting thing about the software architecture.
Compile time and runtime don’t really have solid meanings anyway – Lisp intermingles the two. There is a Cling interpreter for C++. When you’re writing compilers and build systems, build time is runtime! (That is not a vacuous or trivial statement, if you work on that type of thing it comes up)
EDIT: I feel like the Futarama projection proves my point, i.e. it’s irrelevant whether it’s a compiler or interpreter, but I probably won’t do a good job explaining that: https://en.wikipedia.org/wiki/Partial_evaluation
Forth also makes it easy to run user written code during compilation. Want a three-way IF statement (IF<=> )? You can easily do it in Forth. It’s less a macro system and more writing an extension to the compiler. And because of this, Forth does define the terms “runtime” and “compiletime”.
I agree with you. It’s already called metaprogramming. Specific use of it is often called macros. A lot of good stuff in CompSci uses multi-staged computation. Teaching people those terms will result in them finding all sorts of good stuff, esp worked examples, when they Google them.