(j3.2006) Conceptual Gap with BLOCK Construct, Scope, and Host Association?
Bill Long
longb
Sun Aug 29 18:52:10 EDT 2010
The relevant F2008 document is N1826 (10-007), which contains the
results of substantial work to clarity (or at least make more precise)
the scoping rules for BLOCK constructs. You should discard N1814.
In terms of conceptualization, I think of a BLOCK construct as similar
to an in-line, nameless internal procedure that has no arguments. After
all those deductions, you end up with a section of code that accesses
its surroundings by host association and has the capability of declaring
variables that have scope local to the block.
Cheers,
Bill
Craig Dedo wrote:
> Everyone:
>
> The discussion today about ?IEEE and the GPU World?,
> especially the comments by John Reid and Bill Long, suggest that there
> appears to be a substantial conceptual gap about BLOCK constructs and
> scope in the Fortran 2008 FDIS.
>
>
>
> Up until Fortran 2008, blocks were not separate scoping
> units. Thus, the contents of blocks followed the same scoping rules as
> the rest of the procedure that they were a part of.
>
>
>
> This changed in Fortran 2008 with the creation of the BLOCK
> construct. Section 1.3.124 of WG5/N1814 defines ?scoping unit? as a
> ?BLOCK construct, ..., excluding all scoping units within it.? This
> means that any entities defined within a BLOCK construct only are
> defined within that particular BLOCK construct.
>
>
>
> However, it is unspecified what other entities are visible
> within a BLOCK construct. From the general discussion, it appears that
> the original intent of the committee was that executable statements
> within a BLOCK construct would have access to all definitions within all
> enclosing scopes, up to the procedure level. This would also include
> access to all definitions available to the procedure via use association
> or host association.
>
>
>
> If this is the intent, then the creation of the BLOCK
> construct and its status as a separate scoping unit defines a new form
> of host association. However, that is not specified in section
> 16.5.1.4p1, ?Host association?. Thus, the conceptual gap of a new form
> of host association without it being explicitly defined.
>
>
>
> It appears that this is an oversight. If so, then ?BLOCK
> construct? needs to be added to the list of thingos that have access to
> host definitions by host association.
>
>
>
> It appears that defining BLOCK constructs as participating
> in host association is the cleanest and most straightforward method of
> resolving some of the complications that have been mentioned in the
> ?IEEE and the GPU World? discussion.
>
>
>
> If the committee adopts this approach, then it would be
> necessary to add some extra syntax in order to turn off definitions that
> are not desired within the scope of a BLOCK construct. Particularly, if
> any of the definitions in any of the IEEE_* intrinsic modules are within
> the scope of the enclosing procedure, then the same set of definitions
> are, by rule, available in any BLOCK constructs within that procedure.
> If programmers want to create a BLOCK construct for execution on a GPU,
> then they will want to turn off these IEEE_* definitions and they need
> some way of doing so explicitly without resorting to obtuse hacks.
> FWIW, I strongly agree with Bill Long that explicit syntax to turn off
> definitions within BLOCK constructs is far preferable to the nearly
> inscrutable method of re-defining IEEE_ARITHMETIC, etc.
>
>
>
> What do others think about this?
>
>
>
> What are the advantages and disadvantages of explicitly
> defining BLOCK constructs as participating in host association?
>
>
>
> If new syntax is desirable in order to give the programmer
> the ability to turn off definitions within a particular scope, how
> should this be done? Would a Type 2 TR be the best solution? Or, would
> some other method be preferable? If so, what method, considering the
> publication schedule of Fortran 2008?
>
>
>
> FWIW, I am willing to write up the necessary interpretation
> request if it appears that this is a desirable solution to this issue.
>
>
>
> Sincerely,
>
> *Craig T. Dedo*
>
> 17130 W. Burleigh Place
>
> P. O. Box 423 Mobile Phone: (414) 412-5869
>
> Brookfield, WI 53008-0423 E-mail: <craig at ctdedo.com
> <mailto:craig at ctdedo.com>>
>
> USA
>
> Linked-In: http://www.linkedin.com/in/craigdedo
>
>
>
--
Bill Long longb at cray.com
Fortran Technical Support & voice: 651-605-9024
Bioinformatics Software Development fax: 651-605-9142
Cray Inc./Cray Plaza, Suite 210/380 Jackson St./St. Paul, MN 55101
More information about the J3
mailing list