Multiple return values...

Artur Skawina art.08.09 at gmail.com
Sun Mar 11 07:01:03 PDT 2012


On 03/11/12 02:27, Manu wrote:
> I've never seen the compiler do wildly unexpected things unless whole program optimisation is enabled

The compiler can only ignore the ABI when it knows it sees the whole picture,
ie whole program, or whole unit in case of private/local functions.

> which I don't imagine D will be able to support any time real soon?

Umm, GDC supports WPO, both as LTO and "std" WPO, though i don't remember if
i ever tried the latter.
In fact, until GDC learns cross-module inlining, using these modes is the only
way to make the compiler generate sane code, w/o reverting to turning all
D functions into templates or compiling all sources together (at which point
you could just as well turn on WPO...).
Also, unit-at-a-time, which is on by default, can help.

It (gdc) still has a few LTO bugs which sometimes cause trouble, but often can
be worked around. And you may need to use the *.d runtime files (instead of *.di)
etc. 

> ...and even then, relying on WPO for the language to generate good code in certain circumstances is a really really bad idea. This makes the task of implementing an efficient compiler for the language extremely difficult.

There is a reason why i never even considered trying out a non-gcc-based D compiler... [1]

For a language like D, WPO in some form is almost required; w/o it you'd need to
always think about how the compiler will treat your code; which, while possible,
would often result in more "unnatural" and tricky solutions. (In C/C++ there's
a *.h/*.c split, which helps mitigate the problem)


artur

[1] LLVM is possibly an option too, but i haven't yet found the time to investigate.


More information about the Digitalmars-d mailing list