From mboxrd@z Thu Jan 1 00:00:00 1970 From: clemc at ccc.com (Clem Cole) Date: Wed, 4 Dec 2019 09:54:08 -0500 Subject: [COFF] Happy birthday, John Backus! In-Reply-To: References: Message-ID: Intel ifort which as one of my friends like to say "has the DEC Fortran compiler DNA ground up and reinserted" ;-) On Wed, Dec 4, 2019 at 12:41 AM Wesley Parish wrote: > 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 wrote: > > On Tue, Dec 3, 2019 at 2:56 AM Dave Horsfall 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 > > , 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 > > ) 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) and > > it actually > > offers support for ‘modern’ ideas such as object-oriented programming: > > Object-oriented > > programming in Fortran Wiki > > > > . > > > > FWIW: I tried to explain some of these ideas pictorially in my Quora > > answer: Clem Cole's answer to Is Fortran obsolete? > > 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 > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: