TempAlloc: an unusual request

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Jun 20 06:37:40 PDT 2011


On 6/19/11 9:48 PM, dsimcha wrote:
> On 6/19/2011 8:00 PM, Andrei Alexandrescu wrote:
>> On 06/19/2011 06:20 PM, dsimcha wrote:
>>> It's ok to allow an object to replace frameInit and frameFree for
>>> conformance to the general allocator interface, but I'd need to keep
>>> frameInit and frameFree around. They're useful for functions that return
>>> pointers to TempAlloc-allocated memory. I don't want to have to pass in
>>> a RegionAllocator object to each of these because it's too verbose. I
>>> want to be able to do:
>>>
>>> void doStuff() {
>>> TempAlloc.frameInit();
>>> scope(exit) TempAlloc.frameFree();
>>>
>>> auto arr = getArray();
>>> }
>>>
>>> uint[] getArray() {
>>> return TempAlloc.newArray!(uint[])(5);
>>> }
>>>
>>>
>>> My other concern is that giving RegionAllocator reference semantics
>>> would, IIUC, require an allocation to allocate a RegionAllocator. Since
>>> TempAlloc is designed to avoid global GC locks/world stopping like the
>>> plauge, this is obviously bad.
>>
>> I was actually glad of that particular outcome...
>
> ??? What outcome?

I was glad that one needs to pass a TempAlloc object down to the 
function, instead of that function silently returning memory allocated 
with TempAlloc. Generally I have a very strong stance against stuff 
that's simultaneously terse, implied, and unsafe. In fact the moment you 
mentioned that the one reason against passing TempAlloc objects down is 
verboseness, I interpreted that as a good argument why it's _good_ to do 
that.

I do agree with your choice of scan flags because your analysis of 
costs, benefits, and onus put on the user is compelling. In this case, 
however, it seems to me that functions that implicitly return stuff on 
the TempAlloc stack are paving the way towards messed-up modules that 
can't be reasoned about modularly.


Thanks,

Andrei



More information about the Digitalmars-d mailing list