std.allocator ready for some abuse
Maxim Fomin
maxim at maxim-fomin.ru
Fri Oct 25 02:19:55 PDT 2013
On Friday, 25 October 2013 at 09:13:45 UTC, Namespace wrote:
>>> But maybe a design without some alias notation would be more
>>> preferable:
>>> ----
>>> {
>>> ScopeAllocator m;
>>> int[] arr;
>>> arr.useAllocator(m);
>>>
>>> arr ~= 42; /// Use m.allocate
>>> } /// end of scope: ScopeAllocator collects all remaining
>>> memory.
>>> ----
>>>
>>> And:
>>> ----
>>> int[] arr;
>>> assert(arr is null);
>>> {
>>> ScopeAllocator m;
>>> arr.useAllocator(m);
>>>
>>> arr ~= 42; /// Use m.allocate
>>> } /// end of scope: ScopeAllocator collects all remaining
>>> memory.
>>> assert(arr is null);
>>> ----
>>
>> That's also doable. TypeInfo will be bloated more and there
>> would be cost of some sort of scope exit, and, ideally, a
>> check that reference does not escape, but this is doable.
>
> Why the cost of scope(exit)? If ScopeAllocator m get out of
> scope, the DTor is called and ideally the collect method is
> called. That's all. Or am I wrong?
Probably because there may be exception thrown between appending
to arr and end of block. In this particular case compiler may be
smart enough to optimize it away, but dmd optimization
capabilities and nothrow is a separate story.
More information about the Digitalmars-d
mailing list