Add an optimization for: Range2 copy(Range1, Range2)(Range1 source, Range2 target); ...to use the c function memmove when it is safe to do so and the two ranges overlap each other (when they don't overlap, a vectorized copy should be faster). As far as I can tell, it is safe to use memmove for copying source over target if all of the following are true: 1) Both ranges are arrays (static or dynamic) 2) Both arrays have the same element type 3) hasElaborateAssign!T is false for the element type T I haven't benchmarked anything, but all the good C++ standard library implementations of std::copy seem to do this optimization, and I trust that they know what they are doing.
(In reply to comment #0) > Add an optimization for: > > Range2 copy(Range1, Range2)(Range1 source, Range2 target); > > ...to use the c function memmove when it is safe to do so and the two ranges > overlap each other (when they don't overlap, a vectorized copy should be > faster). As far as I can tell, it is safe to use memmove for copying source > over target if all of the following are true: > > 1) Both ranges are arrays (static or dynamic) > 2) Both arrays have the same element type > 3) hasElaborateAssign!T is false for the element type T > > I haven't benchmarked anything, but all the good C++ standard library > implementations of std::copy seem to do this optimization, and I trust that > they know what they are doing. Also, the documentation for std.algorithm.copy should be changed to indicate that the ranges are allowed to overlap if the above conditions hold.
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/9984 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB