On 1/25/12 10:42 AM, Matthew O'Connor wrote:
Hi,

I was reading https://github.com/mozilla/rust/wiki/Bikeshed-tailcall and
wondered about the statement "Tail calls cannot be implemented in
general without a serious performance hit for all calls". I've never
heard this before. tjc speculated it had to do with decrementing
refcounts on normal function returns, but our discussion didn't reveal
any obvious reasons.

What is the reason for this performance hit on all calls?

Pascal calling conventions versus C ones, basically. To handle tail calls in the case in which the callee has more arguments than the caller, you have to make sure that callees pop all their arguments (the Pascal convention). This prevents callers from reusing one set of outgoing argument space for all calls (the C convention).

I don't know what the performance hit is in practice; I suspect it's fairly small and not serious. I'm sure that one could make a microbenchmark that performs significantly worse under Pascal calling conventions than C ones, though.

Patrick
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to