<div>The abi is allowed to change post 1.0. If it wasn't, we'd be stuck with cdecl forever and that sucks.<br><br>I've only seen fastcall used for intracrate leaf calls.<br><br>Servo and rustc are the two biggest rust projects.<br><br>The mailing list is mostly dead BTW. Consider bringing this up on discuss.rust-lang.org instead.<br><br>If you plan on playing with calling convention, aatch and I (cgaebel) have been considering a rust-specific one. You should drop by on irc some time if it interests you!<br><br>Happy to help,<br>  - Clark</div>
<div class="mailbox_signature"><br></div>
<br><br><div class="gmail_quote"><p>On Sat, Dec 27, 2014 at 11:39 AM, Andrea Canciani <span dir="ltr"><<a href="mailto:ranma42@gmail.com" target="_blank">ranma42@gmail.com</a>></span> wrote:<br></p><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>I tried to collect as much information as possible from IRC and from the Web about TCO in Rust.<br><br></div>The most recent (and authoritative) reference I can find is <a href="https://github.com/rust-lang/meeting-minutes/blob/e3c325c7e30331cb43e0c5b68f35070f211ee4cb/weekly-meetings/2014-05-20.md#tail-calls">https://github.com/rust-lang/meeting-minutes/blob/e3c325c7e30331cb43e0c5b68f35070f211ee4cb/weekly-meetings/2014-05-20.md#tail-calls</a><br></div>The decision seems to be that it is an interesting feature, but that it should be postponed for a future release.<br></div>To me this looks like a good point, but I'm worried about potential backward-compatibility hazards.<br><br></div>In particular, the "be" keyword has been removed from the language and the proposed alternative ("become") has never been introduced. Wouldn't it be easier to ensure backward compatibility if the "become" keyword was at reserved in rust 1.0?<br><br></div>Another thing I'm worried about is callee vs. caller cleanup of the call stack. Changing the rust calling convention post-1.0 would break the ABI, so it would be very inconvenient.<br></div>On IRC I was told that rustc was already using the LLVM "fastcall" calling convention, but <a href="https://github.com/rust-lang/rust/blob/master/src/librustc_trans/trans/base.rs#L310">https://github.com/rust-lang/rust/blob/master/src/librustc_trans/trans/base.rs#L310</a> seems to indicate that the C calling convention is used instead.<br></div>In several posts on the TCO, one of the points against supporting TCO was that it involves using a slower calling convention, but I was unable to find any benchmark to support that statement.<br></div>Where can I find some discussions about the [dis]advantages of the different calling conventions and what design choices led to the current one?<br></div>
<br>I would like to evaluate the performance (speed, code size)  impact of changing the calling convention. What would be the best way to do this? Is there any "well-known" benchmark for changes that affect the overall behavior of the compiler?<br>I would assume that rustc itself is probably one of the most interesting "real-world" applications written in rust right now. Otherwise, is the compiler shootout challenge sufficiently interesting for this purpose?<br></div>
<div><br></div>
<div>Andrea<br></div>
</div></blockquote></div><br>