On 05-04-2012 12:16, Dmitry Olshansky wrote:
On 05.04.2012 13:49, Alex Rønne Petersen wrote:
Hi,

It is no secret that DMD is the only compiler in existence that follows
the "D" calling convention (and even then, only on some platforms,
seemingly?).

IMHO It's the only sane convention I've seen. C's default of caller-side
cleanup adds nothing but a mess for years to clean up. And code size
bloat for no good reason. I think it was just a "cool trick" to make
printf work, bleh. And extern(D) still allows that.

Right. I won't deny that the "D" calling convention is good, but supporting it is not practical.


Both GDC and LDC use the C calling convention of the
platform by default (and don't even have options to use the "D" calling
convention because their back ends don't support it at all).

I'm writing a virtual machine. As far as I am concerned, the "D" calling
convention adds nothing but complexity to the configuration support
matrix. The calling convention situation across platforms is already
utterly insane enough as it is. I would not have a problem with
supporting the "D" calling convention if all compilers followed it. But
they don't. And it is only specified for x86. Even in an ideal world,
the "D" calling convention won't exist everywhere because it isn't
intended to.

So yes, we could just say "but eventually, those compilers should
support it!".

Yup, let's stop being kids and copying whatever big ones are doing.
Standards sort of happen like this: people just start doing things
differently, then others like it and follow suit and then it's all
written on a bunch (virtual) paper with ISO number somewhere.

Good luck convincing the GCC guys to merge your D ABI patch. ;)


But realistically, it is not going to happen. Those
compilers have no reason to implement yet another calling convention
that is entirely specific to x86.

Extend it, I've seen some movement on ARM side.

Extend what?



I don't think it's good that DMD forces all functions to use the "D"
calling convention by default. However, I accept that it is an
established situation, and changing is now is not an option.

That said, I believe a compiler switch to set the default extern()
linkage is not an unreasonable thing to ask for, e.g.: dmd -extern=C
foo.d

Thoughts?





--
- Alex

Reply via email to