(j3.2006) Interesting F2003-ism
Bill Long
longb
Fri Feb 23 10:59:15 EST 2007
Aleksandar Donev wrote:
>Bill Long wrote:
>
>
>>The interop TR is for assumed-shape, allocatable, pointer, and optional
>>dummy arguments. The capability discussed above has nothing to do with
>>any of those attributes.
>>
>>
>In your short-sighted view of Interop, in which you think most
>interoperable routines are written in C and you want C users to call
>fast numerical Fortran routines, maybe it has nothing to do.
>
I use C interop both directions, as was intended. Calling libc routines
directly from Fortran to access OS facilities is quite useful.
>But in the
>real world, in which Fortran scientific programemrs also need to rely on
>using lots of libraries written by their colleagues in C/C++, it is
>essential.
>
The new interop features are for dummy arguments that are assumed-shape,
allocatable, pointer, or optional. At the beginning, only Fortran
callees have arguments like these, so initially in the actual real
world, all the focus will be on C calling Fortran. None of the "lots of
libraries" you mention are set up to deal with this. If the goal is
just to write conversion wrappers to access the C routines, those
wrappers can be written if Fortran just as easily. It would be
encouraging if some C libraries were written directly with the intent of
supporting non-trivial arrays and use the TR's model for arrays, but I
see that as a bit down the road.
>No one in C will write two different procedures, one to
>handle an assumed shape array of rank-1, and another of rank-2, up to
>15.
>
Well, all but one of these procedures would be just a single line, but I
agree that even that would irk most C programmers.
>It is a complete and useless waste of time for everyone and is what
>gives Fortran its bad name...
>
No one in Fortran will want to write 15 interface bodies either. If
you want rank-independent argument matching, then changing the bind(c)
rules is absolutely the wrong solution. Some (most?) vendors already
have a directive-based solution for this. We supply an IGNORE_TKR
directive that can be used to tell the compiler to ignore Type, Kind, or
Rank (or any combination) when doing argument matching for a dummy
argument. Use that in your interface and you need only one body. (Note
to Andy: If you want to do something useful in g95, implement this
directive instead of messing with the bind(c) rules. It looks like you
have access to a Sun compiler; I assume they have a similar directive -
see their docs for details.) In a later version of Fortran it would be
conceptually trivial to convert such a directive to attribute syntax.
Just curious, since I don't that often see C libraries used in
scientific codes, what types of libraries are you talking about that
someone might in the future write to handle these new types of
arguments? Most of the rank-independent arguments I see in C libraries
are typeless buffers in routines used to just move data from one place
to another. Given that Fortran has intrinsic assignment for arrays,
libraries like these seem irrelevant to a Fortran programmer.
Cheers,
Bill
--
Bill Long longb at cray.com
Fortran Technical Support & voice: 651-605-9024
Bioinformatics Software Development fax: 651-605-9142
Cray Inc., 1340 Mendota Heights Rd., Mendota Heights, MN, 55120
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://j3.scs.gmu.edu/pipermail/j3/attachments/20070223/b2b91a1a/attachment-0001.html
More information about the J3
mailing list