The MPI C++ Bindings
What a strange position I find myself in: the C++ bindings have become somewhat of a divisive issue in the MPI Forum. There are basically 3 groups in the Forum:
- Those who want to keep the C++ bindings deprecated. Meaning: do not delete them, but do not add any C++ bindings for new MPI-3 functions.
- Those who want to un-deprecate the C++ bindings. Meaning: add C++ bindings for all new MPI-3 functions.
- Those who want to delete the C++ bindings. Meaning: kill. Axe. Demolish. Remove. Never speak of them again.
Let me explain.
Back in the 1994-1996 timeframe, Andrew Lumsdaine (my graduate advisor) and I created the MPI C++ bindings and successfully got them to be an official part of the MPI-2.0 standard.
Our original intent for the bindings was to make them more-or-less a 1:1 mapping to the C bindings, but with a few extra C++ language features. The Forum explicitly rejected the approach of making a new C++ class library for the bindings because that would be creating new semantics that are not part of the MPI standard. These are bindings, after all, not new functionality.
The idea was that giving a few extra language-specific features in the C++ bindings would be a good bootstrap into making more interesting C++ class libraries.
Unfortunately, that intent never really materialized in 3rd party software. The easiest C++ bindings fail to describe is the Boost.mpi C++ class library: it was implemented on top of the MPI C bindings — not the C++ bindings! There were several valid reasons for this, but the gist of them was that the MPI C++ bindings didn’t add any value; why add another layer of translation in the middle?
Fast forward to MPI-2.2 (circa 2009).
I introduced a proposal to deprecate the C++ bindings because the goal of making them useful to C++ developers pretty much didn’t happen. Plus, we kept finding subtle bugs and other issues in various individual MPI function C++ bindings. My rationale was: why continue to maintain them? They’re buggy, we don’t have a huge amount of C++ expertise on the Forum anymore (I haven’t used C++ deeply since the 90’s), and barely anyone is using them.
After some controversy, the deprecation proposal passed. As of MPI-2.2, the MPI C++ bindings are officially deprecated. Not deleted, mind you, just deprecated. Meaning: no further work will be done on the C++ bindings, and they might be removed someday.
Fast forward to MPI-3 (circa 2011).
There’s a(n at-least-somewhat-valid) rising concern in the Forum that it’s “weird” that new MPI-3 functions have C and Fortran bindings, but no C++ bindings. Hence, if you’re using the C++ bindings to write an MPI application, you have to check to see whether there’s actually a binding for the function that you want to use.
This has led to the 3 groups of Forum members that I listed above.
On the one hand, there are a non-zero number of MPI codes out there using the C++ bindings. The authors of these codes are actually quite vocal, and at least partially represent some of the biggest spenders in the HPC sector.
On the other hand, that non-zero number is very, very small compared to the total number of MPI codes out there. The amount of Forum and implementor work to create and maintain these bindings is non-trivial.
So what’s the Right Thing to do here? Got an opinion?