[COFF] Happy birthday, John Backus!

Wesley Parish wobblygong at gmail.com
Wed Dec 4 15:41:36 AEST 2019


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 at ccc.com> wrote:
> 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
>


More information about the COFF mailing list