Review of Jose Armando Garcia Sancio's std.log
Steven Schveighoffer
schveiguy at yahoo.com
Mon Mar 5 17:30:41 PST 2012
On Mon, 05 Mar 2012 20:22:05 -0500, 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. When you
> see codes like this (below), you don't blame standard library designers
> do you?
>
> using namespace std;
> int cout;
Except 'info', 'error', 'warning' are all common names, likely to be a
very attractive name for something that has nothing to do with (or cares
about) logging. cout is not a common name or even an english word, so
it's unlikely someone has or wants to create a cout member.
Couple this with the fact that all of these are nouns -- likely candidates
for fields.
Your argument has some merit, but I would add that my argument is only
against *common* global namespace names.
Another solution besides using a namespace is to make the names less
common, like linfo instead of just info.
-Steve
More information about the Digitalmars-d
mailing list