Separate Emacs Bytecode Stack
github.com
github.com
As the bytecode interpreter got tigger, and eventually moved to a JIT the trade offs start to change quite dramatically: burning a register to reference the explicit stack, managing two call stacks, etc start to eat most of the gains. Once you eventually leave C behind for the interpreter loop the problems of large interpreter stack frames ceases to exist.
Eventually you end up back at regular calls and stack recursion again.