That would probably be a better solution than what I mentioned above. Essentially it does the thing that we often said was possible, though we never did, which was to not actually initialize MPI_COMM_WORLD until we used it. In theory, that seemed like a good idea, but it wouldn't actually help anything because it would still require MPI_COMM_WORLD to be created sooner or later because everything gets created from it.

On Oct 31, 2017, at 10:57 AM, Dinan, James <james.dinan@intel.com> wrote:

IIUC, this would break code that uses MPI_COMM_WORLD as a static initializer, e.g., to initialize a global variable like "MPI_Comm mycomm = MPI_COMM_WORLD".

Why can't the handles themselves be compile-time constants corresponding to objects that are not created until the library is initialized (how it works now)?  Note that such handles are defined to be compile-time constants.  I don't know that they necessarily correspond to symbols that you can take an address of.