On Wednesday, 9 April 2014 at 08:24:55 UTC, Mike wrote:
On Tuesday, 8 April 2014 at 14:59:35 UTC, Artur Skawina wrote:
'memcoy' being a built-in compiler intrinsic means that when
the compiler
sees a 'memcpy' call, it does some checks (eg is the length
statically
known and small enough?) and then can generated the copy
instructions
directly, instead of calling the lib function.
Then it could do such magic in the _d_arraycopy function where
the call to memcpy exists. I'm still not seeing the motivation
behind putting this call to memcpy in Phobos.
Depending on the type being copied, "a[] = b[]" is not straight
up "memory copy" it's the actual full assignment, with postblit
and all. That's why the call we want is *really* memcpy.
The code where you saw this, if I'm not mistaken, is
"inPlaceInsert" or something of the like. The idea in this code
is to actually *move* the data, not create *copies* elsewhere.
The array assign is a fallback for CTFE. It's fine in CTFE,
because we don't care about performance, but it's not the actual
call we want.