Hidden allocations (Was: Array literals REALLY should be immutable )

Denis Koroskin 2korden at gmail.com
Thu Nov 12 09:37:38 PST 2009


On Thu, 12 Nov 2009 20:26:44 +0300, Bill Baxter <wbaxter at gmail.com> wrote:

> 2009/11/12 Denis Koroskin <2korden at gmail.com>:
>
>> // untested
>> void mkdirRecurse(string path) {
>>    char* buffer = alloca(path.length);
>>    memcpy(buffer, path);
>>
>>    foreach (i, c; buffer[0..path.length]) {
>>        if (c == '/') {
>>            buffer[i] = 0;
>>            mkdir(buffer);
>>            buffer[i] = '/';
>>        }
>>    }
>> }
>>
>> There are a lot of functions that allocate without a clear reason.)
>
> I'm pretty sure the reason is that it means library code that's easier
> to write, understand and maintain.
>
> But yeh, if you give me the choice of two different functions, one
> that allocates and one that doesn't, otherwise identical, I'll pick
> the non-allocating version.
>
> --bb

It also means that the former function can't be used in programs that  
disable GC (kernels, embedded development etc). Quality is in the details  
like that.

Java/C# don't follow this rule, but they are not systems programming  
languages, and their GCs are a lot better that D's one.



More information about the Digitalmars-d mailing list