[J3] type definitions
Robert Corbett
rpcorbett at att.net
Mon Aug 15 06:45:52 UTC 2022
The first sentence of paragraph 3 of subclause 8.7 states
In each scoping unit, there is a mapping, which may be null, between each of the letters A, B, ..., Z and a type (and type parameters). Are you saying that that sentence is in error for scoping units that are derived type definitions?
Robert Corbett
> On Aug 14, 2022, at 11:34 PM, Robert Corbett <rpcorbett at att.net> wrote:
>
> I take it you think my two examples are not standard conforming.
>
> The first sentence of paragraph 3 of subclause 8.7 states
>
> In each scoping unit, there is a mapping, which may be null,
>
>>> On Aug 14, 2022, at 7:12 PM, Malcolm Cohen via J3 <j3 at mailman.j3-fortran.org> wrote:
>>>
>>
>> Hi Robert,
>>
>> There is no default mapping for derived type definitions.
>> There has never been a default mapping specified in the standard for derived type definitions.
>>
>> That is because there is no entity in the scope of a derived type definition that is implicitly typed in that definition.
>>
>> A named variable (which is what we are talking about) that appears in a derived type definition, must be being accessed there by host association: that is, its “inclusive scope” must be the host of the derived type definition. If the scope rules do not say that clearly enough (and I must admit that a quick look didn’t turn up anything helpful), then they need to be fixed.
>>
>> If the variable name appears in the host scoping unit before the derived type definition, this is already clear. So what we have here is one of two things:
>> the variable appears first in the derived type definition, or
>> the variable appears only in (one or more) derived type definitions.
>>
>> Assuming that these are valid situations, they are both completely useless functionality, as such a variable is only being used in an intrinsic inquiry function reference.
>>
>> (And when I look at old standards, it is not even clear that these situations are valid. But there is no explicit requirement for a variable being accessed by host association from a derived type definition to be declared prior to the definition. Perhaps there should be? In which case, those examples would be invalid.)
>>
>> Cheers,
>> --
>> ..............Malcolm Cohen, NAG Oxford/Tokyo.
>>
>> From: J3 <j3-bounces at mailman.j3-fortran.org> On Behalf Of Robert Corbett via J3
>> Sent: Monday, August 15, 2022 8:13 AM
>> To: Malcolm Cohen via J3 <j3 at mailman.j3-fortran.org>
>> Cc: Robert Corbett <rpcorbett at att.net>
>> Subject: Re: [J3] type definitions
>>
>>
>> I do not think that the scope rules
>> specify the default IMPLICIT mapping
>> for derived type definitions.
>> Paragraph 3 of subclause 8.7
>> specifies how to determine the
>> default mapping for program units,
>> interface blocks, BLOCK constructs,
>> internal subprograms, and module
>> subprograms. I think that would
>> be a good place to specify how to
>> determine the default mapping for
>> type definitions.
>>
>> Robert Corbett
>> On Thursday, August 11, 2022 at 05:37:52 PM PDT, Malcolm Cohen via J3 <j3 at mailman.j3-fortran.org> wrote:
>>
>>
>> Hi Robert,
>>
>>
>>
>> Country comments from both the US and UK on draft Fortran 2018 complained that those words were wrong, confusing, and unnecessary. So we deleted them.
>>
>>
>>
>> The scoping rules are not defined by the IMPLICIT statement. All the IMPLICIT statement does is say what the type and type parameters are. That is all it should say.
>>
>>
>>
>> Attempting (and failing btw) to duplicate the scoping rules in the middle of the IMPLICIT statement subclause is not a good idea.
>>
>>
>>
>> <<<
>>
>> In the 2023 draft, rules for determining the
>> default implicit mapping do not cover the
>> case of type definitions.
>>
>> >>>
>>
>>
>>
>> That would be because the scope of X is not the type definition.
>>
>>
>>
>> And it is not the 2023 draft: this was paper 17-232 applied to the Fortran 2018 draft.
>>
>>
>>
>> If the scoping rules are not sufficiently clear, it is the scoping rules that deserve improvement. Under no circumstances should we consider reintroducing scoping rules to the IMPLICIT statement subclause.
>>
>>
>>
>> I can well believe that the scoping rules deserve attention; this is a fundamental, and difficult topic, and we changed how they worked (not just how they were described) in F2008 and again in F2018.
>>
>>
>>
>> But this is not a simple case of the editor forgetting to make an edit.
>>
>>
>>
>> Cheers,
>>
>> --
>>
>> ..............Malcolm Cohen, NAG Oxford/Tokyo.
>>
>>
>>
>> From: J3 <j3-bounces at mailman.j3-fortran.org> On Behalf Of Robert Corbett via J3
>> Sent: Friday, August 12, 2022 5:55 AM
>> To: General J3 interest list <j3 at mailman.j3-fortran.org>
>> Cc: Robert Corbett <rpcorbett at att.net>
>> Subject: Re: [J3] type definitions
>>
>>
>>
>>
>>
>> After applying Corrigendum 1 to the Fortran 2008
>> standard, paragraph 4 of subclause 5.5 reads
>>
>> Any data entity that is not explicitly
>> declared by a type declaration, is not
>> an intrinsic function,is not a component,
>> and is not accessed by use or host
>> association is declared implicitly to be
>> of the type (and type parameters) mapped
>> from the first letter of its name,
>> provided the mapping is not null. The
>> mapping for the first letter of the data
>> entity shall either have been established
>> by a prior IMPLICIT statement or be the
>> default mapping for the letter. The data
>> entity is treated as if it were declared
>> in an explicit type declaration; if the
>> outermost inclusive scope in which it
>> appears is not a type definition, it is
>> declared in that scope, otherwise, it is
>> declared in the host of that scope. An
>> explicit type specification in a
>> FUNCTION statement overrides an IMPLICIT
>> statement for the name of the result
>> variable of that function subprogram.
>>
>> That paragraph corresponds to paragraph 4 of
>> subclause 8.7 of the 2023 draft. In the
>> Fortran 2018 standard and the 2023 draft,
>> the parts of the text dealing with type
>> definitions have been elided. Without that
>> text, my first example would seem not to be
>> standard conforming.
>>
>> In the 2023 draft, rules for determining the
>> default implicit mapping do not cover the
>> case of type definitions. That too would
>> cause my first example to be nonconforming,
>> because it would not have an interpretation.
>>
>> Robert Corbett
>>
>>
>>
>> On Wednesday, August 10, 2022 at 07:52:03 PM PDT, Vipul Parekh via J3 <j3 at mailman.j3-fortran.org> wrote:
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On Wed, Aug 10, 2022 at 6:28 PM Robert Corbett via J3 <j3 at mailman.j3-fortran.org> wrote:
>>
>> Is the program
>>
>>
>>
>> PROGRAM MAIN
>> TYPE T
>> REAL(KIND=KIND(X)) Y
>> END TYPE T
>> END
>>
>> standard conformant?
>>
>> What about the program
>>
>> PROGRAM MAIN
>> DOUBLE PRECISION X
>> TYPE T
>> REAL(KIND=KIND(X)) X
>> END TYPE T
>> END
>>
>>
>>
>> Hi Bob,
>>
>>
>>
>> For whatever it's worth, I think both the programs conform for I am unable to place any text in the standard that would indicate to me these two programs do not conform. Besides, two processors I tried did not detect any nonconformance.
>>
>>
>>
>> Whenever you're ready, you can post the text you think is missing!
>>
>>
>>
>> Regards,
>>
>> Vipul Parekh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.j3-fortran.org/pipermail/j3/attachments/20220814/67e0fb9a/attachment-0001.htm>
More information about the J3
mailing list