Hi all,
I just want to chime in on the performance point. Some implementations use trampolines to achieve calling Fortran internal subprograms that use variables of the host subprogram via host association. This extra “indirection” does have performance impact, but it is probably less than the consequences of poor optimizations resulting from the call via a procedure pointer itself (comparing to a direct call that might be inlined, enabling more optimizations like vectorization of the loop containing the call). So I think it is not the best approach to use procedure pointers in performance critical spots.