std.experimental.logger formal review round 3
Martin Nowak via Digitalmars-d
digitalmars-d at puremagic.com
Tue Oct 28 04:11:07 PDT 2014
On Tuesday, 28 October 2014 at 10:05:47 UTC, Robert burner
Schadek wrote:
> On Tuesday, 28 October 2014 at 09:39:24 UTC, Martin Nowak wrote:
>> On Tuesday, 28 October 2014 at 08:38:50 UTC, Robert burner
>> Schadek wrote:
>>> Actually, that is only true for LogLevel given to a log call
>>> at runtime. calls to info, trace etc. are guarded with static
>>> if.
>>> So you're not paying any runtime overhead when calling log
>>> functions with LogLevel build in their name.
>>
>> If I cannot change the version identifiers that a library was
>> compiled with then the static if is always true. So you have to
>> perform the check at runtime. The only way around that is to
>> make
>> each library function that performs logging a template, be it
>> by
>> passing a Logger with CT LogLevel or by turning functions into
>> template functions so that the version identifiers leak into
>> the
>> library.
>
> every log call is a template function or method already.
>
>> The latter is more fragile because the compiler might omit
>> instatiating a template or it might inline a function.
>
> omitting the instantiation sound like undefined reference.
> I don't see the problem with inlining. 1. there are no log
> functions only log templates. 2. The version statement will
> either leave empty template functions bodies, if(false) { ... }
> template functions bodies, or template function bodies that
> perform regular LogLevel checks on runtime LogLevel.
>
> We're running in circles here. Lets find a new solution that
> allows us to
> * dmd -version=StdLoggerDisableLogLevel -- disable a LogLevel
> at CT of user code
> * that does not require a static Logger LogLevel
> * does not leak version statements into phobos
> * does not call log template functions where the LogLevel of
> the version statement is part of the name, or at least yields
> empty bodies for these template functions callls
Yep, let's try that.
I think part of the misunderstanding is that I'm thinking of an
app as user code plus a number of libraries all on top of phobos.
Say I have an app using vibe.d and I want to enable logging in my
app, but disable it in phobos.
Was it even a design goal that logging can be enabled on a per
library level?
More information about the Digitalmars-d
mailing list