My historical understanding of FORTRAN is that COMMON initially had global scope. I have never understood why The Fortran Committee wanted to change that. It was a fundamental concept in early FORTRAN. There was a short time when overlay linkers changed that, but that was a specific change.
The change to BLOCKDATA is an interesting one, as it did have a specified use, but is now being removed.
“integer :: i = 1” was introduced with F90; I thought to simplify the duplicity of DATA statements.
This is different to “integer, parameter :: i = 1”, as for a parameter, the value can not be changed.
If you remove the implied save from “integer :: i = 1”, the statement no longer has any meaning.
In it’s current form, I don’t see where the problem is. I don’t see it as error prone, although I have been using Fortran for a long time.
There are other Fortran code constructs that are more error prone, such as the duplicity of INTERFACE and also the move to voluminous declaration constructs where it is unclear what the compiler should do with them, eg should the compiler enforce INTENT(out) by deleting the input contents or is it a comment to say it can provide a changed result, especially if the change depends on other IF conditions.
The trend to voluminous complexity of Fortran declarations should be resisted.