Discussion: Rvalue refs and a Move construtor for D
noone at nowhere.com
Fri Sep 6 18:42:08 UTC 2019
On Friday, 6 September 2019 at 18:13:03 UTC, kinke wrote:
> It'd just make the D ABI conform to the C++ ABI wrt. passing
> non-PODs and large PODs by value, making the compilers adhere
> to the D spec *and* fixing C++ interop when passing such
> structs by value across language barriers, soomething you're
> surely looking forward too.
> So the proposed ABI change (pass by ref instead of on stack &
> let callER destruct it) is the exact opposite of what you seem
> to see it as - it's streamlining the D ABI with C++. And it's
> orthogonal to the proposed move/forward intrinsics.
Dammit, I stand corrected again, just checked the clang ABI on
Posix x86_64 - it does pass large PODs on the stack. So please
discard my mentionings of large PODs (those are passed by ref on
Win64...) in this thread, my intention was always to firstly
adopt the respective C++ ABI for each target, and secondly to
exploit the low-level-by-ref-passing of non-PODs (AFAIK, what C++
does for all targets) when moving lvalue arguments to by-value
params (by eliding the temporary and passing the lvalue ref
directly), thirdly hoping to cover enough use cases in order NOT
to have to introduce rvalue refs in the language.
More information about the Digitalmars-d