On Wednesday, 26 June 2013 at 14:17:03 UTC, Dmitry Olshansky wrote:
Awful. What that extra syntax had brought you? Except that now new is unsafe by design? Other questions involve how does this allocation scope goes inside of functions, what is the mechanism of passing it up and down of call-stack.

Last but not least I fail to see how scoped allocators alone (as presented) solve even half of the problem.

Extra syntax allows me not touching the existing code.
Imagine you have a stateless event processing. That is event comes, you do some calculation, prepare the answer and send it back. It will look like:

void onEvent(Event event)
{
   process();
}

Because it is stateless, you know all the memory allocated during processing will not be required afterwards. So the syntax I suggested requires a very little change in code. process() may be implemented using std lib, doing several news and resizing.

With new syntax:


void onEvent(Event event)
{
   ScopedAllocator alloc;
   allocator(alloc) {
     process();
   }
}

So now you do not use GC for all that is created inside the process(). ScopedAllocator is a simple stack that will free all memory in one go.

It is up to the runtime implementation to make sure all memory that is allocated inside allocator{} scope is actually allocated using ScopedAllocator and not GC.

Does it make sense?

Reply via email to