Voting: std.logger

Jakob Ovrum via Digitalmars-d digitalmars-d at puremagic.com
Sat Aug 30 06:09:53 PDT 2014


On Saturday, 30 August 2014 at 02:11:49 UTC, Dicebot wrote:
> ====================================
> Jakob Ovrum
> ====================================
>
> "The *API* must support minimal dynamic memory allocation for
> the normal execution path. However, theoretical *implementation*
> changes that reduce memory allocation are not a deal-breaker."
>
> This seems to be addressed but though it is desired to verify 
> it via @nogc unittest block which uses stub no-op logger (to 
> verify that nothing in between allocates). One place were GC 
> allocations is unavoidable is core.d:1628 - it will always 
> create FileLogger first and allow assigning custom one later. 
> Is there any way to circumvent it?

Yes - split the `stdlog` property into a getter and a setter. 
Then if the setter is called first (with a non-null reference), 
the getter never gets to allocate the default instance. I pointed 
this out in a line comment before, but I guess it disappeared due 
to the name change...

Also, as I said in the line comment, it doesn't need to 
GC-allocate, it can allocate in global memory or TLS using 
emplace (which of them is appropriate depends on the threading 
model, I guess...). If Andrei's reference-counting suggestion is 
implemented, then depending on the details, it's possible that 
the default logger could be allocated on the C heap instead of 
the GC heap as well, managed by RC.


More information about the Digitalmars-d mailing list