Thanks!

I can only talk about strongly-typed compiled languages (like Rust, which is my main interest).

For a zero-cost MPI wrapper I want to map to the same C representation of a given implementation. Rust allows me to do that via its FFI with C. The only thing I need to know are the C types of the API (constants, functions, ...). For each MPI implementation I have different types in its C interface so I need a different FFI C-wrapper for each. This is particularly painful in Rust because it does not integrate the C pre-processor (which is a good thing), so it means that it has to preprocess the sources in the build system or know the types for each version of each implementation and hope that they don't change.

Then I want to write code against one MPI implementation and have it working with any implementation via a recompile. I have to hope that changing the types from one implementation to another doesn't break my program. I don't think this ever happened to me in practice but it feels very fragile.