Replacing C's memcpy with a D implementation
Mike Franklin
slavo5150 at yahoo.com
Sun Jun 10 13:27:04 UTC 2018
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
More information about the Digitalmars-d
mailing list