On Sun, Dec 2, 2018 at 5:18 PM Dave Horsfall wrote: > Yeah, it was a nice language at the time; the engineers loved it, Dave at this risk of piling-on, I feel like to I need to comment because while I personally to not use it, my customers do. It's still an excellent tool, and the reality is that Fortran has pretty much paid my salary for almost every computer firm I have worked since I left grad school. That's 5 start-ups and too many large firms to count. Fortran2018 (which was release just last week BTW) is hardly the language I learned in the early 1970s (Fortran-IV) or my father a dozen or so years previous to me. Knocking modern Fortran is sort of like saying, "Any vehicle that is made by Ford sucks because the Model T was not as good as what we can do today." I fear your are making statements about Fortran-2 - maybe 77 or even 90. But the language is niether dead nor useless. Check out an answer I did for quora last summer: Clem Cole's answer to Is the future of Fortran Programming Dead I also point out, if you watch the nightly news on TV, you are using Fortran. Pretty much, all the weather data internationally is crunched on Fortran codes. The same is true for most 'large science.' As for why we will still use it is that *the work (the math) has not changed (If it ain’t broke, don’t fix it). And most importantly, history has shown that it has never been economically interesting to bother (or at least so far).* Please read my Quora answers to see a much more detailed analysis of that statement. > but tthe computer scientists hated it I get it. But ... at least we were taught it. I'm saddened to say my fairly recent CS major daughter was never shown it in her days in college. In a funny twist of fate, her grandfather (my Dad) was taught Fortran in 1958 at a course at her college (Carleton) via an NSF grant. As I have said elsewhere, in the 70's the CMU CS Dept, was arguing with the Engineering school. In those days, the CS Dept said, "Fortran was dead." But like the Phoenix, it is seems to get be getting more beautiful and stronger with each reincarnation. > (have you ever tried to debug a FORTRAN program that somebody else wrote?). Hrrumft. You can write bad code is *any* language. See the annual obscure C prize. FWIW: This little gem is legal Fortran-IV. The last time I compiled it on my Mac, a Fortran2013 draft comforming compiler, Intel Fortran's ifort, will accept thios deck also with no special switches BTW. That said, the last time I checked it on my Mac, ifort generated incorrect code (it was reported as a bug, I'm not sure of the status of the fix and I have not updated the compiler since last summer): 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 The output should be something like this: 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 I admit, I'm glad I'm not a compiler writer. But they do have an amazing product that is very useful to a lot of people and still quite popular. BTW: Here is the same program, in a bit more readable form: PROGRAM BLOCK INTEGER I1,I2,I3,I4,I5 DIMENSION I1(13),I2(13) I4=1 I5=2 I3=13 CALL PASCAL(I1,I2,I3,I4,I5) END SUBROUTINE PASCAL(IP1,IP2,IP3,IP4,IP5) INTEGER IP3,IP1(IP3),IP2(IP3),IP4,IP5 INTEGER IP6,IP7 DO IP6=IP4,IP3 DO IP7=IP5,IP6-IP4 IP1(IP7)=IP2(IP7)+IP2(IP7-IP4) ENDDO IP1(IP4)=IP4 IP1(IP6)=IP4 DO IP7=IP4,IP3-IP6 WRITE(*,'(" "$)') ENDDO DO IP7=IP4,IP6 WRITE(*,'(I4$)') IP1(IP7) ENDDO WRITE(*,*) DO IP7=IP4,IP3 IP2(IP7)=IP1(IP7) ENDDO ENDDO END ᐧ