memcpy, memset, memcmp and friends in the D Runtime

Brad Anderson eco at gnuk.net
Fri Apr 11 13:17:34 PDT 2014


On Wednesday, 9 April 2014 at 12:38:20 UTC, monarch_dodra wrote:
> On Wednesday, 9 April 2014 at 12:12:35 UTC, Mike wrote:
>> On Wednesday, 9 April 2014 at 11:50:13 UTC, Daniel Murphy 
>> wrote:
>>> "Mike"  wrote in message 
>>> news:iflykgpsrmdbfhuwzqtp at forum.dlang.org...
>>>
>>>> So, my question remains:  If I'm porting D to a platform 
>>>> that has no C library, shouldn't a public, supported 
>>>> function that copies memory be added in the D Runtime?
>>>
>>> What platform doesn't have a C library?  And you can always 
>>> cast arrays to ubyte[] before assigning to avoid postblit.
>>
>> My custom, bare-metal, D-only platform has no C library, nor 
>> will it ever.  And, Yes, I know I can cast, but should I?
>>
>> memcpy is used quite often in Phobos.  Here's a small sample 
>> from std.array:
>>
>> void trustedMemcopy(T[] dest, T[] src) @trusted
>> {
>>    assert(src.length == dest.length);
>>    if (!__ctfe)
>>        memcpy(dest.ptr, src.ptr, src.length * T.sizeof);
>>    else
>>    {
>>        dest[] = src[];
>>    }
>> }
>>
>> You could ask the same question there, "Why isn't a cast used 
>> instead?" and remove the dependency on the C library.
>>
>> So far, it seems D has only been used on one subset of 
>> computer systems that happen to have a C library, but some of 
>> us our trying to break some new ground with D.  I'm 
>> challenging the "D is only useful on PCs with a C library" 
>> bias and looking to see if D has the will to stand on its own 
>> two feet instead of leaning on C.
>
> I think arguably, there should be D equivalents of the C 
> runtime functions, if only for the added safety of slices (for 
> example, memchr could be 100% certifiably safe), and to avoid 
> the rampant deduplication of things as in the above, because of 
> CTFE.
>
> These may or may not use the C-runtime library. But at that 
> point, it would become a "druntime implementation detail", 
> rather than rampant usage throughout phobos.

This list of secure alternatives to C functions Microsoft has 
would probably be a good source of inspiration when deciding what 
functions should be considered for reimplementation:

http://msdn.microsoft.com/en-us/library/wd3wzwts.aspx%7C%7Clist


More information about the Digitalmars-d mailing list