[gmx-developers] Using C++ with Gromacs

Erik Lindahl lindahl at cbr.su.se
Thu May 8 09:07:48 CEST 2008


On May 8, 2008, at 2:40 AM, Julie Bernauer wrote:
> I am not sure it is a real suitable example but one could maybe cite  
> Boost libraries and Boost.python. (CGAL is ported to python with  
> boost).
> Boost uses bjam though.

On May 8, 2008, at 2:53 AM, Peter Eastman wrote:

> The ones that immediately spring to mind for me are Open Dynamics  
> Engine and Crystal Space 3D.  Naturally, this depends on what you  
> mean by "portable".  OpenMM will only really be useful if you have a  
> recent NVidia or ATI GPU and are using an OS and compiler that  
> supports the appropriate programming environment (CUDA or Brook+).   
> So we only have a narrow range of configurations we're concerned  
> about supporting in the near term.

I'm sure all those libraries are great examples of C++ design, but as  
Peter said I think it comes down to very different views on  
"portability". Nothing wrong with that (we have different target  
audiences), but for Gromacs portability means we compile out-of-the- 
box using combinations like portland compilers and UNICOS (Cray XT4),  
5-year-old versions of IBM XLC on AIX (since that might be compiler  
your local supercomputing center has a supported MPI version for),  
IRIX, HP aC on Itanium, whatever special BLAS/LAPACK libraries the  
vendor provides, etc.

Compared to that it's a walk in the park to achieve portability  
between the two most recent versions of gcc & Visual C++ on Linux/OSX/ 
Windows, which seems to be the reference for a couple of the above  

However, this does _not_ mean we shouldn't do much more object  
oriented interfaces and data abstraction in Gromacs (we're working on  
that, but there's a lot of old code to clean up), it's just that we'll  
need to accomplish it with handles rather than formal classes, and  
forego some of the more advanced c++ stuff.

Still, I couldn't help to notice this in the documentation of Open  
Dynamics Engine:

"The ODE library is written in C++, but its public interface is made  
of simple C functions, not classes. Why is this?
	• Using a C interface only is simpler - the features of C++ features  
do not help much for ODE.
	• It prevents C++ mangling and runtime-support problems across  
multiple compilers.
	• The user doesn't have to be familiar with C++ quirks to use ODE.




More information about the gromacs.org_gmx-developers mailing list