You have clearly thought about this quite a bit; you expounded at length in your original comment, which if I had to guess only glances upon the totality of your reasoning to present a summary of it here.
Can you elaborate on why in your use case moar power is a requirement? Basically, fleshing out what would go in the "Need" section of the NABC model (and a partial preview of "Competitors"):
Is it possible that the need is really just perceived and not actual, e.g. in the vein of programmers who demand the use of features in dynamic languages for things where they don't truly need that power <https://doi.org/10.1007/s10664-012-9203-2>?
> You have clearly thought about this quite a bit; you expounded at length in your original comment, which if I had to guess only glances upon the totality of your reasoning to present a summary of it here.
Correct. And thank you for the compliment.
And also great questions.
> Can you elaborate on why in your use case moar power is a requirement? Basically, fleshing out what would go in the "Need" section of the NABC model (and a partial preview of "Competitors")
So in my use case, more power is not needed. However, when you have a million users, there will be a user with a use case that requires that power. That is, unfortunately, the curse of generality.
As an example, most people think that full Turing-completeness is not necessary for a build system. At least one example I know of shows this to be false: processing TeX and LaTeX. This is because the process involves doing the layout; resolving links, footnotes, etc.; redoing the layout for the changes; redoing the resolution; redoing the layout; etc. This continues until a fixed point.
This iteration until a fixed point means that you can't use set iteration; you have to use a while loop. And a non-Turing-complete language simply cannot implement a while loop, by definition. If it did, it would be Turing-complete, in the sense that it could compute anything that any other Turing-complete language could. You could try to add a while loop to a non-Turing-complete language and keep it non-Turing-complete, but it wouldn't be anymore because the very existence of while loops makes a language Turing-complete.
This gets into the theory of computation (about the only time my Bachelor's in Computer Science is useful), but suffice it to say that if you need a while loop, you need a full Turing-complete language, and Turing-completeness technically make the most powerful kind of language.
(The metaprogramming doesn't really add power according to the theory of computation, but it does compress the program required, in that less code is necessary, which makes the program easier to hold in one's head. I think this is what Paul Graham was preaching for when he claimed that Lisp macros were more powerful. But there is also the possibility of the language placing artificial limitations while still being technically Turing-complete. Metaprogramming is meant to remove those artificial limitations.)
> Is it possible that the need is really just perceived and not actual, e.g. in the vein of programmers who demand the use of features in dynamic languages for things where they don't truly need that power?
Most of the time, yes, it will just be programmers that think they need the power, but they don't. I totally agree with that.
But there will be a time or two when the programmer really does need that power, and it had better be there.