Review of Jose Armando Garcia Sancio's std.log

Jose Armando Garcia jsancio at gmail.com
Tue Mar 6 11:36:04 PST 2012


On Mon, Mar 5, 2012 at 7:11 PM, Robert Jacques <sandford at jhu.edu> wrote:
> On Mon, 05 Mar 2012 19:22:05 -0600, so <so at so.so> wrote:
>>
>> On Monday, 5 March 2012 at 23:51:29 UTC, Steven Schveighoffer
>> wrote:
>>>
>>> On Mon, 05 Mar 2012 18:30:03 -0500, David Nadlinger
>>> <see at klickverbot.at> wrote:
>>>
>>>> On Monday, 5 March 2012 at 21:55:08 UTC, Steven Schveighoffer
>>>> wrote:
>>>>>
>>>>> The log aliases use names that are too common.  I think
>>>>> log.info is a better symbol for logging than just 'info',
>>>>> which could be a symbol in a myriad of places.  Given that
>>>>> D's symbol lookup rules allow shadowing of global symbols,
>>>>> this does not work out very well.
>>>>
>>>>
>>>> Originally, the code used log!info and so on, but it was
>>>> changed to the current design right after review begin, the
>>>> rationale being that you could always use »import log =
>>>> std.log« if you want the extra namespace.
>>>
>>>
>>> That doesn't help.  Software isn't static.
>>>
>>> import std.log;
>>> import other; // defines B
>>>
>>> class A : B
>>> {
>>>   void foo()
>>>   {
>>>      info("some info message"); // error! int isn't a function!
>>>   }
>>> }
>>>
>>> other.d:
>>>
>>> class B
>>> {
>>>   int info; // added later
>>> }
>>
>>
>> That is not a counter-argument to something related to this
>> library but everything that lies in global namespace.
>> At its first state both severity levels and the "log" was in
>> global namespace. Now only severity levels.
>>
>> You are also overlooking one crucial fact that this library will
>> be part of phobos, standard library. Which requires everyone to
>> adopt.
>
>
> Please don't forget that you are _submitting_ a library into Phobos and the
> D ecosystem at large. Yes, new code can be expected to avoid these names,
> but all existing code has to be retrofitted and fixed.

Not is doesn't. First, it will only break your code if you import
std.log. If you are now importing std.log that means you are already
modifying the code. If you don't want to modify existing code when
adding your changes just:

import someSymboleThatDoesntCollide = std.log;

Pick your poison.

Thanks,
-Jose


More information about the Digitalmars-d mailing list