[J3] Consideration of Paper 18-242 at Meeting 218 (Was: 18-242)
Bill Long
longb at cray.com
Mon Dec 3 13:45:25 EST 2018
> On Dec 1, 2018, at 2:29 PM, Van Snyder via J3 <j3 at mailman.j3-fortran.org> wrote:
>
>
> A loop-control declared in the statement would be a construct entity.
> That's the point! It's not an accidental defect.
But the do-variable in an ordinary DO look is NOT a construct entity. The DO semantics depend on this. I was not part of the JoR discussion, but it seems you are really proposing a whole new, separate form of DO. For example:
integer(4) :: i
do integer(8) :: i = n,m
if (a(i) < 0) exit
end do
call histo(i) ! Corresponding dummy variable to i is integer(4)
If the integer(8) :: is removed, then this is an ordinary loop. If the 3rd iteration exits, the argument to histo has the value n+2 (assuming m > n+2), and has kind 4, which is what histo is expecting. With the integer(8)::, if I understand your email description, the value if i is undefined at the call to histo. If you really want this behavior, then write
block
integer(8) :: i
do i = n,m
if (a(i) < 0) exit
end do
end block
At the end block, it is at least obvious to the programmer that the i declared in the block cannot be used. At least this version does not violate the principle of least surprise.
I think I have to agree with the JoR decision. The benefit vs confusion balance favors not adding this feature.
Cheers,
Bill
Bill Long longb at cray.com
Principal Engineer, Fortran Technical Support & voice: 651-605-9024
Bioinformatics Software Development fax: 651-605-9143
Cray Inc./ 2131 Lindau Lane/ Suite 1000/ Bloomington, MN 55425
More information about the J3
mailing list