On Sunday, 10 June 2018 at 13:16:21 UTC, Adam D. Ruppe wrote:
And D already has it built in as well for @safe etc:
arr1[] = arr2[]; // the compiler makes this memcpy, the
optimzer can further do its magic
so be sure to check against that too.
My intent is to use the D implementation in the druntime. I'm
trying to replace the runtime hooks with templates, so we don't
have to rely so much on `TypeInfo` and we can begin to use more
of D without linking in the runtime.
But one think I discovered is that while we can set an array's
length in @safe, nothrow, pure code, it gets lowered to a runtime
hook that is neither @safe, nothrow, nor pure; the compiler is
lying to us. If I replace the runtime hook with a template, I
need to be honest, and that means all that low-level code in
druntime that the runtime hook depends on needs to be @safe,
nothrow, and pure. So I'm starting with the fundamental
dependencies on the C library, trying to ensure they can be
replaced with D implementations and use in D idiomatically. For
example, memcpy might look like this.
void memcpy(T)(T[] dest, T[] src);
We can extract size, alignment etc.. at compile-time.
So, my goal is not for user-facing code, but for improving the
druntime implementations.
Does that make sense?
Mike