I've just run that little program through gfortran without switches
(naming it pyramid.for) and it comes up with:
pyramid.for:25:6:
;ENDDO;IMPLICIT(IF)=IF;IMPLICIT(EXTERNAL)=IF;DOFORRETURN=IF,GOTO-EX
1
Error: Bad continuation line at (1)
pyramid.for:12:9:
R;DOFORIF=INTEGER,INTEGER;ENDDO;INTEGER=IF+IF;GOTO=INTEGER*INTEGER*
1
Warning: Deleted feature: Loop variable at (1) must be integer
pyramid.for:23:56:
IF,INTEGER,EXTERNAL,RETURN;DOFOREXTERNAL=IF,GOTO;DOFORRETURN=INTEGE
1
Warning: Deleted feature: Loop variable at (1) must be integer
pyramid.for:25:52:
;ENDDO;IMPLICIT(IF)=IF;IMPLICIT(EXTERNAL)=IF;DOFORRETURN=IF,GOTO-EX
1
Warning: Deleted feature: Loop variable at (1) must be integer
pyramid.for:26:43:
XTERNAL;WRITE(IF,'(''$
'')');ENDDO;DOFORRETURN=IF,EXTERNAL;WRITE(I
1
Warning: Deleted feature: Loop variable at (1) must be integer
pyramid.for:27:62:
IF,'(''$''I4)')IMPLICIT(RETURN);ENDDO;WRITE(IF,'(
/)');DOFORRETURN=
1
Warning: Deleted feature: Loop variable at (1) must be integer
pyramid.for:23:34:
IF,INTEGER,EXTERNAL,RETURN;DOFOREXTERNAL=IF,GOTO;DOFORRETURN=INTEGE
1
Warning: Deleted feature: Loop variable at (1) must be integer
pyramid.for:15:17:
LSUBROUTINE(IMPLICIT,LOGICAL,GOTO,IF,INTEGER)
1
Warning: Rank mismatch in argument ‘implicit’ at (1) (rank-1 and
scalar) [-Wargument-mismatch]
I think gfortran must have '--strict' on by default. I might try it
with the OpenWatcom Fortran compiler next - if it'll install on my
current Linux box.
Just out of interest, what is your current Fortran 2018 compiler?
Wesley Parish
On 12/4/19, Clem Cole <clemc(a)ccc.com> wrote:
On Tue, Dec 3, 2019 at 2:56 AM Dave Horsfall
<dave(a)horsfall.org> wrote:
As every computer programmer should know, John
Backus was emitted in
1924;
he
gave us the BNF syntax, but the sod also gave us that FORTRAN
obscenity...
Be careful, Fortran still pays a lot of bills (I like to say that it has
paid my salary for nearly 45 years and I don't program in it - I'm an OS
guy). But Fortran >>is<< the #1 language for anything scientific and I
don't think that is going away in the future or really change its position
in popularity for a number of reasons (my analog is the QWERTY keyboard -
that ship has sailed and it's not economically interesting). There are a
number of places to check this out, but try looking at Archer AC Code
Status
<http://www.archer.ac.uk/status/codes/>, which is an interesting HPC usage
site in the UK. Note that Fortran is by far the leading programming
language used for ‘production’ (there are other sites that offer similar
data, I'll leave it to the reader to find them).
Trivia: there is no way that FORTRAN can be described in any syntax; it is
completely ad-hoc.
Again, be careful with such observations. First off, I'm fairly sure that
the Intel Compiler teams (ifort
<https://software.intel.com/en-us/fortran-compilers>) use a parser
generator for parts of the ifort front-end. (Paul W might know more details
as he once worked in that technology). As I understand it, the front-end
does have a number of special cases in it, so your observation is partially
true, but the language definition is not 'completely ad-hoc'.
The facts are that the language my father learned in the early 1960s
(FORTRAN-II) and the language I learned in the late 60's/early 1970s
(FORTRAN-IV) are not the same language as today's Fortran-2018, i.e. the
language definition has hardly been static. Said in another way, about a
year ago, a new standard for Fortran 2018 standard was released – see
Fortran
2018 (Formerly Fortran 2015) <https://wg5-fortran.org/f2018.html> and
it actually
offers support for ‘modern’ ideas such as object-oriented programming:
Object-oriented
programming in Fortran Wiki
<http://fortranwiki.org/fortran/show/Object-oriented+programming>
.
FWIW: I tried to explain some of these ideas pictorially in my Quora
answer: Clem Cole's answer to Is Fortran obsolete?
<https://www.quora.com/Is-Fortran-obsolete/answer/Clem-Cole> This is not to
denigrate other languages like Julia, Tensorflow etc. But the fact is that
the hammer has been improved and the *ways the nails are delivered has
changed*, but the *fundamental action provided* (fastening for nails and
scientific computation in the case of Fortran) has been unchanged because
it has proven to be the one of the best, if not the best to do the job it
is designed to do.
That said, I offer the following code snippet, which my Intel 2018
compatible compiler accepts without any switches. Which is really a
remarkable comment about the women and men in the front-end team:
C This FORTRAN program may be compiled and run on a Norsk Data
C computer running SINTRAN and the FTN compiler. It uses only
C FORTRAN reserved words, and contains just one numerical
C constant, in a character string (a format specifier). When
C you run it, it prints a well known mathematical construct...
C
C Even FORTRAN is a block structured programming language:
C
PROGRAM
;PROGRAM;INTEGERIF,INTEGER,GOTO,IMPLICIT;REALREAL,DIMENSION,EXTERNA
AL,FORMAT,END;INTEGERLOGICAL;REALCOMPLEX,DATA,CALL,ASSIGN,CHARACTER
R;DOFORIF=INTEGER,INTEGER;ENDDO;INTEGER=IF+IF;GOTO=INTEGER*INTEGER*
*INTEGER*INTEGER-INTEGER-IF;CALLFUNCTION(IMPLICIT,REAL,DIMENSION,EX
XTERNAL,FORMAT,END,LOGICAL,COMPLEX,DATA,CALL,ASSIGN,CHARACTER);CALL
LSUBROUTINE(IMPLICIT,LOGICAL,GOTO,IF,INTEGER)
END
SUBROUTINEFUNCTIO
ON(IMPLICIT,REAL,DIMENSION,EXTERNAL,FORMAT,END,LOGICAL,COMPLEX,DATA
A,CALL,ASSIGN,CHARACTER);RETURN
END
SUBROUTINESUBROUTINE(IMPLICIT,L
LOGICAL,GOTO,IF,INTEGER);INTEGERGOTO,IMPLICIT(GOTO),LOGICAL(GOTO),I
IF,INTEGER,EXTERNAL,RETURN;DOFOREXTERNAL=IF,GOTO;DOFORRETURN=INTEGE
ER,EXTERNAL-IF;IMPLICIT(RETURN)=LOGICAL(RETURN)+LOGICAL(RETURN-IF);
;ENDDO;IMPLICIT(IF)=IF;IMPLICIT(EXTERNAL)=IF;DOFORRETURN=IF,GOTO-EX
XTERNAL;WRITE(IF,'(''$
'')');ENDDO;DOFORRETURN=IF,EXTERNAL;WRITE(I
IF,'(''$''I4)')IMPLICIT(RETURN);ENDDO;WRITE(IF,'(
/)');DOFORRETURN=
=IF,GOTO;LOGICAL(RETURN)=IMPLICIT(RETURN);ENDDO;ENDDO
END
Running the program should yield:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1