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.