RFC: moving forward with @nogc Phobos

Sean Kelly via Digitalmars-d digitalmars-d at puremagic.com
Wed Oct 1 07:03:43 PDT 2014


On Wednesday, 1 October 2014 at 08:55:55 UTC, Andrei Alexandrescu 
wrote:
> On 9/30/14, 9:10 AM, Sean Kelly wrote:
>
>> Quite honestly, I can't imagine how I could write a template 
>> function in D that needs to work with this approach.
>
> You mean write a function that accepts a memory management 
> policy, or a function that uses one?

Both, I suppose?  A static if block at the top of each function 
that must be aware of every RC type the user may expect?  What if 
it's a user-defined RC type and this function is in Phobos?


>> As much as I hate to say it, this is pretty much exactly what 
>> C++
>> allocators were designed for.  They handle allocation, sure, 
>> but they
>> also hold aliases for all relevant types for the data being 
>> allocated.
>> If the MemoryManagementPolicy enum were replaced with an alias 
>> to a type that I could use to at least obtain relevant 
>> aliases, that would be something.  But even that approach 
>> dramatically complicates code that uses it.
>
> I think making MemoryManagementPolicy a meaningful type is a 
> great idea. It would e.g. define the string type, so the code 
> becomes:
>
> auto setExtension(alias MemoryManagementPolicy = gc, R1, R2)(R1 
> path, R2 ext)
> if (...)
> {
>     MemoryManagementPolicy.string result;
>     ...
>     return result;
> }
>
> This is a lot more general and extensible. Thanks!
>
> Why do you think there'd be dramatic complication of code? 
> (Granted, at some point we must acknowledge that some egg 
> breaking is necessary for the proverbial omelette.)

 From my experience with C++ containers.  Having an alias for a 
type is okay, but bank of aliases where one is a pointer to the 
type, one is a const pointer to the type, etc, makes writing the 
involved code feel really unnatural.


> The thing is, again, we must make some changes if we want D to 
> be usable without a GC. One of them is e.g. to not allocate 
> built-in slices all over the place.

So let the user supply a scratch buffer that will hold the 
result?  With the RC approach we're still allocating, they just 
aren't built-in slices, correct?


> That would be overreacting :o).

I hope it is :-)


More information about the Digitalmars-d mailing list