On Aug 2 2019, Joseph Schuchart via mpi-forum wrote:

> In any case, we can't design MPI around ignorant users who don't read about features they're using.

I'm not advocating to change the design, i.e., I'm not arguing against having C11 _Generic selectors. I just think it would be beneficial to clearly mark the potential caveat.

Yes, precisely.  It would also be possible to design in defences against
this gotcha.

In my view, the most likely cause of this is the C++ one described
below, because I believe that the majority of users who call MPI from a
C-like language now do it from C++.

Regards,
Nick Maclaren.



But, back to Jeff Hammond's and your postings.  You have described the
language situation correctly, though it's actually worse than that.
Let's start with correcting some misapprehensions (not yours).

As I said, this is NOT about the compilers.

This is NOT about MY code - inter alia, I would add code to test the
version before depending on this, and I have been writing code that will
run under multiple C languages (and more) since the early 1990s, as well
as advising other people how to do it.

The days when most MPI users programmed MPI calls in C are long, long
gone.  The vast majority use another mechanism, sometimes C++, sometimes
via a pre-processor, sometimes a package.

Similarly, the days when most programmers were in control of their
environment are long gone - yes, it's true for the happy hackers who
dominate many forums, but is not for the users.

Lastly, this is NOT about users being ignorant.  It's about them taking
only ordinary care and having only an ordinary skillset which, in this
case, is NOT enough.


Examples of when users could be dropped into C99 mode without realising
it include:

The MPI-calling library (or even MPI) they are using was compiled that
way.

The ghoulishly inscrutable build mechanism for the package they are
using does it.

They are using MPI via a C++ compiler and the C interface, which I
believe now dominates the use of a C compiler.  From the C++17 standard:
"Whether __STDC__ is predefined and if so, what its value is, are
implementation-defined."  It says the same about __STD_VERSION__.  The
translation of that is that a C++ compiler may implement ANY version of
C, subject to a few other constraints.  And they do.


Also, they may be using some OTHER library that requires a specific,
older version of C, or their 'house standards' require it, but one hopes
that they realise they are not using C11, if so.  However, even if they
do, it is unreasonable to expect users to have the deep knowledge of the
standards and advanced skills to defend themselves against version
problems.

Now, why do sites not upgrade?  There are many reasons, including that a
compiler or library upgrade may require a complete revalidation of their
development system - which is often many months's work for their entire
development team.  Or the non-availability of new versions of (often
just one) critical component.  Or expense.  Or just plain "If it ain't
broke, don't fix it."  All are common, and there are many more.
_______________________________________________
mpi-forum mailing list
mpi-forum@lists.mpi-forum.org
https://lists.mpi-forum.org/mailman/listinfo/mpi-forum

Reply via email to