On Tuesday, 3 August 2021 at 11:51:38 UTC, Paul Backus wrote:
> On Tuesday, 3 August 2021 at 08:29:15 UTC, Tejas wrote:
> I know they're not real(see my original post's 2nd last sentence), but I was working out how to transpile C++ and without being able to represent rvalue refs, it's going to be impossible.
How can you hope to accurately represent t&&
without rvalue refs?
Perhaps look at how rvalue references are implemented under-the-hood in existing C++-to-native-code compilers, and use a similar technique in your C++-to-D compiler? After all, there is no such thing as an "rvalue reference" in assembly either.
Of course, this means you will have to do some semantic analysis on the C++ code to figure out when a parameter is being passed by rvalue reference, and translate it accordingly.
Sorry, but that sounds like saying implementing a generational garbage collector should be possible since assembly doesn't have a notion of "garbage collection".
Even zombinedev said above that construct t&&
itself is not supported by the type system of D.
If what you're saying was possible then Walter and Manu needn't have bothered with preview=rvaluerefparam
since D compiles to native code, which can represent all constructs.
Another example: template constraints vs concepts. No matter what, we simply cannot transform constraints in such a way that we won't have to write if
in the very first line of template definition. Sure, we might be able to hide it behind an alias, or function,@attribute or whatever; but you will have to write that if
, because D simply doesn't support writing template constraints in another way(and mixins don't allow that syntax-changing "monkey business"(I don't disagree that the label is wrong, btw)). Atlia went the attributes way and made this:
https://github.com/atilaneves/concepts
But you still require to put the if
in your template.
Lastly, I urge you as well to see this post that I linked previously
https://forum.dlang.org/post/qhynxxrdsaahxvoglztx@forum.dlang.org
Even Mathias is agreeing that there is no way to represent this (that he knows of).
I hope I'm not coming off as snarky. I too don't like talking about this again and again like a broken record but I also don't think there's a way to represent them without a language change. I know about this, but that's like saying we don't need @nogc exceptions because this exists.