www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - std.experimental.logger.Logger writeLogMsg is safe?

reply Minas Mina <minas_0 hotmail.co.uk> writes:
I'm trying to inherit from Logger, and I my custom logger to 
print to stdout using writeln(). But I can't because writeLogMsg 
is  safe, whereas writeln() is  system.

Why is writeLogMsg  safe? This is too restrictive.
Feb 22 2016
parent reply Jonathan M Davis via Digitalmars-d-learn writes:
On Monday, February 22, 2016 22:22:01 Minas Mina via Digitalmars-d-learn wrote:
 I'm trying to inherit from Logger, and I my custom logger to
 print to stdout using writeln(). But I can't because writeLogMsg
 is  safe, whereas writeln() is  system.

 Why is writeLogMsg  safe? This is too restrictive.
Short answer: Use trusted on the function overrides. Long answer: Well, if the logger isn't safe, then it can't be easily used in safe code, which would be a bit of a disaster, and from what I know of the logger API (though I'm not super familiar with it), there's really no reason why it shouldn't be safe given that it's passing strings along, and derived classes just need to print those strings. So, derived classes that want to be safe just need to be able to operate on strings safely. And if you can't guarantee that that's safe, then you have a problem. Now, obviously writeln isn't safe (and maybe it should be inferred as such most of the time, but that's a separate issue), but what you can do so long as you can guarantee that using writeln is actually safe (which it should be if all you're feeding it is strings), then you can mark your overrides as trusted, and that should work with inheritance. - Jonathan M Davis
Feb 22 2016
parent Minas Mina <minas_0 hotmail.co.uk> writes:
On Monday, 22 February 2016 at 23:03:38 UTC, Jonathan M Davis 
wrote:
 On Monday, February 22, 2016 22:22:01 Minas Mina via 
 Digitalmars-d-learn wrote:
 [...]
Short answer: [...]
Great, thanks.
Feb 22 2016