From mboxrd@z Thu Jan 1 00:00:00 1970 From: clemc at ccc.com (Clem Cole) Date: Tue, 3 Dec 2019 08:44:38 -0500 Subject: [COFF] Happy birthday, John Backus! In-Reply-To: References: Message-ID: 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: