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