20334, "benharsh", "Memory.Initialization: moveSwap function signature", "2022-07-29T20:16:10Z"
https://github.com/chapel-lang/chapel/issues/20334
The current signature of moveSwap is:
proc moveSwap(ref lhs: ?t, ref rhs: t)
There are some minor issues regarding the function signature:
Return Type
We should explicitly state the return type is void.
Formal Names
lhs and rhs Don't really make sense in this context, as they somewhat imply a direction. Rust uses x/y for its swap functions formal names, and C++ uses a/b in std::swap. I propose using x/y.
Error message
We could use a similar tactic as proposed in (#20328) where we have a second generic moveSwap function that accepts fully-generic arguments and issues a compilerError. At this point though, I wonder if we could do something a bit nicer within the compiler itself for trivial cases like X : ?T, Y : T.