The cost of guaranteed tail call optimization is that you have to adopt the Pascal (callee side) convention for stack frame cleanup, so functions can’t reuse outgoing argument space. Does it matter in practice? Dunno.
Right, that’s what I mean. You have to do *something* different from the C calling convention. Does it matter? I dunno! Someone should test :)
-
-
What does it mean to test this? If Chez or MLton has really fast function calls, does it prove something?
-
Run SPECint with an LLVM that compiles all functions with your custom calling convention?
-
Here's a different test: have any languages with tail calls ever tried to find opportunities to use the C convention? I think the answer is no, but I certainly don't know every system.
-
I doubt it, but that’s probably due to history more than anything else. The Lisp/Scheme tradition way predates the C ABI becoming ubiquitous.
End of conversation
New conversation -
-
-
Oh, I see! OK. Yes, for sure, I'd love to see some testing; but which language would make sense for such testing? And how could one interpret the results - what would they be comparable to?
-
The Pascal convention was ironically enough a code size *win* for old x86 compilers, which is why Win16 and Win32 used it pervasively, though that was well before the days of modern code generators that reuse stack space intelligently
-
Not surprising, given the ENTER and LEAVE instructions on x86 that optimize code size for Pascal conventions.
-
Not just that, when you have a vintage immediate-mode code generator that's splatting out a bunch of push/pop, then you move the `ret n` into the callee, saving the caller from having to pop
End of conversation
New conversation -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.