> Compilation translates input code into output code without executing it.
I think it is not totally true. There's Forth immediate words, there's Lisp macros and to a lesser extend there's C++ templates (which are Turing-complete).
> Why would you confuse them by trying to apply the same term to them when we have very good distinct terms for these distinct concepts?
Because from a slightly more generalized perspective, that's the same thing.
Compilation: translate source code to bytecode
Interpretation: translate bytecode into side-effects
If I say that side-effects can be formalized into a language, I think I have most Haskell programmers with me. If you run your program in a VM, and compare examine the bytes of the snapshots before and after. You can use diff to turn those changes into another language. And you can use patch to replay those exact changes.
> Etymology does not come into it. Words mean what they mean, not what some related word might have meant in the past.
> There's Forth immediate words, there's Lisp macros and to a lesser extend there's C++ templates (which are Turing-complete).
This is true. It's not what we have been discussing so far, but yes, there is also a notion of executing code at compile time. We might call compile-time code execution "outer interpretation", but that would still be less clear than "compile-time code execution". It would also be different from what you had wanted to call "outer interpretation" so far.
> Compilation: translate source code to bytecode Interpretation: translate bytecode into side-effects
https://en.wiktionary.org/wiki/translate#Verb lists three senses of "translate", the first two of which have six sub-senses each. Non-technical language can be vague. That is why we introduce technical terms to speak of technical things.
> You realize you say that on Hacker News?
I don't know what you are trying to tell me. Which is a fitting end to this discussion about your insistence on communicating less clearly than you might.
The fact that you are counting the second set of meanings of translate, which is archaic (who said "words have meaning, not what some related word might have meant in the past"?), shows that you know how weak your argument is.
> That is why we introduce technical terms to speak of technical things.
Yep. I introduced two technical terms "outer interpreter" and "inner interpreter", along with their definitions.
> I don't know what you are trying to tell me. Which is a fitting end to this discussion about your insistence on communicating less clearly than you might.
Being able to accept that others may have a different terminology, embrace it and speak with their words: this is communication. You don't have a monopoly on the meaning of words.
C++ templates are not usefully complete: which would mean that they can calculate any possible unit of C++ syntax (the relevant representation in their domain of operation).
Turing Complete means that any general recursive function can be computed; but not necessarily with a useful representation of inputs and outputs or reasonable use of resources.
Analogy: suppose you can compute any function over the domain of the whole numbers, but these have a goofy representation likee SSSSS0 (successor of successor of .. zero). Your system cannot actually compute "42", only 42 S's followed by 0 which is interpreted as 42, so if the requirement is to calculate the actual digits "42", the system fails to deliver. Moreover, the representation it works with is tremendously time and space wasting.
I think it is not totally true. There's Forth immediate words, there's Lisp macros and to a lesser extend there's C++ templates (which are Turing-complete).
> Why would you confuse them by trying to apply the same term to them when we have very good distinct terms for these distinct concepts?
Because from a slightly more generalized perspective, that's the same thing. Compilation: translate source code to bytecode Interpretation: translate bytecode into side-effects
If I say that side-effects can be formalized into a language, I think I have most Haskell programmers with me. If you run your program in a VM, and compare examine the bytes of the snapshots before and after. You can use diff to turn those changes into another language. And you can use patch to replay those exact changes.
> Etymology does not come into it. Words mean what they mean, not what some related word might have meant in the past.
You realize you say that on Hacker News?