Description
Problem
MPI_Status
is the only non-opaque handle and users are expected to access and update the three public fields directly.
This is not good for users of languages that are not C/C++ or Fortran. Currently, users are working around this by writing their own get/set functions (e.g. mpi4py's pympistatus.h) or linking libclang
to parse header files and generate these functions (e.g. rsmpi
).
Proposal
Add MPI_Status_{get,set}_{source,tag,error}
functions that allow non-first-party languages to support the field access.
I don't know if the set
routines make sense, but we have them for elements
and cancelled
, which are the "hidden" status fields.
Changes to the Text
Add the following in LIS way and define them in the obvious way.
int MPI_Status_get_source(MPI_Status * status, int * source);
int MPI_Status_set_source(MPI_Status * status, int source);
int MPI_Status_get_tag(MPI_Status * status, int * tag);
int MPI_Status_set_tag(MPI_Status * status, int tag);
int MPI_Status_get_error(MPI_Status * status, int * error);
int MPI_Status_set_error(MPI_Status * status, int error);
Impact on Implementations
These are trivial to implement.
Impact on Users
Users of C/C++ and Fortran are not required to use these.
Implementers of MPI support for Python, Julia, Rust, etc. will find it easier to use MPI.