CVS difference for ai12s/ai12-0058-1.txt

Differences between 1.5 and version 1.6
Log of other versions for file ai12s/ai12-0058-1.txt

--- ai12s/ai12-0058-1.txt	2013/06/11 01:04:36	1.5
+++ ai12s/ai12-0058-1.txt	2015/10/08 23:21:52	1.6
@@ -598,3 +598,201 @@
 friendly local Fortran expert tells me that you're quite correct!
 
 ****************************************************************
+
+From: Tucker Taft
+Sent: Friday, September 18, 2015  10:04 PM
+
+Here is a proposal from Van Snyder about how to update the Fortran annex.
+I haven't evaluated it myself yet.
+
+==========================================================
+
+Proposed changes to Subclause B.5
+
+Replace paragraph 18:
+
+"Fortran intrinsic types are characterized by a parameter called a kind
+type parameter.  If a kind type parameter is not specified, a
+processor-dependent default is assumed.  The types Fortran_Integer,
+Real, Double_Precision, Logical, Complex, and Fortran_Character are
+compatible with the Fortran intrinsic types and kinds default integer,
+default real, double precision, default logical, default complex, and
+default character, respectively."
+
+There appears not to be a Double_Precision_Complex_Types package in Ada
+2012.  If there will be one in the next revision, add
+
+     type Double_Complex is new Double_Precision_Complex_Types.Complex
+
+after paragraph 9, and add that and "double precision complex" to the
+above paragraph.  I don't think it's necessary to have double precision
+versions of "Imaginary", "i", and "j".
+
+Fortran 2008 requires processors to support ASCII and ISO 10646
+character kinds, in addition to whatever their default is.  I don't know
+how to connect this to Ada.
+
+There is no mention of the Fortran ALLOCATABLE or POINTER attributes.
+Unlike C pointers, Fortran pointers are strongly type constrained,
+unless they are unlimited polymorphic pointers.  Also unlike C pointers,
+Fortran pointers are "fat" in that if they are array pointers they
+contain bounds information.  The target of an array pointer might be a
+non-contiguous section of an array.  For example, consider an array A
+with dimensions (10,10), and a two-dimensional pointer P.  A pointer
+assignment statement of the form "P => A(3:7,4:6)" would associate the
+noncontiguous section of A consisting of rows 3-7 and columns 4-6 with
+the pointer P, which thereby has runtime bounds of (1:5,1:3).  Should
+the Ada standard contemplate interoperating with Fortran pointers? 
+Fortran also defines a type C_PTR this is simply a C pointer.  Should
+the Ada standard contemplate interoperating with Fortran objects of type
+C_PTR?  If so, this should be mentioned in a paragraph after paragraph
+19.  I don't know what to recommend.  For that purpose, however, it's
+probably sufficient for users to interface their Fortran procedure to Ada
+using Fortran's C interoperability features.
+
+Fortran allocatable objects are much more strongly constrained than
+pointers.  They can be allocated and deallocated, but they are always
+contiguous and are automatically deallocated when they go out of dynamic
+scope.  As with Fortran pointers, descriptors of allocatable objects
+that are arrays contain bounds and stride information.  I don't know
+whether Ada has a type whose objects could be actual parameters that
+correspond to Fortran dummy arguments with the ALLOCATABLE attribute,
+unless the Ada processor is willing to conspire with a companion Fortran
+processor to use the same storage allocator.  If the Ada standard should
+contemplate this interoperability, it should be mentioned in a paragraph
+after paragraph 19.  I don't know what to recommend.
+
+An alternative to addressing these interoperability problems is to
+mention Fortran's support for C interoperability, and to recommend that
+an Ada program pretend that it is interoperating with C procedures when
+it is in fact it is interoperating with Fortran procedures that are C
+interoperable.  Something like
+
+"It is possible for objects of other Ada types to be passed between Ada
+and Fortran programs.  In a reference from an Ada program to a Fortran
+subprogram, the Ada actual parameters shall be compatible with C (B.3),
+the Fortran subprogram shall be described to the Ada program as if it
+were a C function, and the Fortran subprogram shall be declared within
+the Fortran program to have the BIND(C) attribute.  In a reference from
+a Fortran program to an Ada subprogram, the Ada subprogram and its
+formal parameters shall be compatible with C (B.3) and the Ada
+subprogram shall be described to the Fortran program as if it were a C
+function.  Refer to Clause 15 of the Fortran International Standard
+(ISO/IEC 1539-1)."
+
+A Fortran allocatable object could be an actual argument that
+corresponds to an Ada formal parameter, provided the Fortran description
+of the Ada subprogram's interface does not specify the parameter to be
+allocatable, and the Ada subprogram's formal parameter is not of a
+dynamically allocatable type.  This probably doesn't need to be
+mentioned.  It ought to just work.
+
+Fortran has polymorphic objects, but does not contemplate that these
+interoperate with C.  Fortran's object-oriented system is based upon
+Simula's.  The Fortran standard does not contemplate that polymorphic
+objects can interoperate with C++ polymorphic objects.  It probably
+doesn't make sense for the Ada standard to contemplate that objects of
+tagged record types could interoperate with Fortran polymorphic
+objects.  This should be mentioned in a paragraph after paragraph 19. 
+Something like
+
+"There is no provision to interface objects of tagged record types with
+Fortran polymorphic objects."
+
+Components in Fortran derived types can have the POINTER or ALLOCATABLE
+attribute.  If the Ada standard does not contemplate interoperating with
+objects with these attributes, it should be mentioned in a paragraph
+after paragraph 19 that there are no Ada record types whose objects can
+interoperate with Fortran derived-type objects that have components with
+these attributes.  Something like
+
+"There are no Ada record types whose objects can interface with Fortran
+derived-type objects that have components with the ALLOCATABLE or
+POINTER attributes."
+
+Fortran dummy arguments can be of assumed shape, which means that the
+actual argument corresponding to an assumed-shape dummy argument is a
+descriptor that provides bound and stride information.  The Fortran
+standard now contemplates that assumed-shape dummy arguments can
+interoperate with C parameters, in either direction.  C macros to
+produce descriptors are described in Clause 15 of the Fortran standard. 
+I don't know what to recommend here.  If it is non contemplated that the
+Ada standard should support this interoperability, it might be mentioned
+that an Ada actual parameter cannot correspond to an assumed-shape
+Fortran dummy argument, and in a reference from a Fortran program to an
+Ada subprogram, the Ada formal parameter shall not be described as a
+Fortran assumed-shape array.  If the Ada formal parameter is described
+as an explicit-shape or assumed-size array, it might result in
+copy-in/copy-out argument passing if the Fortran actual argument is not
+contiguous.  Some Fortran compilers always use copy-in/copy-out without
+bothering to do a runtime check whether the actual argument is
+contiguous.
+
+Fortran dummy arguments can have the OPTIONAL attribute.  I don't know
+whether Ada has an equivalent concept.
+
+Within paragraph 21, in the second line, insert "nonstandard" between
+"defines" and "types".  At the end of paragraph 21, insert a sentence
+"The Fortran standard does not specify the values of kind type
+parameters.  In particular, the value of a kind type parameter does not
+necessarily specify the number of bytes occupied by objects of that
+kind.  Therefore if a Fortran interface package contains declarations of
+types with integer values for <n>, whether those values correspond to
+Fortran kind type parameters with the same values depends upon the
+Fortran processor."
+
+(The notation <n> means "n" in italic font.)
+
+I don't know what to do about paragraph 25.  Fortran provides two
+attributes for derived types that affect the layout of components of
+objects of types with those attributes.  The SEQUENCE attribute requires
+components to be laid out in the order they appear in the type
+definition, with no padding between them.  See subclause 4.5.2.3 of the
+Fortran 2008 standard.  Without the SEQUENCE attribute, the memory
+layout of components is processor dependent.  The BIND(C) attribute
+requires all the components to be C interoperable, and that they be laid
+out as a companion C processor would lay them out.  The Fortran standard
+does not specify what this means.  The definition of a "companion"
+processor is processor dependent.  Should an Ada actual parameter that
+is a data object of a Fortran compatible record type correspond to a
+Fortran dummy argument that has the SEQUENCE or BIND(C) attribute, or is
+the Ada processor expected to know its companion Fortran processor's
+derived-type component layout rules?  I don't know what to recommend.
+
+In paragraph 26, replace "Fortran procedure" with "Fortran procedure's
+dummy procedure".
+
+Fortran has procedure pointers, which can be dummy procedures or
+components of objects of derived type.  I don't know whether an
+access-to-subprogram object can have a convention denotation, and if so
+whether that ought to be mentioned in connection with associating an
+access-to-subprogram object with a Fortran procedure pointer.  The
+Fortran standard does not contemplate that Fortran procedure pointers
+should interoperate with C function pointers.  Rather, Fortran provides
+a C_FUNPTR type, and procedures to copy between that and Fortran
+procedure pointers.  If the Ada standard does not contemplate a Fortran
+convention for access-to-subprogram objects, this might also be swept
+under the C interface rug.  Otherwise, at the end of paragraph 26, add a
+sentence "An Ada parameter of access-to-subprogram type and Fortran
+convention may correspond to a Fortran argument that is a procedure
+pointer."  I assume Ada records can have access-to-subprogram
+components, in which case also change the edit recommended above
+concerning Fortran derived-type objects with ALLOCATABLE or POINTER
+components by inserting "data" before "components".
+
+Fortran types can have type-bound procedures.  I see no prospect for
+objects of these types interoperating with Ada.  Fortran types can have
+finalization subroutines.  I see no prospect for objects of these types
+interoperating with Ada.  I don't know whether this deserves mention.
+
+****************************************************************
+
+From: Randy Brukardt
+Sent: Thursday, October 1, 2015  10:06 PM
+
+You do remember that you volunteered to help him turn this into RM wording,
+right??? And that it's part of your homework for the upcoming meeting??? We
+need this to progress to something we can finish someday, not just endless
+proposals without RM-level details.
+
+****************************************************************

Questions? Ask the ACAA Technical Agent