Er, I did not mean that 'yours' was the breaking change but rather I mean 
my later proposal of changing the overall style to assume no arguments 
expressions are executed would be a breaking change, I was a bit backwards 
there.  Too little coffee...  ^.^;


On Thursday, August 3, 2017 at 12:44:59 PM UTC-6, Michał Muskała wrote:
>
> Adding a new module is not a breaking change. Why would it be?
>
> Michał.
>
> On 3 Aug 2017, 19:39 +0200, OvermindDL1 <[email protected] <javascript:>>, 
> wrote:
>
> Considering it is a breaking change anyway, why not keep it in `Logger` 
> but just append `_lazy` to the existing functions, so `warn` has a 
> `warn_lazy` and so forth as well? 
>
> I'm curious why logger guarantees execution of the argument anyway as 
> almost no logging library in any other language I've used guarantees that 
> (as the entire calls can vanish at compile time depending on settings). 
>  Perhaps it would be good to change the default style in Elixir 2.0 so that 
> there are no argument evaluation guarantees at all and postpone the changes 
> until then (people can just use functions until then)?
>
>
> On Thursday, August 3, 2017 at 10:17:04 AM UTC-6, Michał Muskała wrote: 
>>
>> Hello everybody, 
>>
>> Elixir's logger is a solid library, it has one awkwardness in use, 
>> though. When logging data that might be expensive to produce (and arguably 
>> anything besides static strings is expensive to produce for logging), 
>> logger requires wrapping the content in a function.
>>
>> This is dictated by the fact that otherwise logger can't guarantee the 
>> argument to the logger macros will be evaluated, so it has to be explicitly 
>> marked as lazy. Unfortunately, while this solution is correct, it is quite 
>> awkward to use and makes the code less readable.
>>
>> I propose adding a new Logger.Lazy module with the same interface as the 
>> Logger module - and by that I mean all the debug, info, warn and error 
>> macros. The only difference would be in the fact that macros from that 
>> module, wouldn't give guarantee as to the execution of the argument of the 
>> log macros. This could be achieved by implicitly wrapping in a function or 
>> probably (and preferably) injecting the test condition directly into the 
>> call site.
>>
>> Introduction of a new module makes it extremely easy to use in new code 
>> (without needing to learn anything new or exploring new interfaces) and 
>> adding a separate module makes it possible to update old code extremely 
>> easily - all that's needed is change the line
>>
>>     require Logger
>>
>> into
>>
>>     require Logger.Lazy, as: Logger
>>
>> Michał.
>>
> --
> You received this message because you are subscribed to the Google Groups 
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/28ed5856-ed06-47f7-a290-f9ee210e3b48%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/28ed5856-ed06-47f7-a290-f9ee210e3b48%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/1dc36c38-20d1-4bce-9636-51d5722fa66c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to