Microsoft working on new systems language

Chris Cain clcain at uncg.edu
Tue Dec 31 09:52:54 PST 2013


On Tuesday, 31 December 2013 at 06:28:40 UTC, Ola Fosheim Grøstad 
wrote:
> A flexible new and good compiler level memory management 
> support that cannot be overridden gives the compiler some 
> optimization opportunities. E.g. putting objects on the stack, 
> allocating a single chunk for multiple objects, delaying init 
> and perhaps avoiding allocation.
>
> So I am personally sceptical of pushing libraries over advanced 
> compiler support. Leaving more room for analysis is usually a 
> good thing.

Well, that's certainly a good point. There's _probably_ some 
extra optimizations that could be done with a compiler supported 
new. Maybe it could make some significantly faster code, but this 
assumes many things:

1. The compiler writer will actually do this analysis and write 
the optimization (my bets are that DMD will likely not do many of 
the things you suggest).
2. The person writing the code is writing code that is allocating 
several times in a deeply nested loop.
3. Despite the person making the obvious critical error of 
allocating several times in a deeply nested loop, he must not 
have made any other significant errors or those other errors must 
also be covered by optimizations.
4. The allocation isn't passed around too much to avoid the 
analysis or isn't actually kept around sometimes for some reason

This makes the proposed optimization _very_ situational. If the 
situation does occur, it's possible that the user can use 
something like "std.allocator.StackAllocator" to do what he 
needs. Manual optimization in this case isn't too unreasonable. 
Considering the drawbacks of new and the advantages of a library 
allocation, this additional _potential_ advantage of new isn't 
enough to suggest its usage over a library solution here. Again, 
it's not a bad point, but it's just not compelling enough.

That all said,

> The issue I have with library level allocation is that the 
> compiler does not know that the code is doing allocation?

_Technically_ the compiler could also do some analysis in 
functions and figure out that it will be allocating in there 
somewhere and using that allocation later on. Think of replacing 
library calls when it's noticed that it's an allocate function. 
It's pretty dirty and won't actually happen nor do I suggest it 
should happen, but it's actually still also _possible_.


More information about the Digitalmars-d mailing list