4 ms·
I am genuinely asking, is your position that a compiler cannot convert: g(): a = 1+1; b = 2+a; print(b); return f() into code that does not allocate s
by throwaway17_17 4y ago
I am genuinely asking, is your position that a compiler cannot convert:
g():
a = 1+1;
b = 2+a;
print(b);
return f()
into code that does not allocate stack space and just reuses the frame allocated for g()?
- SamReidHughes 4y agoIt depends on the calling convention used -- whether it is caller clean-up or callee clean-up. With caller clean-up, the stack pointer is left below the argument list when the function returns. With callee clean-up, it gets popped above the argument list. You can perform tail calls naturally if it's callee clean-up. (With caller clean-up, a compiler might hypothetically pull off a tail call if the callee's argument list takes less memory, but it's not something you could add as a language feature.)
- throwaway17_17 4y agoThanks, that explains the trouble I was having. I was thinking about it without any consideration to calling-convention.