Can anyone elaborate on how or why Turing completeness requires these sub optimal patterns?
I recall reading about avoiding Turing completeness for similar reasons to avoid the halting problem.
> Other times these programmers apply the rule of least power—they deliberately use a computer language that is not quite fully Turing-complete. Frequently, these are languages that guarantee all subroutines finish, such as Coq.
It isn’t that there are suboptimal patterns, it’s just the more expressive your language can be at runtime, the less you can reason about statically. An example is data-dependent control flow. If you can’t reason about what branch your code is going to take statically (without your runtime data) it is harder to generate fast code for it.
I recall reading about avoiding Turing completeness for similar reasons to avoid the halting problem.
> Other times these programmers apply the rule of least power—they deliberately use a computer language that is not quite fully Turing-complete. Frequently, these are languages that guarantee all subroutines finish, such as Coq.
https://en.m.wikipedia.org/wiki/Halting_problem