Re: [eigen] Namespaces

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Man this is a tough conversation.  I do like namespaces, they seem like
a proper way to do it because that's why they were put into the
language, (although i don't know strousup) but both ways accomplish the
same thing, just one is emulating namespaces.  If I had to vote I'd say
use the namespace Eigen because I like them.  I know we did namespaces
with Avogadro and I still consider that maybe AMainWindow might have
been better, but honestly I don't regret it.

I have a couple things for you to consider Benoit then i'll be done.  I
tried to think this out well and please don't take it as an attack.

1) Using a namespace gives the _option_ to the developer to type out the
prefix 'Eigen::' everytime or allow them to do 'using Eigen::Object' or
to use 'using namespace Eigen'.  If you name the object EiObject you are
forcing them to type Ei everytime and even with autocomplete.  Having to
type Eigen::Object with autocomplete becomes E<tab>::O<tab> whereas
EiObject is EiO<tab> so maybe a little typing saved but negligable.

2) The only time you need to worry about the namespace is when declaring
a variable or calling a function in that namespace.  For the latter you
don't want to have global functions prefixed with eiDoSomething (in my
opinion).  qSort is ackward to me whereas Qt::sort.  It could be
cosmetic.

3) Namespaces are more proper.  Just cause QT doesn't use them doesn't
make it right.  Qt does use namespaces for their global defines (enums).
I find it annoying because I'd just as well do a using namespace Qt when
I'm using Qt functions and have it know what enum i'm talking about.  I
agree that just because they are proper doesn't make them the best way.
Consider though that namespaces are a part of a lot of formalisms (XML,
Java, Python) and when you look at people wanting to use Eigen for code
generated from UML or some higher level formalism like Model Driven
Architecture you're going to want that namespace.  Also i read an
article that when they did bindings for Ruby or something for KDE that
they had to use namespaces and had to work around it.

4) There is an argument to be made that even with namespaces that
ambiguity can exist.  But that's due to bad programming.  Just make sure
you're not doing something to make up for the problem of a bad
programmer.  Managing namespaces is a part of being a good programmer.

Doesn't KDE now use namespaces?  I think it does even though it's a
little ugly like KDE:KMainWindow or something like that.

Anyways, I think it's up to you.  If you like EiVector i'm totally cool
with it.  You do a termendous job with Eigen and also have contributed
to Avogadro so much I think you should do what you want.  If anyone is
goign to _not_ use your library for that reason then their loss.  And if
you decide to go Eigen:: and then change your mind i'll help you search
and replace with Ei prefix.  

--
Donald

Also read the wiki on namespaces maybe that will help ya decide.
http://en.wikipedia.org/wiki/Namespace_(computer_science)


(Thu, Oct 11, 2007 at 08:55:30PM +0200) Benoît Jacob <jacob@xxxxxxxxxxxxxxx>:
> Argh.
> 
> Seems like aside from me, everybody is either in favor of a namespace, or 
> doesn't care.
> 
> You, Cyrille, Konstantin, Andre.
> 
> I'm generally in favor of dictatorship, but every dictator has to listen to 
> the people once in a while.
> 
> So maybe, we'll revert to namespace Eigen:: instead of a prefix.
> 
> But not tonight. Let's give this whole issue more time to ripen.
> 
> Cheers,
> Benoit
> 
> On Thursday 11 October 2007 20:48:44 Schleimer, Ben wrote:
> > > > Look at what Qt does. Qt classes are not encapsulated in any namespace,
> > > > instead they have the Q prefix, like "QObject".
> > >
> > > Qt was first release at a time when namespaces were not well (if at all)
> > > supported by most C++ compiler.
> >
> > I have to agree with Cyrille. It would be cleaner to use Eigen::Object
> > instead of prefixing every class with Ei. Let the application programmer
> > figure out which "using" statements they want to do. It'll probably be rare
> > to get namespace collisions if eigen is the only matrix library used in an
> > application. Plus, when Eigen3 comes out, it'll be easier for app
> > programmers to which by changing the "using EigenX" instead of the prefix.
> >
> > Cheers
> > Ben
> 
> 





Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/