<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 18 May 2013 21:02, Dicebot <span dir="ltr"><<a href="mailto:m.strashun@gmail.com" target="_blank">m.strashun@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  Are there any practical reasons for this other than no one actually cared to keep ABI synced?<br>
</blockquote></div><br></div><div class="gmail_extra">The D ABI used by DMD is bespoke, and there are some problems in 64bit C ABI.<br>LDC afaik has a half and half situation which is no good to anyone.<br></div><div class="gmail_extra">
GDC uses whatever is the default for it's target, which is infact C ABI.<br><br></div><div class="gmail_extra">GDC and LDC C ABI may differ, ymmv depending on what you are testing this on.<br><br><br></div><div class="gmail_extra">
Also, GDC/LDC/DMD32/DMD64 use different portions of the druntime.  For instance, if you are concatenating two arrays  (a[] ~= b[];) and compile the application with DMD 32bit, and linked to a druntime built by GDC then you'll get undefined references to '_d_arrayappendcT' (for GDC, this function is useless as is not portable, so we version it out)<br>
<br></div><div class="gmail_extra">There are some other hidden implementation details such as the magical thread local vars differ between platforms on DMD, but remain the same on GDC, etc, etc, yada, yada...<br></div><div class="gmail_extra">
<br clear="all"></div><div class="gmail_extra"><br>-- <br>Iain Buclaw<br><br>*(p < e ? p++ : p) = (c & 0x0f) + '0';
</div></div>