[COFF] Happy birthday, John Backus!

Clem Cole clemc at ccc.com
Tue Dec 3 23:44:38 AEST 2019


On Tue, Dec 3, 2019 at 2:56 AM Dave Horsfall <dave at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://minnie.tuhs.org/pipermail/coff/attachments/20191203/a6743ea2/attachment.html>


More information about the COFF mailing list