On Sep 8, 2014, at 11:22 AM, Christian Stimming <christ...@cstimming.de> wrote:

> Am Sonntag, 7. September 2014, 15:10:13 schrieb John Ralls:
>>> I strongly prefer namespaces in all-lowercase. I have somewhat a
>>> preference
>>> for "gnc" as namespace name, but we are an application anyway and not a
>>> library, so we're basically free to choose whatever we want as interface
>>> naming schemes.
>> 
>> Any particular reason for the all lowercase preference? Not that it matters,
>> gnucash and GnuCash are equally unique.
> 
> I think one relationship wasn't mentioned so far: The filenames and the 
> corresponding namespace and class names. I think both should be as identical 
> as possible - similar to Qt, different from glib.
> 
> Namespaces in lowercase gives also directory names in lowercase. Class names, 
> well, should appear in the file names IMHO as unchanged as possible. I prefer 
> both with the first letter in capital, but I know this causes occasionally 
> some hassles on windows systems, as those colleagues notoriously forget to 
> add 
> their include directives with the correct case sensitivity. Other people 
> argue 
> that file names should be all lowercase in general. Both views exist.

I agree that filenames should reflect the class that they implement, when they 
do so, and I’ll add that in general a file should implement only one class. 
Capitalization is OK as long as one keeps in mind that the Mac file system is 
normally case-preserving but case-insensitive, so e.g. Account.h and account.h 
will map to the same file.

I don’t think we want to give each directory its own namespace. I’m not even 
sure that we want any namespaces inside ‘gnucash’.

>> I don't mind tagging member variables, and I find m_varName to be clearer
>> than just sticking an underscore at the end. One can go one step further
>> and tag static members with a c_ or an s_, while being aware that static
>> members, just like any other static or global variable, require extra
>> synchronization and so should be avoided as much as possible.
> 
> Ok for the prefix. However, "static class members" are not at all evil. 
> They're a normal part of the language and needed for modelling certain 
> aspects 
> of a program. What is evil are global variables. But static class variables 
> are just fine - they are fixed into their scope and have access rules. They 
> are simply needed occasionally. Nothing that necessarily has to be avoided.

Static member variables, a.k.a. class variables, are indeed a core feature of 
the language. When using them one just has to be aware that access must be 
synchronized; fortunately C++11 added some nice sync functions to the standard 
library that make that reasonably easy. However, synchronization is a bit 
expensive and so it’s better to avoid it if possible.

There are times when regular member variables need to be synchronized too — any 
time one has a shared_ptr or naked pointer running around all access to its 
members must be synchronized. 

The same is true of file-scope statics, which aren’t globals, but their 
existence seldom reflects good C++ design. In general a file-scope static 
should be a member variable; in some cases a class variable. 

Regards,
John Ralls


_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to