SlideShare ist ein Scribd-Unternehmen logo
1 von 117
Early History of FORTRAN:
     The Making of a Wonder

               Uday Khedker
          (www.cse.iitb.ac.in/˜uday)

Department of Computer Science and Engineering,
     Indian Institute of Technology, Bombay




                   February 2013
Persistent, Pune            History of FORTRAN: Outline                              1/42

                                   Outline




       • Computing Before FORTRAN

       • The Creation of FORTRAN

       • FORTRAN I: The Language

       • FORTRAN I: The Compiler

       • Conclusions




Feb 2013                                                  Uday Khedker, IIT Bombay
Part 1


Computing Before FORTRAN
Persistent, Pune    History of FORTRAN: Computing Before FORTRAN                    2/42

     Pioneers of Programming Languages (Knuth-Pardo, 1976)


    Zuse (Plankalkul, 1945)      Mauchly et al. (Short Code, 1950)
    Curry (Composition, 1948)    Burks (Intermediate PL, 1950)
    Rutishauser (1951)           Goldstine/von Neumann (Flow Diagrams, 1946)
    Bohm (1951)                  Brooker (Mark I Autocode, 1954)
    Glennie (AUTOCODE, 1952)     Kamynin/Liubimskii (P.P., 19654)
    Laning/Zierler (1953)        Grems/Porter (Bacaic, 1955)
    Hopper et al. (A-2, 1953)    Elsworth et al. (Kompiler 2, 1955)
    Ershov (P.P., 1955)          Katz et al. (MATH-MATIC, 1956-1958)
    Blum (ADES, 1956)            Hopper et al. (FLOW-MATIC, 1956-1958)
    Perlis et al. (IT, 1956)     Bauer/Samelson (1956-1958)




Feb 2013                                                 Uday Khedker, IIT Bombay
Persistent, Pune    History of FORTRAN: Computing Before FORTRAN                    2/42

     Pioneers of Programming Languages (Knuth-Pardo, 1976)


    Zuse (Plankalkul, 1945)      Mauchly et al. (Short Code, 1950)
    Curry (Composition, 1948)    Burks (Intermediate PL, 1950)
    Rutishauser (1951)           Goldstine/von Neumann (Flow Diagrams, 1946)
    Bohm (1951)                  Brooker (Mark I Autocode, 1954)
    Glennie (AUTOCODE, 1952)     Kamynin/Liubimskii (P.P., 19654)
    Laning/Zierler (1953)        Grems/Porter (Bacaic, 1955)
    Hopper et al. (A-2, 1953)    Elsworth et al. (Kompiler 2, 1955)
    Ershov (P.P., 1955)          Katz et al. (MATH-MATIC, 1956-1958)
    Blum (ADES, 1956)            Hopper et al. (FLOW-MATIC, 1956-1958)
    Perlis et al. (IT, 1956)     Bauer/Samelson (1956-1958)




Feb 2013                                                 Uday Khedker, IIT Bombay
Persistent, Pune      History of FORTRAN: Computing Before FORTRAN                    2/42

     Pioneers of Programming Languages (Knuth-Pardo, 1976)


    Zuse (Plankalkul, 1945)        Mauchly et al. (Short Code, 1950)
    Curry (Composition, 1948)      Burks (Intermediate PL, 1950)
    Rutishauser (1951)             Goldstine/von Neumann (Flow Diagrams, 1946)
    Bohm (1951)                    Brooker (Mark I Autocode, 1954)
    Glennie (AUTOCODE, 1952)       Kamynin/Liubimskii (P.P., 19654)
    Laning/Zierler (1953)          Grems/Porter (Bacaic, 1955)
    Hopper et al. (A-2, 1953)      Elsworth et al. (Kompiler 2, 1955)
    Ershov (P.P., 1955)            Katz et al. (MATH-MATIC, 1956-1958)
    Blum (ADES, 1956)              Hopper et al. (FLOW-MATIC, 1956-1958)
    Perlis et al. (IT, 1956)       Bauer/Samelson (1956-1958)


       • Many efforts, and yet a breakthrough had to wait for Backus and his team
       • We need to go back into the history to understand why it was so



Feb 2013                                                   Uday Khedker, IIT Bombay
Persistent, Pune        History of FORTRAN: Computing Before FORTRAN                    3/42

           Computing: Hand to Hand Combat with Machine (1)




       • Computing was a black art
       • Things available:
         The problem, the machine, the manual, and individual creativity
       • “Computers were pretty crazy things. They had very primitive instructions
         and extremely bizarre input-output facilities.”
       • Example: Selective Sequence Electronic Calculator (SSEC), 1948 - 1952
           Store of 150 words, Vacuum tubes and electro-mechanical relays




Feb 2013                                                     Uday Khedker, IIT Bombay
Persistent, Pune          History of FORTRAN: Computing Before FORTRAN                    4/42

           Computing: Hand to Hand Combat with Machine (2)


       • The story of paper tape

            −      Punched paper tape glued to
                   form a paper loop
            −      Problem would appear and then
                   disappear
            −      Pattern repeated many times
            −      Mobius strip

                         (Image source: Wikipedia)



       • Debugging by the ear. When IBM 701 Defence Calculator arrived
         “How are we going to debug this enormous silent monster”



Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune        History of FORTRAN: Computing Before FORTRAN                    5/42

                                   Octal Humour


       • “Why cant programmers tell the difference between Christmas and New
         Years Eve? Because 25 in decimal is 31 in octal.”

       • “We programmed it in octal. Thinking I was still a mathematician, I
         taught myself to add, subtract, and multiply, and even divide in octal. I
         was really good, until the end of the month, and then my check book
         didn’t balance! It stayed out of balance for three months until I got hold
         of my brother who was a banker. After several evenings of work he
         informed me that at intervals I had subtracted in octal. And I faced the
         major problem of living in two different worlds.”
           “That may have been one of the things that sent me to get rid of octal as
           far as possible.”
                                                                       − Grace Hopper



Feb 2013                                                     Uday Khedker, IIT Bombay
Persistent, Pune       History of FORTRAN: Computing Before FORTRAN                    6/42

                        The Priesthood of Computing




       • “Programming in the America of the 1950s had a vital frontier enthusiasm
         virtually untainted by either the scholarship or the stuffiness of academia.”
       • “Programmer inventors of the early 1950s were too impatient to hoard an
         idea until it could be fully developed and a paper written. They wanted to
         convince others. Action, progress, and outdoing one’s rivals were more
         important than mere authorship of a paper.”
       • “An idea was the property of anyone who could use it and the scholarly
         practice of noting references to sources and related work was almost
         universally unknown or unpractised.”




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune        History of FORTRAN: Computing Before FORTRAN                    7/42

              Obstacles in Creation of a High Level Language


       • Priesthood wanted to preserve the order
           “Priesthood wanted and got simple mechanical aids for the clerical
           drudgery which burdened them, but they regarded with hostility and
           derision more ambitious plans to make programming accessible to a larger
           population. To them, it was obviously a foolish and arrogant dream to
           imagine that any mechanical process could possibly perform the
           mysterious feats of invention required to write an efficient program.”




Feb 2013                                                     Uday Khedker, IIT Bombay
Persistent, Pune        History of FORTRAN: Computing Before FORTRAN                    7/42

              Obstacles in Creation of a High Level Language


       • Priesthood wanted to preserve the order
           “Priesthood wanted and got simple mechanical aids for the clerical
           drudgery which burdened them, but they regarded with hostility and
           derision more ambitious plans to make programming accessible to a larger
           population. To them, it was obviously a foolish and arrogant dream to
           imagine that any mechanical process could possibly perform the
           mysterious feats of invention required to write an efficient program.”
       • There also were purveyors of snake oil
           “The energetic public relations efforts of some visionaries spread the word
           that their “automatic programming” systems had almost human abilities
           to understand the language and needs of the user; whereas closer
           inspection of these same systems would often reveal a complex,
           exception-ridden performer of clerical tasks which was both difficult to use
           and inefficient.”



Feb 2013                                                     Uday Khedker, IIT Bombay
Persistent, Pune           History of FORTRAN: Computing Before FORTRAN                    8/42

                                    The A2 Compiler



       • Programmers had a library of subroutine
       • They needed to copy the subroutine on the coding sheets by hand and
         change addresses manually
       • Grace Hopper added a “call” operation whereby
             ◮     the machine would copy the code
             ◮     and update the addresses
       • Inspiration for implementing a forward jump: A game of basketball!
       • The name “compiler” was used because it put together a set of subroutines




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune           History of FORTRAN: Computing Before FORTRAN                    9/42

                          The “Real” High Level Languages




       • Conrad Zuse’s Plankalkul developed in a small village in Germany (1945)
             ◮     “Program Calculus”
             ◮     Only design, no implementation
                   (Computers were destroyed in world war II)
       • Laning and Zierler’s language for the WHIRLWIND at MIT (1953)
             ◮     Fully algebraic in terms of supporting expressions
             ◮     Very inefficient




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune           History of FORTRAN: Computing Before FORTRAN                    10/42

             Challenges for Creation of High Level Languages



       • The tyranny of OR
           Expressiveness OR Efficiency
       • Most time was spent in floating point subroutines
             ◮     Not much attention was paid to address calculation, good use of
                   registers




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune           History of FORTRAN: Computing Before FORTRAN                    10/42

             Challenges for Creation of High Level Languages



       • The tyranny of OR
           Expressiveness OR Efficiency
       • Most time was spent in floating point subroutines
             ◮     Not much attention was paid to address calculation, good use of
                   registers
       • IBM 704 directly supported fast floating point operations
             ◮     Clumsy treatment of loops, indexing, references to registers could not
                   remain hidden
             ◮     Ignoring the above led to rejection of “automatic programming”




Feb 2013                                                        Uday Khedker, IIT Bombay
Part 2


The Creation of FORTRAN
Persistent, Pune         History of FORTRAN: The Creation of FORTRAN                    11/42

                           The Genius of John Backus



    He made the following important observations

       • The main reason of inefficiency is clumsy treatment of loops and array
         address computation
           If that can be handled, things may be far different
       • The possibility made a lot of economic sense
       • Language implementation was far more critical than language design




Feb 2013                                                     Uday Khedker, IIT Bombay
Persistent, Pune         History of FORTRAN: The Creation of FORTRAN                    11/42

                           The Genius of John Backus



    He made the following important observations

       • The main reason of inefficiency is clumsy treatment of loops and array
         address computation
           If that can be handled, things may be far different
       • The possibility made a lot of economic sense
       • Language implementation was far more critical than language design
           The “TRAN” in “FORTRAN” conveys the spirit




Feb 2013                                                     Uday Khedker, IIT Bombay
Persistent, Pune            History of FORTRAN: The Creation of FORTRAN                    12/42

                              The Genesis of FORTRAN


       • Motivation:
           Programming and debugging costs already exceeded the cost of running a
           program, and as computers became faster and cheaper this imbalance
           would become more and more intolerable
       • Goals: Can a machine translate
             ◮     a sufficiently rich mathematical language into
             ◮     a sufficiently economical program at
             ◮     a sufficiently low cost
           to make the whole affair feasible?
           The generated programs needed to be comparable to hand coded
           programs in efficiency




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune            History of FORTRAN: The Creation of FORTRAN                    13/42

                                 The Design Philosophy

       • About Language Design
             ◮     “We simply made up the language as we went along. We did not
                   regard language design as a difficult problem, merely a simple prelude
                   to the real problem: designing a compiler that could produce efficient
                   programs.”
             ◮     “We had notions of assignment statements, subscribed variables, and
                   the DO statement as the main features. Whatever else was needed
                   emerged as we tried to build a way of programming on these basic
                   ideas.”




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune            History of FORTRAN: The Creation of FORTRAN                    13/42

                                 The Design Philosophy

       • About Language Design
             ◮     “We simply made up the language as we went along. We did not
                   regard language design as a difficult problem, merely a simple prelude
                   to the real problem: designing a compiler that could produce efficient
                   programs.”
             ◮     “We had notions of assignment statements, subscribed variables, and
                   the DO statement as the main features. Whatever else was needed
                   emerged as we tried to build a way of programming on these basic
                   ideas.”
       • About Compiler Design
             ◮     Study the inner loops to find the most efficient method of execution
             ◮     Find how the efficient code can be generated for sample statements
             ◮     Generalize the observations by removing specificities and exceptions




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune            History of FORTRAN: The Creation of FORTRAN                    13/42

                                 The Design Philosophy

       • About Language Design
             ◮     “We simply made up the language as we went along. We did not
                   regard language design as a difficult problem, merely a simple prelude
                   to the real problem: designing a compiler that could produce efficient
                   programs.”
             ◮     “We had notions of assignment statements, subscribed variables, and
                   the DO statement as the main features. Whatever else was needed
                   emerged as we tried to build a way of programming on these basic
                   ideas.”
       • About Compiler Design
             ◮     Study the inner loops to find the most efficient method of execution
             ◮     Find how the efficient code can be generated for sample statements
             ◮     Generalize the observations by removing specificities and exceptions
           Effectively, they raised the level of computing from

                    number processing to processing text that processed numbers

Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune            History of FORTRAN: The Creation of FORTRAN                    14/42

                                The FORTRAN Project


       • Approved in Jan 1954, system delivered in April 1957
       • Supportive management
       • Young, energetic, enthusiastic, and inexperienced team
             ◮     Great team spirit and synergy




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune            History of FORTRAN: The Creation of FORTRAN                    14/42

                                The FORTRAN Project


       • Approved in Jan 1954, system delivered in April 1957
       • Supportive management
       • Young, energetic, enthusiastic, and inexperienced team
             ◮     Great team spirit and synergy
                        “The best part was the uncertainty and excitement of
                        waiting to see what kinds of object code all that work was
                        finally going to produce.”




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune            History of FORTRAN: The Creation of FORTRAN                    14/42

                                The FORTRAN Project


       • Approved in Jan 1954, system delivered in April 1957
       • Supportive management
       • Young, energetic, enthusiastic, and inexperienced team
             ◮     Great team spirit and synergy
                        “The best part was the uncertainty and excitement of
                        waiting to see what kinds of object code all that work was
                        finally going to produce.”
                        “It was great sport in those days to scan the object
                        program and either marvel at the translator or question its
                        sanity!”




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune            History of FORTRAN: The Creation of FORTRAN                    14/42

                                The FORTRAN Project


       • Approved in Jan 1954, system delivered in April 1957
       • Supportive management
       • Young, energetic, enthusiastic, and inexperienced team
             ◮     Great team spirit and synergy
                        “The best part was the uncertainty and excitement of
                        waiting to see what kinds of object code all that work was
                        finally going to produce.”
                        “It was great sport in those days to scan the object
                        program and either marvel at the translator or question its
                        sanity!”

             ◮     Helped in ignoring the doubters and overcome discouragement and
                   despair


Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune          History of FORTRAN: The Creation of FORTRAN                     15/42

                                  FORTRAN Claims



       • “The amount of knowledge necessary to utilise the 704 effectively by
         means of FORTRAN is far less than the knowledge required to make
         effective use of the 704 by direct coding.
           It will be possible to make the full capabilities of the 704 available to a
           much wider range of people than would otherwise be possible without
           expensive and time-consuming training programs.”




Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune          History of FORTRAN: The Creation of FORTRAN                     15/42

                                  FORTRAN Claims



       • “The amount of knowledge necessary to utilise the 704 effectively by
         means of FORTRAN is far less than the knowledge required to make
         effective use of the 704 by direct coding.
           It will be possible to make the full capabilities of the 704 available to a
           much wider range of people than would otherwise be possible without
           expensive and time-consuming training programs.”
       • “FORTRAN may apply complex, lengthy techniques in coding a problem
         which the human coder would have neither the time nor inclination to
         derive or apply.”




Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune          History of FORTRAN: The Creation of FORTRAN                     15/42

                                  FORTRAN Claims



       • “The amount of knowledge necessary to utilise the 704 effectively by
         means of FORTRAN is far less than the knowledge required to make
         effective use of the 704 by direct coding.
           It will be possible to make the full capabilities of the 704 available to a
           much wider range of people than would otherwise be possible without
           expensive and time-consuming training programs.”
       • “FORTRAN may apply complex, lengthy techniques in coding a problem
         which the human coder would have neither the time nor inclination to
         derive or apply.”

       • “FORTRAN will virtually eliminate coding and debugging.”




Feb 2013                                                       Uday Khedker, IIT Bombay
Part 3


FORTRAN I: The Language
Persistent, Pune             History of FORTRAN: The Language                          16/42

                   The Very First Question in FORTRAN FAQ



    In the IBM Customer Engineering Manual of Instructions

     Q. Why is Fortran used and what are its advantages over the SHARE
        assembly program ?
      A. Fortran allows a programmer to write in relatively familiar and simple
         language the steps of a procedure to be carried out by the 704. The
         programmer need not know 704 language, and is relieved of clerical work;
         human error is minimized. The programmer writes in symbolic machine
         language in SHARE. Fortran translates, compiles, and assembles, whereas
         a SHARE assembly program essentially just assembles, although
         subroutines can be compiled from the library tape of SHARE.




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Language                          17/42

                           The Language FORTRAN



       • Scalar and array variables
       • Integer and floating point values
       • Expressions
       • Assignment statements
       • DO loops
       • Functions
       • Other statements: READ, PRINT, FORMAT, IF and GOTO
       • Comments




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Language                          18/42

                            FORTRAN Examples (1)



                                   √
                            −B +    B 2 − 4AC
      Formula      root =
                                    2A


      Defining
                   ROOTF(A,B,C) = (-B + SQRTF(B**2 - 4*A*C))/(2.0*A)
      Function


      FORTRAN
                   ROOT = (-B + SQRTF(B**2 - 4*A*C))/(2.0*A)
      Statement




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune              History of FORTRAN: The Language                               19/42

                            FORTRAN Examples (2)


    Problem:
                                               P(ai +bi )
    Set Qmax equal to the largest quantity     P(ai −bi )   for some i between 1 and 1000
    where P(x) = c0 + c1 x + c2 x 2 + c3 x 3


    FORTRAN Program

     1     POLYF(X) = C0+X*(C1+X*(C2+X*C3))
     2     DIMENSION A(1000), B(1000)
     3     QMAX = -1.0E20
     4     Do 5 I = 1, 1000
     5     QMAX = MAXF(QMAX, POLYF(A(I) + B(I))/POLYF(A(I) - B(I)))
     6     STOP




Feb 2013                                                          Uday Khedker, IIT Bombay
Persistent, Pune                History of FORTRAN: The Language                          20/42

                     Limitations of FORTRAN I Language




       • Implicit types based on the first letter
       • No declarations required
       • No reserved words
       • Simplistic functions
       • No subprograms, no recursion
       • No spaces
       • DO loops with limited nesting depth of 3




Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Language                          21/42

                   Minor Errors Could be Rather Expensive



       • The first American Venus probe was lost because of a computer problem

       • A programer replaced a comma by a dot

                           Should have been           Was
                           DO 3 I = 1, 3         DO 3 I = 1.      3


       • What was essentially a DO loop header got treated as
           an assignment statement DO3I = 1.3 by the compiler




Feb 2013                                                    Uday Khedker, IIT Bombay
Part 4


FORTRAN I: The Compiler
Persistent, Pune                  History of FORTRAN: The Compiler                          22/42

                      Contributions of FORTRAN I Compiler



       • Phase-wise division of work
       • Optimizations:
             ◮     Common subexpressions elimination,
             ◮     Array address optimization in loops
                   (a form of strength reduction and induction variable elimination)
             ◮     Register allocation using hierarchical regions
                   (optimal under number of loads for straight line code)
       • Basic blocks and execution frequency analysis
       • Distinction between pseudo registers and hard registers




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                           23/42

                          Phases of FORTRAN I Compiler
              Input program
                                         • Input may be on tape or cards
                   Section 1             • Transferred to tape 2
                                         • Statements are classified and Internal
                   Section 2               Formula Number (IFN) is assigned
                                         • Arithmetic statements are translated
                                         • Output is recorded on COMPAIL file
                                           on tape 2
                                           (Complete Arithmetic, Input-Output,
                                           Logical)
                                         • Other statements are stored in buffer
                                           areas
                                            (if it is full, the information is
                                            transferred to tape 4)


Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                          23/42

                          Phases of FORTRAN I Compiler
              Input program

                   Section 1

                                         • DO loops are translated
                   Section 2
                                         • Arithmetic statements involving
                                           subscripts and induction variables are
                   Section 3
                                           translated
                                         • Unlimited index registers are assumed
                                           (in place of actual 3 index registers)
                                         • Output is recorded on COMPADO file
                                           on tape 2




Feb 2013                                                      Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                          23/42

                          Phases of FORTRAN I Compiler
              Input program

                   Section 1

                   Section 2
                                         • COMPAIL and COMPDO files are
                   Section 3               merged into a single file
                                         • Rest of the statements are translated
                   Section 4
                                         • Translation is complete except that
                                           actual index registers are not used




Feb 2013                                                      Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                          23/42

                          Phases of FORTRAN I Compiler
              Input program

                                         • Basic blocks are created and flow
                   Section 1
                                           analysis is performed

                   Section 2             • Execution frequencies are computed
                                           using simulated execution

                   Section 3             • The program may be executed several
                                           hundred times
                   Section 4             • Outcome of conditional control
                                           transfers is determined by
                   Section 5                  ◮   a random number generator
                                                  suitably weighted according to
                                              ◮   the branch frequency
                                                  specification in the program



Feb 2013                                                      Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                          23/42

                          Phases of FORTRAN I Compiler
              Input program

                   Section 1             • Pseudo registers are replaced by hard
                                           index register
                   Section 2             • Results of flow analysis of section 5
                                           are used
                   Section 3             • Hierarchical regions are formed and
                                           inner most regions are assigned the
                   Section 4               registers first
                                         • “Distance-to-next-use” policy is used
                   Section 5               to evict registers if required
                                         • Now the translation to assembly is
                   Section 6               complete



Feb 2013                                                      Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                          23/42

                          Phases of FORTRAN I Compiler
              Input program

                   Section 1

                   Section 2             • The program is assembled to produce
                                           the executable
                   Section 3             • It may be created on the tape or on
                                           cards
                   Section 4             • A listing of the program can also be
                                           generated
                   Section 5                Source statements and corresponding
                                            executable statements
                   Section 6

             Output program

Feb 2013                                                      Uday Khedker, IIT Bombay
Persistent, Pune                History of FORTRAN: The Compiler                                   24/42

                            Expressions in the Programs



       • Other “algebraic” compilers needed parenthesis for expressions

       • No concept for parsing using grammars

                   Expression            Expression Tree                  Required Syntax
                                              +
                                         a            ∗
            a + b ∗ ∗c ∗ (d + e)                                      (a) + (b ∗ ∗(c ∗ (d + e)))
                                             ∗∗               +

                                     b            c       d       e




Feb 2013                                                               Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                          25/42

                       FORTRAN Rules for Expressions

      1. Any fixed point (floating point) constant, variable, or subscripted variable
         is an expression of the same mode. Thus 3 and I are fixed point
         expressions, and ALPHA and A(I , J, K ) are floating point expressions.
      2. If SOMEF is some function of n variables, and if E , F , . . . , H are a set of
         n expressions of the correct modes for SOMEF , then
         SOMEF (E , F , . . . , H) is an expression of the same mode as SOMEF.
      3. If E is an expression, and if its first character is not “+” or “−”, then +E
         and −E are expressions of the same mode as E . Thus −A is an
         expression, but − − A is not.
      4. If E is an expression, then (E ) is an expression of the same mode as E .
         Thus (A), ((A)), (((A))), etc. are expressions.
      5. If E and F are expressions of the same mode, and if the first character of
         F is not + or −, then E + F , E − F , E ∗ F , E /F are expressions of the
         same mode.


Feb 2013                                                      Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”
       • Our expression becomes fully parenthesised by application of this rule.

                         (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E )))))))




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”
       • Our expression becomes fully parenthesised by application of this rule.

                         (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E )))))))




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”
       • Our expression becomes fully parenthesised by application of this rule.

                         (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E )))))))




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”
       • Our expression becomes fully parenthesised by application of this rule.

                         (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E )))))))




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”
       • Our expression becomes fully parenthesised by application of this rule.

                         (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E )))))))




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”
       • Our expression becomes fully parenthesised by application of this rule.

                         (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E )))))))




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”
       • Our expression becomes fully parenthesised by application of this rule.

                         (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E )))))))




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”
       • Our expression becomes fully parenthesised by application of this rule.

                         (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E )))))))




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          26/42

                        FORTRAN Expression Handling (1)

       • Conventional precedences were used and parenthesis were not required.
       • Simple rule of reconstructing parenthesised expressions:
           Assuming three levels of precedences of “+”, “∗”, and “∗∗”
             ◮     Add “(((” in the beginning of the expression
                   (and hence before every “(” in the expression)
             ◮     Add “)))” at the end of the expression
                   (and hence after every “)” in the expression)
             ◮     Replace every “+” by “))) + (((”
             ◮     Replace every “∗” by “)) + ((”
             ◮     Replace every “∗∗” by “) + (”
       • Our expression becomes fully parenthesised by application of this rule.

                         (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E )))))))

           (The rules can be applied in a single left-to-right scan of the expression)

Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                          27/42

                        FORTRAN Expression Handling (2)


       • Observation by Barnie Galler
             ◮     For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45!




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                          27/42

                        FORTRAN Expression Handling (2)


       • Observation by Barnie Galler
             ◮     For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45!
             ◮     “/” had a higher precedence and 9/2 is 4 in integer arithmetic




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                          27/42

                        FORTRAN Expression Handling (2)


       • Observation by Barnie Galler
             ◮     For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45!
             ◮     “/” had a higher precedence and 9/2 is 4 in integer arithmetic
       • Response from IBM
         “It is too complicated to change the compiler so we will fix the manual”




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                          27/42

                        FORTRAN Expression Handling (2)


       • Observation by Barnie Galler
             ◮     For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45!
             ◮     “/” had a higher precedence and 9/2 is 4 in integer arithmetic
       • Response from IBM
         “It is too complicated to change the compiler so we will fix the manual”
       • New manual had the following statement:
         “Please be warned that mathematical equivalence is not the same as
         computational equivalence”




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                          27/42

                        FORTRAN Expression Handling (2)


       • Observation by Barnie Galler
             ◮     For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45!
             ◮     “/” had a higher precedence and 9/2 is 4 in integer arithmetic
       • Response from IBM
         “It is too complicated to change the compiler so we will fix the manual”
       • New manual had the following statement:
         “Please be warned that mathematical equivalence is not the same as
         computational equivalence”
       • How about the same precedence for “/” and “∗” and left associativity?




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          27/42

                         FORTRAN Expression Handling (2)


       • Observation by Barnie Galler
             ◮     For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45!
             ◮     “/” had a higher precedence and 9/2 is 4 in integer arithmetic
       • Response from IBM
         “It is too complicated to change the compiler so we will fix the manual”
       • New manual had the following statement:
         “Please be warned that mathematical equivalence is not the same as
         computational equivalence”
       • How about the same precedence for “/” and “∗” and left associativity?
             ◮     n/2 ∗ (n − 1)
             ◮     n ∗ (n − 1) ∗ (1/2)



Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program




             DIMENSION A (10,lO)
             DIMENSION B (10,lO)

             DO 1 J = 1, 10
             DO 1 I = 1, 10
     1       A(I,J) = B(I,J)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: The Compiler                          28/42

                    A FORTRAN Program for Array Copy

                   Program                   A simplified view for 4x3 fragments

                                                        B(1,1)    B(1,2)    B(1,3)
                                                        B(2,1)    B(2,2)    B(2,3)

             DIMENSION A (10,lO)                        B(3,1)    B(3,2)    B(3,3)
             DIMENSION B (10,lO)                        B(4,1)    B(4,2)    B(4,3)

             DO 1 J = 1, 10
             DO 1 I = 1, 10                  A(1,1)     A(1,2)   A(1,3)
     1       A(I,J) = B(I,J)                 A(2,1)     A(2,2)   A(2,3)
                                             A(3,1)     A(3,2)   A(3,3)
                                             A(4,1)     A(4,2)   A(4,3)




Feb 2013                                                    Uday Khedker, IIT Bombay
Persistent, Pune                           History of FORTRAN: The Compiler                          29/42

                                       Array Address Calculation
                           Cell (i, j)                                        Its address

                               j
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
           i
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x




Feb 2013                                                                  Uday Khedker, IIT Bombay
Persistent, Pune                           History of FORTRAN: The Compiler                          29/42

                                       Array Address Calculation
                           Cell (i, j)                                        Its address

                               j
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
           i
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
                                                         10         Base + (j − 1) ∗ 10 + i − 1
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x




Feb 2013                                                                  Uday Khedker, IIT Bombay
Persistent, Pune                           History of FORTRAN: The Compiler                          29/42

                                       Array Address Calculation
                           Cell (i, j)                                        Its address

                               j
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
           i
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
                                                         10         Base + (j − 1) ∗ 10 + i − 1
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x
               x   x   x   x       x   x   x   x   x   x


    An additional complication: In FORTRAN, arrays are stored backwards and
                                index registers are subtracted from the base

Feb 2013                                                                  Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                           30/42

                          Output of FORTRAN I Compiler

                          DIMENSION A (10,lO)
                          DIMENSION B (10,lO)
    Source
    Program               DO 1 J = 1, 10
                          DO 1 I = 1, 10
                   1      A(I,J) = B(I,J)


                           Statement               Explanation

                           LXD   ONE, 1            Ixr1 = 1
    Object         LOOP    CLA   B+1, 1            Acc = ∗(B + 1) − Ixr1
    Program                ST0   A+1, 1            ∗(A + 1 − Ixr1) = Acc
                           TXI   * +1, 1, 1        Ixr1 = Ixr1 + 1, jump ahead by 1
                           TXL   LOOP,l ,100       if (Ixr1 ≤ 100), goto LOOP




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                           30/42

                          Output of FORTRAN I Compiler

                          DIMENSION A (10,lO)
                          DIMENSION B (10,lO)
    Source                                                    • Address calculation?
    Program               DO 1 J = 1, 10
                                                              • Nested loops?
                          DO 1 I = 1, 10
                   1      A(I,J) = B(I,J)


                           Statement               Explanation

                           LXD   ONE, 1            Ixr1 = 1
    Object         LOOP    CLA   B+1, 1            Acc = ∗(B + 1) − Ixr1
    Program                ST0   A+1, 1            ∗(A + 1 − Ixr1) = Acc
                           TXI   * +1, 1, 1        Ixr1 = Ixr1 + 1, jump ahead by 1
                           TXL   LOOP,l ,100       if (Ixr1 ≤ 100), goto LOOP




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune           History of FORTRAN: The Compiler                           31/42

           Compiling Array Copy Program: Control Flow Graph

                                                    i =j =1


                                                      j=0

             DIMENSION A (10,lO)
             DIMENSION B (10,lO)            t1 = (j − 1) ∗ 10 + i − 1
                                            t2 = ∗(B − t1 )
             DO 1 J = 1, 10                 ∗(A − t1) = t2
             DO 1 I = 1, 10                 i =i +1
     1       A(I,J) = B(I,J)
                                                (i > 10)         (i ≤ 10)
                                                    j =j +1

                                                (j > 10)           (j ≤ 10)


Feb 2013                                                   Uday Khedker, IIT Bombay
Persistent, Pune                History of FORTRAN: The Compiler                          32/42

       Compiling Array Copy Program: Strength Reduction (1)

                   i =j =1

                                                 Observations about the inner loop
                    j=0


        t1 = (j − 1) ∗ 10 + i − 1
        t2 = ∗(B − t1 )
        ∗(A − t1) = t2
        i =i +1

             (i > 10)        (i ≤ 10)
                   j =j +1

             (j > 10)         (j ≤ 10)


Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune                History of FORTRAN: The Compiler                          32/42

       Compiling Array Copy Program: Strength Reduction (1)

                   i =j =1

                                                 Observations about the inner loop
                    j=0
                                                    • Whenever i increments by 1, t1
                                                      also increments by 1
        t1 = (j − 1) ∗ 10 + i − 1
        t2 = ∗(B − t1 )
        ∗(A − t1) = t2
        i =i +1

             (i > 10)        (i ≤ 10)
                   j =j +1

             (j > 10)         (j ≤ 10)


Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune                History of FORTRAN: The Compiler                          32/42

       Compiling Array Copy Program: Strength Reduction (1)

                   i =j =1

                                                 Observations about the inner loop
                    j=0
                                                    • Whenever i increments by 1, t1
                                                      also increments by 1
        t1 = (j − 1) ∗ 10 + i − 1                   • We can initialise t1 outside of
        t2 = ∗(B − t1 )                               the inner loop
        ∗(A − t1) = t2                                 t1 = (j − 1) ∗ 10 + i − 1
        i =i +1                                             = (j − 1) ∗ 10
                                                                 (because i is 1)
             (i > 10)        (i ≤ 10)                 and increment it within the loop
                   j =j +1                            t1 = t1 + 1

             (j > 10)         (j ≤ 10)


Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                          33/42

       Compiling Array Copy Program: Strength Reduction (2)

                   i =j =1


             t1 = (j − 1) ∗ 10


              t2 = ∗(B − t1 )
              ∗(A − t1) = t2
              i =i +1
              t1 = t1 + 1

             (i > 10)        (i ≤ 10)
                   j =j +1

             (j > 10)           (j ≤ 10)


Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                          33/42

       Compiling Array Copy Program: Strength Reduction (2)

                   i =j =1
                                                  Observations about the inner loop
                                                     • Whenever j increments by 1, t1
             t1 = (j − 1) ∗ 10                         increments by 10


              t2 = ∗(B − t1 )
              ∗(A − t1) = t2
              i =i +1
              t1 = t1 + 1

             (i > 10)        (i ≤ 10)
                   j =j +1

             (j > 10)           (j ≤ 10)


Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                          33/42

       Compiling Array Copy Program: Strength Reduction (2)

                   i =j =1
                                                  Observations about the inner loop
                                                     • Whenever j increments by 1, t1
             t1 = (j − 1) ∗ 10                         increments by 10
                                                     • We can initialise t1 outside of
              t2 = ∗(B − t1 )                          the outer loop
              ∗(A − t1) = t2                            t1 = (j − 1) ∗ 10
              i =i +1                                        = 0
              t1 = t1 + 1                                        (because j is 1)
                                                       and increment it within the loop
             (i > 10)        (i ≤ 10)                   t1 = t1 + 10
                   j =j +1

             (j > 10)           (j ≤ 10)


Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: The Compiler                          33/42

       Compiling Array Copy Program: Strength Reduction (2)

                   i =j =1
                                                  Observations about the inner loop
                                                     • Whenever j increments by 1, t1
             t1 = (j − 1) ∗ 10                         increments by 10
                                                     • We can initialise t1 outside of
              t2 = ∗(B − t1 )                          the outer loop
              ∗(A − t1) = t2                            t1 = (j − 1) ∗ 10
              i =i +1                                        = 0
              t1 = t1 + 1                                        (because j is 1)
                                                       and increment it within the loop
             (i > 10)        (i ≤ 10)                   t1 = t1 + 10
                   j =j +1                           • However, the inner loop already
                                                       increments t1 by 10.
             (j > 10)           (j ≤ 10)


Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          34/42

           Compiling Array Copy Program: Flattening the Loops

                   i =j =1
                   t1 = 0


                   i = i = 0


              t2 = ∗(B − t1 )
              ∗(A − t1) = t2
              i =i +1
              t1 = t1 + 1

             (i > 10)          (i ≤ 10)
                   j =j +1

             (j > 10)           (j ≤ 10)

Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          34/42

           Compiling Array Copy Program: Flattening the Loops

                   i =j =1
                   t1 = 0

                                                      • The only activity in the outer
                   i = i = 0                            loop now is to control the loop
                                                        iterations
                                                         No other computation
              t2 = ∗(B − t1 )
              ∗(A − t1) = t2
              i =i +1
              t1 = t1 + 1

             (i > 10)          (i ≤ 10)
                   j =j +1

             (j > 10)           (j ≤ 10)

Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: The Compiler                          34/42

           Compiling Array Copy Program: Flattening the Loops

                   i =j =1
                   t1 = 0

                                                      • The only activity in the outer
                   i = i = 0                            loop now is to control the loop
                                                        iterations
                                                         No other computation
              t2 = ∗(B − t1 )
                                                      • We can combine the loops into
              ∗(A − t1) = t2
                                                        a single loop by taking a
              i =i +1
                                                        product of the two loop bounds
              t1 = t1 + 1
                                                      • Variables i and j would not be
             (i > 10)          (i ≤ 10)                 required

                   j =j +1

             (j > 10)           (j ≤ 10)

Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                History of FORTRAN: The Compiler                          35/42

           Compiling Array Copy Program: The Final Program

        Control flow graph (CFG)                           Original Assembly



                   t1 = 0



              t2 = ∗(B − t1 )
              ∗(A − t1) = t2
              t1 = t1 + 1

           (t1 > 100)   (t1 ≤ 100)

                   j =j +1




Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune                History of FORTRAN: The Compiler                          35/42

           Compiling Array Copy Program: The Final Program

        Control flow graph (CFG)                           Original Assembly



                   t1 = 0
                                                               LXD   ONE, 1
                                                      LOOP     CLA   B+1, 1
                                                               ST0   A+1, 1
              t2 = ∗(B − t1 )                                  TXI   * +1, 1, 1
              ∗(A − t1) = t2                                   TXL   LOOP,l ,100
              t1 = t1 + 1

           (t1 > 100)   (t1 ≤ 100)

                   j =j +1




Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune                History of FORTRAN: The Compiler                          35/42

           Compiling Array Copy Program: The Final Program

        Control flow graph (CFG)                           Original Assembly



                   t1 = 0
                                                               LXD   ONE, 1
                                                      LOOP     CLA   B+1, 1
                                                               ST0   A+1, 1
              t2 = ∗(B − t1 )                                  TXI   * +1, 1, 1
              ∗(A − t1) = t2                                   TXL   LOOP,l ,100
              t1 = t1 + 1

                                                           Minor differences
           (t1 > 100)   (t1 ≤ 100)
                                                                    CFG Assembly
                                               Base address           B     B +1
                   j =j +1                     Initial value of t1    0       1



Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                          36/42

     Compiling Array Copy Program Using GCC 4.7.2 (gfortran)
    .L5:
                   leal    408(%esp), %ebx
                   movl    $1, %eax
                   leal    808(%esp), %ecx
                   addl    %esi, %ebx
                   addl    %esi, %ecx                             • Integer is now 4 bytes
                   .p2align 4,,7
                   .p2align 3
    .L4:
                   movl   -44(%ecx,%eax,4), %edx
                   movl   %edx, -44(%ebx,%eax,4)
                   addl   $1, %eax
                   cmpl   $11, %eax
                   jne    .L4
                   addl   $40, %esi
                   cmpl   $400, %esi
                   jne    .L5


Feb 2013                                                      Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                          36/42

     Compiling Array Copy Program Using GCC 4.7.2 (gfortran)
    .L5:
                   leal    408(%esp), %ebx
                   movl    $1, %eax
                   leal    808(%esp), %ecx
                   addl    %esi, %ebx
                   addl    %esi, %ecx                             • Integer is now 4 bytes
                   .p2align 4,,7
                   .p2align 3                                     • Efficient address
    .L4:                                                            calculation with
                   movl   -44(%ecx,%eax,4), %edx                    strength reduction
                   movl   %edx, -44(%ebx,%eax,4)
                   addl   $1, %eax
                   cmpl   $11, %eax
                   jne    .L4
                   addl   $40, %esi
                   cmpl   $400, %esi
                   jne    .L5


Feb 2013                                                      Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: The Compiler                          36/42

     Compiling Array Copy Program Using GCC 4.7.2 (gfortran)
    .L5:
                   leal    408(%esp), %ebx
                   movl    $1, %eax
                   leal    808(%esp), %ecx
                   addl    %esi, %ebx
                   addl    %esi, %ecx                             • Integer is now 4 bytes
                   .p2align 4,,7
                   .p2align 3                                     • Efficient address
    .L4:                                                            calculation with
                   movl   -44(%ecx,%eax,4), %edx                    strength reduction
                   movl   %edx, -44(%ebx,%eax,4)                  • Nested loops not
                   addl   $1, %eax                                  flattened
                   cmpl   $11, %eax
                   jne    .L4
                   addl   $40, %esi
                   cmpl   $400, %esi
                   jne    .L5


Feb 2013                                                      Uday Khedker, IIT Bombay
Part 5


Conclusions
Persistent, Pune             History of FORTRAN: Conclusions                              37/42

                   So is There Nothing New in Compilers?

       • Languages have changed significantly



       • Processors have changed significantly


       • Problem sizes have changed significantly


       • Expectations have changed significantly



       • Analysis techniques have changed significantly




Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: Conclusions                              37/42

                      So is There Nothing New in Compilers?

       • Languages have changed significantly
             ◮     “The Worst thing that has happened to Computer Science is C
                   because it brought pointers with it.” (Frances Allen, IITK, 2007)
       • Processors have changed significantly


       • Problem sizes have changed significantly


       • Expectations have changed significantly



       • Analysis techniques have changed significantly




Feb 2013                                                            Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: Conclusions                              37/42

                      So is There Nothing New in Compilers?

       • Languages have changed significantly
             ◮     “The Worst thing that has happened to Computer Science is C
                   because it brought pointers with it.” (Frances Allen, IITK, 2007)
       • Processors have changed significantly
             ◮     GPUs, Many core processors, Embedded processors
       • Problem sizes have changed significantly


       • Expectations have changed significantly



       • Analysis techniques have changed significantly




Feb 2013                                                            Uday Khedker, IIT Bombay
Persistent, Pune                   History of FORTRAN: Conclusions                              37/42

                      So is There Nothing New in Compilers?

       • Languages have changed significantly
             ◮     “The Worst thing that has happened to Computer Science is C
                   because it brought pointers with it.” (Frances Allen, IITK, 2007)
       • Processors have changed significantly
             ◮     GPUs, Many core processors, Embedded processors
       • Problem sizes have changed significantly
             ◮     Programs running in millions of lines of code
       • Expectations have changed significantly



       • Analysis techniques have changed significantly




Feb 2013                                                             Uday Khedker, IIT Bombay
Persistent, Pune                   History of FORTRAN: Conclusions                              37/42

                      So is There Nothing New in Compilers?

       • Languages have changed significantly
             ◮     “The Worst thing that has happened to Computer Science is C
                   because it brought pointers with it.” (Frances Allen, IITK, 2007)
       • Processors have changed significantly
             ◮     GPUs, Many core processors, Embedded processors
       • Problem sizes have changed significantly
             ◮     Programs running in millions of lines of code
       • Expectations have changed significantly
             ◮     Interprocedural analysis and optimization, validation, reverse
                   engineering, parallelization
       • Analysis techniques have changed significantly




Feb 2013                                                             Uday Khedker, IIT Bombay
Persistent, Pune                   History of FORTRAN: Conclusions                              37/42

                      So is There Nothing New in Compilers?

       • Languages have changed significantly
             ◮     “The Worst thing that has happened to Computer Science is C
                   because it brought pointers with it.” (Frances Allen, IITK, 2007)
       • Processors have changed significantly
             ◮     GPUs, Many core processors, Embedded processors
       • Problem sizes have changed significantly
             ◮     Programs running in millions of lines of code
       • Expectations have changed significantly
             ◮     Interprocedural analysis and optimization, validation, reverse
                   engineering, parallelization
       • Analysis techniques have changed significantly
             ◮     Parsing, Data flow analysis, Parallism Discovery, Heap Analysis


Feb 2013                                                             Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: Conclusions                              38/42

                        The Wonder Element of FORTRAN




       • Expressiveness Vs. Efficiency conflict
             ◮     Efficiency of programming and reach of programming, OR
             ◮     Efficincy of program execution and resource utilization

       • FORTRAN: The triumph of the genius of AND over the tyranny of OR




Feb 2013                                                           Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: Conclusions                              38/42

                        The Wonder Element of FORTRAN




       • Expressiveness Vs. Efficiency conflict
             ◮     Efficiency of programming and reach of programming, OR
             ◮     Efficincy of program execution and resource utilization

       • FORTRAN: The triumph of the genius of AND over the tyranny of OR

       • The software equivalent of a transistor




Feb 2013                                                           Uday Khedker, IIT Bombay
Persistent, Pune              History of FORTRAN: Conclusions                              39/42

                   Why Things Happen the Way They Happen?




       • John Backus was the right person at the right time at the right place




Feb 2013                                                        Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: Conclusions                              39/42

                   Why Things Happen the Way They Happen?




       • John Backus was the right person at the right time at the right place
             ◮     He had the foresight to recognize the adjacent possible
             ◮     He was Bernard Shaw’s proverbial “unreasonable person”




Feb 2013                                                            Uday Khedker, IIT Bombay
Persistent, Pune                  History of FORTRAN: Conclusions                              39/42

                   Why Things Happen the Way They Happen?




       • John Backus was the right person at the right time at the right place
             ◮     He had the foresight to recognize the adjacent possible
             ◮     He was Bernard Shaw’s proverbial “unreasonable person”
       • The ideas of Charles Babbage were far beyond the adjacent possible




Feb 2013                                                            Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: Conclusions                              40/42

                             The Challenge Ahead




       • Expressiveness Vs. Efficiency conflict due to the problem of scale




Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune             History of FORTRAN: Conclusions                              40/42

                             The Challenge Ahead




       • Expressiveness Vs. Efficiency conflict due to the problem of scale


       • Have we reached the Von Neumann bottleneck?




Feb 2013                                                       Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: Conclusions                              40/42

                              The Challenge Ahead




       • Expressiveness Vs. Efficiency conflict due to the problem of scale


       • Have we reached the Von Neumann bottleneck?
           Backus argued so over three decades ago!




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune               History of FORTRAN: Conclusions                              40/42

                              The Challenge Ahead




       • Expressiveness Vs. Efficiency conflict due to the problem of scale


       • Have we reached the Von Neumann bottleneck?
           Backus argued so over three decades ago!


       • The world awaits another John Backus to give us the next break-through!




Feb 2013                                                         Uday Khedker, IIT Bombay
Persistent, Pune                 History of FORTRAN: Conclusions                              41/42

                                  Acknowledgements




       • Mostly based on the online documents made available by the Computer
         History Museum (www.computerhistory.org)
             ◮     FORTRAN examples by John Backus
             ◮     Array copy example by Frances Allen
             ◮     FORTRAN expression handling explanation by David Padua
       • Interesting discussions with Supratim Biswas




Feb 2013                                                           Uday Khedker, IIT Bombay
Persistent, Pune    History of FORTRAN: Conclusions                              42/42

                   Last But Not the Least




                   Thank You!




Feb 2013                                              Uday Khedker, IIT Bombay

Weitere ähnliche Inhalte

Andere mochten auch

Information technology
Information technologyInformation technology
Information technologyApie248
 
Programar En Fortran
Programar En FortranProgramar En Fortran
Programar En FortranSaul Bernal
 
History of computer
History of computerHistory of computer
History of computerMNButt
 
PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法智啓 出川
 
Evolution and classification of computers
Evolution and classification of computersEvolution and classification of computers
Evolution and classification of computersAVINASH ANAND
 
02. History - Evolution of Computers
02. History - Evolution of Computers02. History - Evolution of Computers
02. History - Evolution of ComputersAkhila Dakshina
 
Blaise pascal
Blaise pascalBlaise pascal
Blaise pascalewolterb
 
Blaise pascal
Blaise pascalBlaise pascal
Blaise pascalsbrierton
 
Feasibility study of setting up a computer store chapter 1-5
Feasibility study of setting up a computer store chapter 1-5Feasibility study of setting up a computer store chapter 1-5
Feasibility study of setting up a computer store chapter 1-5Christofer De Los Reyes
 
Towards Exascale Computing with Fortran 2015
Towards Exascale Computing with Fortran 2015Towards Exascale Computing with Fortran 2015
Towards Exascale Computing with Fortran 2015inside-BigData.com
 
CITY OF SPIES BY SORAYYA KHAN
CITY OF SPIES BY SORAYYA KHANCITY OF SPIES BY SORAYYA KHAN
CITY OF SPIES BY SORAYYA KHANSheikh Hasnain
 
Scalable Internet Servers and Load Balancing
Scalable Internet Servers and Load BalancingScalable Internet Servers and Load Balancing
Scalable Internet Servers and Load BalancingInformation Technology
 

Andere mochten auch (20)

Information technology
Information technologyInformation technology
Information technology
 
Mancheter
MancheterMancheter
Mancheter
 
Blaise Pascal Biography
Blaise Pascal BiographyBlaise Pascal Biography
Blaise Pascal Biography
 
Programar En Fortran
Programar En FortranProgramar En Fortran
Programar En Fortran
 
History of computers
History of computersHistory of computers
History of computers
 
Activity 3 history of computer
Activity 3   history of computerActivity 3   history of computer
Activity 3 history of computer
 
History of computer
History of computerHistory of computer
History of computer
 
PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法
 
Evolution and classification of computers
Evolution and classification of computersEvolution and classification of computers
Evolution and classification of computers
 
02. History - Evolution of Computers
02. History - Evolution of Computers02. History - Evolution of Computers
02. History - Evolution of Computers
 
Blaise pascal
Blaise pascalBlaise pascal
Blaise pascal
 
Blaise pascal
Blaise pascalBlaise pascal
Blaise pascal
 
Feasibility study of setting up a computer store chapter 1-5
Feasibility study of setting up a computer store chapter 1-5Feasibility study of setting up a computer store chapter 1-5
Feasibility study of setting up a computer store chapter 1-5
 
Blaise pascal
Blaise pascalBlaise pascal
Blaise pascal
 
Towards Exascale Computing with Fortran 2015
Towards Exascale Computing with Fortran 2015Towards Exascale Computing with Fortran 2015
Towards Exascale Computing with Fortran 2015
 
Trends in spies
Trends in spiesTrends in spies
Trends in spies
 
Functional style programming
Functional style programmingFunctional style programming
Functional style programming
 
Carrick - Introduction to Physics & Electronics - Spring Review 2012
Carrick - Introduction to Physics & Electronics - Spring Review 2012Carrick - Introduction to Physics & Electronics - Spring Review 2012
Carrick - Introduction to Physics & Electronics - Spring Review 2012
 
CITY OF SPIES BY SORAYYA KHAN
CITY OF SPIES BY SORAYYA KHANCITY OF SPIES BY SORAYYA KHAN
CITY OF SPIES BY SORAYYA KHAN
 
Scalable Internet Servers and Load Balancing
Scalable Internet Servers and Load BalancingScalable Internet Servers and Load Balancing
Scalable Internet Servers and Load Balancing
 

Mehr von Persistent Systems Ltd.

Skilling for SMAC by Anand Deshpande, Founder, Chairman and Managing Director...
Skilling for SMAC by Anand Deshpande, Founder, Chairman and Managing Director...Skilling for SMAC by Anand Deshpande, Founder, Chairman and Managing Director...
Skilling for SMAC by Anand Deshpande, Founder, Chairman and Managing Director...Persistent Systems Ltd.
 
Embedded Linux Evolution | Turing Techtalk
Embedded Linux Evolution | Turing TechtalkEmbedded Linux Evolution | Turing Techtalk
Embedded Linux Evolution | Turing TechtalkPersistent Systems Ltd.
 
Life and Work of Ken Thompson and Dennis Ritchie | Turing Techtalk
Life and Work of Ken Thompson and Dennis Ritchie | Turing TechtalkLife and Work of Ken Thompson and Dennis Ritchie | Turing Techtalk
Life and Work of Ken Thompson and Dennis Ritchie | Turing TechtalkPersistent Systems Ltd.
 
Life and Work of Ivan Sutherland | Turing100@Persistent
Life and Work of Ivan Sutherland | Turing100@PersistentLife and Work of Ivan Sutherland | Turing100@Persistent
Life and Work of Ivan Sutherland | Turing100@PersistentPersistent Systems Ltd.
 
Evolution of the modern graphics architectures with a focus on GPUs | Turing1...
Evolution of the modern graphics architectures with a focus on GPUs | Turing1...Evolution of the modern graphics architectures with a focus on GPUs | Turing1...
Evolution of the modern graphics architectures with a focus on GPUs | Turing1...Persistent Systems Ltd.
 
What is wrong with the Internet? [On the foundations of internet security, fu...
What is wrong with the Internet? [On the foundations of internet security, fu...What is wrong with the Internet? [On the foundations of internet security, fu...
What is wrong with the Internet? [On the foundations of internet security, fu...Persistent Systems Ltd.
 
Life and Work of Ronald L. Rivest, Adi Shamir & Leonard M. Adleman | Turing10...
Life and Work of Ronald L. Rivest, Adi Shamir & Leonard M. Adleman | Turing10...Life and Work of Ronald L. Rivest, Adi Shamir & Leonard M. Adleman | Turing10...
Life and Work of Ronald L. Rivest, Adi Shamir & Leonard M. Adleman | Turing10...Persistent Systems Ltd.
 
Life and Work of Judea Perl | Turing100@Persistent
Life and Work of Judea Perl | Turing100@PersistentLife and Work of Judea Perl | Turing100@Persistent
Life and Work of Judea Perl | Turing100@PersistentPersistent Systems Ltd.
 
Life and Work of Jim Gray | Turing100@Persistent
Life and Work of Jim Gray | Turing100@PersistentLife and Work of Jim Gray | Turing100@Persistent
Life and Work of Jim Gray | Turing100@PersistentPersistent Systems Ltd.
 
Software Faults, Failures and Their Mitigations | Turing100@Persistent
Software Faults, Failures and Their Mitigations | Turing100@PersistentSoftware Faults, Failures and Their Mitigations | Turing100@Persistent
Software Faults, Failures and Their Mitigations | Turing100@PersistentPersistent Systems Ltd.
 
Systems Design Experiences or Just Some War Stories…
Systems Design Experiences or Just Some War Stories…Systems Design Experiences or Just Some War Stories…
Systems Design Experiences or Just Some War Stories…Persistent Systems Ltd.
 
Life & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentLife & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentPersistent Systems Ltd.
 
Life & Work of Robin Milner | Turing100@Persistent
Life & Work of Robin Milner | Turing100@PersistentLife & Work of Robin Milner | Turing100@Persistent
Life & Work of Robin Milner | Turing100@PersistentPersistent Systems Ltd.
 
Life & Work of Dr. Vinton Cerf and Dr. Robert Kahn | Turing100@Persistent
Life & Work of Dr. Vinton Cerf and Dr. Robert Kahn | Turing100@PersistentLife & Work of Dr. Vinton Cerf and Dr. Robert Kahn | Turing100@Persistent
Life & Work of Dr. Vinton Cerf and Dr. Robert Kahn | Turing100@PersistentPersistent Systems Ltd.
 
Net Neutrality | Turing100@Persistent Systems
Net Neutrality | Turing100@Persistent SystemsNet Neutrality | Turing100@Persistent Systems
Net Neutrality | Turing100@Persistent SystemsPersistent Systems Ltd.
 
Alan Turing Scientist Unlimited | Turing100@Persistent Systems
Alan Turing Scientist Unlimited | Turing100@Persistent SystemsAlan Turing Scientist Unlimited | Turing100@Persistent Systems
Alan Turing Scientist Unlimited | Turing100@Persistent SystemsPersistent Systems Ltd.
 
Life and work of E.F. (Ted) Codd | Turing100@Persistent
Life and work of E.F. (Ted) Codd | Turing100@PersistentLife and work of E.F. (Ted) Codd | Turing100@Persistent
Life and work of E.F. (Ted) Codd | Turing100@PersistentPersistent Systems Ltd.
 
Alan Turing Centenary @ Persistent Systems
Alan Turing Centenary @ Persistent SystemsAlan Turing Centenary @ Persistent Systems
Alan Turing Centenary @ Persistent SystemsPersistent Systems Ltd.
 

Mehr von Persistent Systems Ltd. (19)

Skilling for SMAC by Anand Deshpande, Founder, Chairman and Managing Director...
Skilling for SMAC by Anand Deshpande, Founder, Chairman and Managing Director...Skilling for SMAC by Anand Deshpande, Founder, Chairman and Managing Director...
Skilling for SMAC by Anand Deshpande, Founder, Chairman and Managing Director...
 
Embedded Linux Evolution | Turing Techtalk
Embedded Linux Evolution | Turing TechtalkEmbedded Linux Evolution | Turing Techtalk
Embedded Linux Evolution | Turing Techtalk
 
Life and Work of Ken Thompson and Dennis Ritchie | Turing Techtalk
Life and Work of Ken Thompson and Dennis Ritchie | Turing TechtalkLife and Work of Ken Thompson and Dennis Ritchie | Turing Techtalk
Life and Work of Ken Thompson and Dennis Ritchie | Turing Techtalk
 
Life and Work of Ivan Sutherland | Turing100@Persistent
Life and Work of Ivan Sutherland | Turing100@PersistentLife and Work of Ivan Sutherland | Turing100@Persistent
Life and Work of Ivan Sutherland | Turing100@Persistent
 
Evolution of the modern graphics architectures with a focus on GPUs | Turing1...
Evolution of the modern graphics architectures with a focus on GPUs | Turing1...Evolution of the modern graphics architectures with a focus on GPUs | Turing1...
Evolution of the modern graphics architectures with a focus on GPUs | Turing1...
 
What is wrong with the Internet? [On the foundations of internet security, fu...
What is wrong with the Internet? [On the foundations of internet security, fu...What is wrong with the Internet? [On the foundations of internet security, fu...
What is wrong with the Internet? [On the foundations of internet security, fu...
 
Life and Work of Ronald L. Rivest, Adi Shamir & Leonard M. Adleman | Turing10...
Life and Work of Ronald L. Rivest, Adi Shamir & Leonard M. Adleman | Turing10...Life and Work of Ronald L. Rivest, Adi Shamir & Leonard M. Adleman | Turing10...
Life and Work of Ronald L. Rivest, Adi Shamir & Leonard M. Adleman | Turing10...
 
Life and Work of Judea Perl | Turing100@Persistent
Life and Work of Judea Perl | Turing100@PersistentLife and Work of Judea Perl | Turing100@Persistent
Life and Work of Judea Perl | Turing100@Persistent
 
Life and Work of Jim Gray | Turing100@Persistent
Life and Work of Jim Gray | Turing100@PersistentLife and Work of Jim Gray | Turing100@Persistent
Life and Work of Jim Gray | Turing100@Persistent
 
Software Faults, Failures and Their Mitigations | Turing100@Persistent
Software Faults, Failures and Their Mitigations | Turing100@PersistentSoftware Faults, Failures and Their Mitigations | Turing100@Persistent
Software Faults, Failures and Their Mitigations | Turing100@Persistent
 
System Anecdotes | Turing100@Persistent
System Anecdotes | Turing100@PersistentSystem Anecdotes | Turing100@Persistent
System Anecdotes | Turing100@Persistent
 
Systems Design Experiences or Just Some War Stories…
Systems Design Experiences or Just Some War Stories…Systems Design Experiences or Just Some War Stories…
Systems Design Experiences or Just Some War Stories…
 
Life & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentLife & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@Persistent
 
Life & Work of Robin Milner | Turing100@Persistent
Life & Work of Robin Milner | Turing100@PersistentLife & Work of Robin Milner | Turing100@Persistent
Life & Work of Robin Milner | Turing100@Persistent
 
Life & Work of Dr. Vinton Cerf and Dr. Robert Kahn | Turing100@Persistent
Life & Work of Dr. Vinton Cerf and Dr. Robert Kahn | Turing100@PersistentLife & Work of Dr. Vinton Cerf and Dr. Robert Kahn | Turing100@Persistent
Life & Work of Dr. Vinton Cerf and Dr. Robert Kahn | Turing100@Persistent
 
Net Neutrality | Turing100@Persistent Systems
Net Neutrality | Turing100@Persistent SystemsNet Neutrality | Turing100@Persistent Systems
Net Neutrality | Turing100@Persistent Systems
 
Alan Turing Scientist Unlimited | Turing100@Persistent Systems
Alan Turing Scientist Unlimited | Turing100@Persistent SystemsAlan Turing Scientist Unlimited | Turing100@Persistent Systems
Alan Turing Scientist Unlimited | Turing100@Persistent Systems
 
Life and work of E.F. (Ted) Codd | Turing100@Persistent
Life and work of E.F. (Ted) Codd | Turing100@PersistentLife and work of E.F. (Ted) Codd | Turing100@Persistent
Life and work of E.F. (Ted) Codd | Turing100@Persistent
 
Alan Turing Centenary @ Persistent Systems
Alan Turing Centenary @ Persistent SystemsAlan Turing Centenary @ Persistent Systems
Alan Turing Centenary @ Persistent Systems
 

Kürzlich hochgeladen

Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Kürzlich hochgeladen (20)

Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

Early History of Fortran: The Making of a Wonder | Turing100@Persistent

  • 1. Early History of FORTRAN: The Making of a Wonder Uday Khedker (www.cse.iitb.ac.in/˜uday) Department of Computer Science and Engineering, Indian Institute of Technology, Bombay February 2013
  • 2. Persistent, Pune History of FORTRAN: Outline 1/42 Outline • Computing Before FORTRAN • The Creation of FORTRAN • FORTRAN I: The Language • FORTRAN I: The Compiler • Conclusions Feb 2013 Uday Khedker, IIT Bombay
  • 4. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 2/42 Pioneers of Programming Languages (Knuth-Pardo, 1976) Zuse (Plankalkul, 1945) Mauchly et al. (Short Code, 1950) Curry (Composition, 1948) Burks (Intermediate PL, 1950) Rutishauser (1951) Goldstine/von Neumann (Flow Diagrams, 1946) Bohm (1951) Brooker (Mark I Autocode, 1954) Glennie (AUTOCODE, 1952) Kamynin/Liubimskii (P.P., 19654) Laning/Zierler (1953) Grems/Porter (Bacaic, 1955) Hopper et al. (A-2, 1953) Elsworth et al. (Kompiler 2, 1955) Ershov (P.P., 1955) Katz et al. (MATH-MATIC, 1956-1958) Blum (ADES, 1956) Hopper et al. (FLOW-MATIC, 1956-1958) Perlis et al. (IT, 1956) Bauer/Samelson (1956-1958) Feb 2013 Uday Khedker, IIT Bombay
  • 5. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 2/42 Pioneers of Programming Languages (Knuth-Pardo, 1976) Zuse (Plankalkul, 1945) Mauchly et al. (Short Code, 1950) Curry (Composition, 1948) Burks (Intermediate PL, 1950) Rutishauser (1951) Goldstine/von Neumann (Flow Diagrams, 1946) Bohm (1951) Brooker (Mark I Autocode, 1954) Glennie (AUTOCODE, 1952) Kamynin/Liubimskii (P.P., 19654) Laning/Zierler (1953) Grems/Porter (Bacaic, 1955) Hopper et al. (A-2, 1953) Elsworth et al. (Kompiler 2, 1955) Ershov (P.P., 1955) Katz et al. (MATH-MATIC, 1956-1958) Blum (ADES, 1956) Hopper et al. (FLOW-MATIC, 1956-1958) Perlis et al. (IT, 1956) Bauer/Samelson (1956-1958) Feb 2013 Uday Khedker, IIT Bombay
  • 6. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 2/42 Pioneers of Programming Languages (Knuth-Pardo, 1976) Zuse (Plankalkul, 1945) Mauchly et al. (Short Code, 1950) Curry (Composition, 1948) Burks (Intermediate PL, 1950) Rutishauser (1951) Goldstine/von Neumann (Flow Diagrams, 1946) Bohm (1951) Brooker (Mark I Autocode, 1954) Glennie (AUTOCODE, 1952) Kamynin/Liubimskii (P.P., 19654) Laning/Zierler (1953) Grems/Porter (Bacaic, 1955) Hopper et al. (A-2, 1953) Elsworth et al. (Kompiler 2, 1955) Ershov (P.P., 1955) Katz et al. (MATH-MATIC, 1956-1958) Blum (ADES, 1956) Hopper et al. (FLOW-MATIC, 1956-1958) Perlis et al. (IT, 1956) Bauer/Samelson (1956-1958) • Many efforts, and yet a breakthrough had to wait for Backus and his team • We need to go back into the history to understand why it was so Feb 2013 Uday Khedker, IIT Bombay
  • 7. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 3/42 Computing: Hand to Hand Combat with Machine (1) • Computing was a black art • Things available: The problem, the machine, the manual, and individual creativity • “Computers were pretty crazy things. They had very primitive instructions and extremely bizarre input-output facilities.” • Example: Selective Sequence Electronic Calculator (SSEC), 1948 - 1952 Store of 150 words, Vacuum tubes and electro-mechanical relays Feb 2013 Uday Khedker, IIT Bombay
  • 8. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 4/42 Computing: Hand to Hand Combat with Machine (2) • The story of paper tape − Punched paper tape glued to form a paper loop − Problem would appear and then disappear − Pattern repeated many times − Mobius strip (Image source: Wikipedia) • Debugging by the ear. When IBM 701 Defence Calculator arrived “How are we going to debug this enormous silent monster” Feb 2013 Uday Khedker, IIT Bombay
  • 9. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 5/42 Octal Humour • “Why cant programmers tell the difference between Christmas and New Years Eve? Because 25 in decimal is 31 in octal.” • “We programmed it in octal. Thinking I was still a mathematician, I taught myself to add, subtract, and multiply, and even divide in octal. I was really good, until the end of the month, and then my check book didn’t balance! It stayed out of balance for three months until I got hold of my brother who was a banker. After several evenings of work he informed me that at intervals I had subtracted in octal. And I faced the major problem of living in two different worlds.” “That may have been one of the things that sent me to get rid of octal as far as possible.” − Grace Hopper Feb 2013 Uday Khedker, IIT Bombay
  • 10. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 6/42 The Priesthood of Computing • “Programming in the America of the 1950s had a vital frontier enthusiasm virtually untainted by either the scholarship or the stuffiness of academia.” • “Programmer inventors of the early 1950s were too impatient to hoard an idea until it could be fully developed and a paper written. They wanted to convince others. Action, progress, and outdoing one’s rivals were more important than mere authorship of a paper.” • “An idea was the property of anyone who could use it and the scholarly practice of noting references to sources and related work was almost universally unknown or unpractised.” Feb 2013 Uday Khedker, IIT Bombay
  • 11. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 7/42 Obstacles in Creation of a High Level Language • Priesthood wanted to preserve the order “Priesthood wanted and got simple mechanical aids for the clerical drudgery which burdened them, but they regarded with hostility and derision more ambitious plans to make programming accessible to a larger population. To them, it was obviously a foolish and arrogant dream to imagine that any mechanical process could possibly perform the mysterious feats of invention required to write an efficient program.” Feb 2013 Uday Khedker, IIT Bombay
  • 12. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 7/42 Obstacles in Creation of a High Level Language • Priesthood wanted to preserve the order “Priesthood wanted and got simple mechanical aids for the clerical drudgery which burdened them, but they regarded with hostility and derision more ambitious plans to make programming accessible to a larger population. To them, it was obviously a foolish and arrogant dream to imagine that any mechanical process could possibly perform the mysterious feats of invention required to write an efficient program.” • There also were purveyors of snake oil “The energetic public relations efforts of some visionaries spread the word that their “automatic programming” systems had almost human abilities to understand the language and needs of the user; whereas closer inspection of these same systems would often reveal a complex, exception-ridden performer of clerical tasks which was both difficult to use and inefficient.” Feb 2013 Uday Khedker, IIT Bombay
  • 13. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 8/42 The A2 Compiler • Programmers had a library of subroutine • They needed to copy the subroutine on the coding sheets by hand and change addresses manually • Grace Hopper added a “call” operation whereby ◮ the machine would copy the code ◮ and update the addresses • Inspiration for implementing a forward jump: A game of basketball! • The name “compiler” was used because it put together a set of subroutines Feb 2013 Uday Khedker, IIT Bombay
  • 14. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 9/42 The “Real” High Level Languages • Conrad Zuse’s Plankalkul developed in a small village in Germany (1945) ◮ “Program Calculus” ◮ Only design, no implementation (Computers were destroyed in world war II) • Laning and Zierler’s language for the WHIRLWIND at MIT (1953) ◮ Fully algebraic in terms of supporting expressions ◮ Very inefficient Feb 2013 Uday Khedker, IIT Bombay
  • 15. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 10/42 Challenges for Creation of High Level Languages • The tyranny of OR Expressiveness OR Efficiency • Most time was spent in floating point subroutines ◮ Not much attention was paid to address calculation, good use of registers Feb 2013 Uday Khedker, IIT Bombay
  • 16. Persistent, Pune History of FORTRAN: Computing Before FORTRAN 10/42 Challenges for Creation of High Level Languages • The tyranny of OR Expressiveness OR Efficiency • Most time was spent in floating point subroutines ◮ Not much attention was paid to address calculation, good use of registers • IBM 704 directly supported fast floating point operations ◮ Clumsy treatment of loops, indexing, references to registers could not remain hidden ◮ Ignoring the above led to rejection of “automatic programming” Feb 2013 Uday Khedker, IIT Bombay
  • 17. Part 2 The Creation of FORTRAN
  • 18. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 11/42 The Genius of John Backus He made the following important observations • The main reason of inefficiency is clumsy treatment of loops and array address computation If that can be handled, things may be far different • The possibility made a lot of economic sense • Language implementation was far more critical than language design Feb 2013 Uday Khedker, IIT Bombay
  • 19. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 11/42 The Genius of John Backus He made the following important observations • The main reason of inefficiency is clumsy treatment of loops and array address computation If that can be handled, things may be far different • The possibility made a lot of economic sense • Language implementation was far more critical than language design The “TRAN” in “FORTRAN” conveys the spirit Feb 2013 Uday Khedker, IIT Bombay
  • 20. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 12/42 The Genesis of FORTRAN • Motivation: Programming and debugging costs already exceeded the cost of running a program, and as computers became faster and cheaper this imbalance would become more and more intolerable • Goals: Can a machine translate ◮ a sufficiently rich mathematical language into ◮ a sufficiently economical program at ◮ a sufficiently low cost to make the whole affair feasible? The generated programs needed to be comparable to hand coded programs in efficiency Feb 2013 Uday Khedker, IIT Bombay
  • 21. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 13/42 The Design Philosophy • About Language Design ◮ “We simply made up the language as we went along. We did not regard language design as a difficult problem, merely a simple prelude to the real problem: designing a compiler that could produce efficient programs.” ◮ “We had notions of assignment statements, subscribed variables, and the DO statement as the main features. Whatever else was needed emerged as we tried to build a way of programming on these basic ideas.” Feb 2013 Uday Khedker, IIT Bombay
  • 22. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 13/42 The Design Philosophy • About Language Design ◮ “We simply made up the language as we went along. We did not regard language design as a difficult problem, merely a simple prelude to the real problem: designing a compiler that could produce efficient programs.” ◮ “We had notions of assignment statements, subscribed variables, and the DO statement as the main features. Whatever else was needed emerged as we tried to build a way of programming on these basic ideas.” • About Compiler Design ◮ Study the inner loops to find the most efficient method of execution ◮ Find how the efficient code can be generated for sample statements ◮ Generalize the observations by removing specificities and exceptions Feb 2013 Uday Khedker, IIT Bombay
  • 23. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 13/42 The Design Philosophy • About Language Design ◮ “We simply made up the language as we went along. We did not regard language design as a difficult problem, merely a simple prelude to the real problem: designing a compiler that could produce efficient programs.” ◮ “We had notions of assignment statements, subscribed variables, and the DO statement as the main features. Whatever else was needed emerged as we tried to build a way of programming on these basic ideas.” • About Compiler Design ◮ Study the inner loops to find the most efficient method of execution ◮ Find how the efficient code can be generated for sample statements ◮ Generalize the observations by removing specificities and exceptions Effectively, they raised the level of computing from number processing to processing text that processed numbers Feb 2013 Uday Khedker, IIT Bombay
  • 24. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 14/42 The FORTRAN Project • Approved in Jan 1954, system delivered in April 1957 • Supportive management • Young, energetic, enthusiastic, and inexperienced team ◮ Great team spirit and synergy Feb 2013 Uday Khedker, IIT Bombay
  • 25. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 14/42 The FORTRAN Project • Approved in Jan 1954, system delivered in April 1957 • Supportive management • Young, energetic, enthusiastic, and inexperienced team ◮ Great team spirit and synergy “The best part was the uncertainty and excitement of waiting to see what kinds of object code all that work was finally going to produce.” Feb 2013 Uday Khedker, IIT Bombay
  • 26. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 14/42 The FORTRAN Project • Approved in Jan 1954, system delivered in April 1957 • Supportive management • Young, energetic, enthusiastic, and inexperienced team ◮ Great team spirit and synergy “The best part was the uncertainty and excitement of waiting to see what kinds of object code all that work was finally going to produce.” “It was great sport in those days to scan the object program and either marvel at the translator or question its sanity!” Feb 2013 Uday Khedker, IIT Bombay
  • 27. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 14/42 The FORTRAN Project • Approved in Jan 1954, system delivered in April 1957 • Supportive management • Young, energetic, enthusiastic, and inexperienced team ◮ Great team spirit and synergy “The best part was the uncertainty and excitement of waiting to see what kinds of object code all that work was finally going to produce.” “It was great sport in those days to scan the object program and either marvel at the translator or question its sanity!” ◮ Helped in ignoring the doubters and overcome discouragement and despair Feb 2013 Uday Khedker, IIT Bombay
  • 28. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 15/42 FORTRAN Claims • “The amount of knowledge necessary to utilise the 704 effectively by means of FORTRAN is far less than the knowledge required to make effective use of the 704 by direct coding. It will be possible to make the full capabilities of the 704 available to a much wider range of people than would otherwise be possible without expensive and time-consuming training programs.” Feb 2013 Uday Khedker, IIT Bombay
  • 29. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 15/42 FORTRAN Claims • “The amount of knowledge necessary to utilise the 704 effectively by means of FORTRAN is far less than the knowledge required to make effective use of the 704 by direct coding. It will be possible to make the full capabilities of the 704 available to a much wider range of people than would otherwise be possible without expensive and time-consuming training programs.” • “FORTRAN may apply complex, lengthy techniques in coding a problem which the human coder would have neither the time nor inclination to derive or apply.” Feb 2013 Uday Khedker, IIT Bombay
  • 30. Persistent, Pune History of FORTRAN: The Creation of FORTRAN 15/42 FORTRAN Claims • “The amount of knowledge necessary to utilise the 704 effectively by means of FORTRAN is far less than the knowledge required to make effective use of the 704 by direct coding. It will be possible to make the full capabilities of the 704 available to a much wider range of people than would otherwise be possible without expensive and time-consuming training programs.” • “FORTRAN may apply complex, lengthy techniques in coding a problem which the human coder would have neither the time nor inclination to derive or apply.” • “FORTRAN will virtually eliminate coding and debugging.” Feb 2013 Uday Khedker, IIT Bombay
  • 31. Part 3 FORTRAN I: The Language
  • 32. Persistent, Pune History of FORTRAN: The Language 16/42 The Very First Question in FORTRAN FAQ In the IBM Customer Engineering Manual of Instructions Q. Why is Fortran used and what are its advantages over the SHARE assembly program ? A. Fortran allows a programmer to write in relatively familiar and simple language the steps of a procedure to be carried out by the 704. The programmer need not know 704 language, and is relieved of clerical work; human error is minimized. The programmer writes in symbolic machine language in SHARE. Fortran translates, compiles, and assembles, whereas a SHARE assembly program essentially just assembles, although subroutines can be compiled from the library tape of SHARE. Feb 2013 Uday Khedker, IIT Bombay
  • 33. Persistent, Pune History of FORTRAN: The Language 17/42 The Language FORTRAN • Scalar and array variables • Integer and floating point values • Expressions • Assignment statements • DO loops • Functions • Other statements: READ, PRINT, FORMAT, IF and GOTO • Comments Feb 2013 Uday Khedker, IIT Bombay
  • 34. Persistent, Pune History of FORTRAN: The Language 18/42 FORTRAN Examples (1) √ −B + B 2 − 4AC Formula root = 2A Defining ROOTF(A,B,C) = (-B + SQRTF(B**2 - 4*A*C))/(2.0*A) Function FORTRAN ROOT = (-B + SQRTF(B**2 - 4*A*C))/(2.0*A) Statement Feb 2013 Uday Khedker, IIT Bombay
  • 35. Persistent, Pune History of FORTRAN: The Language 19/42 FORTRAN Examples (2) Problem: P(ai +bi ) Set Qmax equal to the largest quantity P(ai −bi ) for some i between 1 and 1000 where P(x) = c0 + c1 x + c2 x 2 + c3 x 3 FORTRAN Program 1 POLYF(X) = C0+X*(C1+X*(C2+X*C3)) 2 DIMENSION A(1000), B(1000) 3 QMAX = -1.0E20 4 Do 5 I = 1, 1000 5 QMAX = MAXF(QMAX, POLYF(A(I) + B(I))/POLYF(A(I) - B(I))) 6 STOP Feb 2013 Uday Khedker, IIT Bombay
  • 36. Persistent, Pune History of FORTRAN: The Language 20/42 Limitations of FORTRAN I Language • Implicit types based on the first letter • No declarations required • No reserved words • Simplistic functions • No subprograms, no recursion • No spaces • DO loops with limited nesting depth of 3 Feb 2013 Uday Khedker, IIT Bombay
  • 37. Persistent, Pune History of FORTRAN: The Language 21/42 Minor Errors Could be Rather Expensive • The first American Venus probe was lost because of a computer problem • A programer replaced a comma by a dot Should have been Was DO 3 I = 1, 3 DO 3 I = 1. 3 • What was essentially a DO loop header got treated as an assignment statement DO3I = 1.3 by the compiler Feb 2013 Uday Khedker, IIT Bombay
  • 38. Part 4 FORTRAN I: The Compiler
  • 39. Persistent, Pune History of FORTRAN: The Compiler 22/42 Contributions of FORTRAN I Compiler • Phase-wise division of work • Optimizations: ◮ Common subexpressions elimination, ◮ Array address optimization in loops (a form of strength reduction and induction variable elimination) ◮ Register allocation using hierarchical regions (optimal under number of loads for straight line code) • Basic blocks and execution frequency analysis • Distinction between pseudo registers and hard registers Feb 2013 Uday Khedker, IIT Bombay
  • 40. Persistent, Pune History of FORTRAN: The Compiler 23/42 Phases of FORTRAN I Compiler Input program • Input may be on tape or cards Section 1 • Transferred to tape 2 • Statements are classified and Internal Section 2 Formula Number (IFN) is assigned • Arithmetic statements are translated • Output is recorded on COMPAIL file on tape 2 (Complete Arithmetic, Input-Output, Logical) • Other statements are stored in buffer areas (if it is full, the information is transferred to tape 4) Feb 2013 Uday Khedker, IIT Bombay
  • 41. Persistent, Pune History of FORTRAN: The Compiler 23/42 Phases of FORTRAN I Compiler Input program Section 1 • DO loops are translated Section 2 • Arithmetic statements involving subscripts and induction variables are Section 3 translated • Unlimited index registers are assumed (in place of actual 3 index registers) • Output is recorded on COMPADO file on tape 2 Feb 2013 Uday Khedker, IIT Bombay
  • 42. Persistent, Pune History of FORTRAN: The Compiler 23/42 Phases of FORTRAN I Compiler Input program Section 1 Section 2 • COMPAIL and COMPDO files are Section 3 merged into a single file • Rest of the statements are translated Section 4 • Translation is complete except that actual index registers are not used Feb 2013 Uday Khedker, IIT Bombay
  • 43. Persistent, Pune History of FORTRAN: The Compiler 23/42 Phases of FORTRAN I Compiler Input program • Basic blocks are created and flow Section 1 analysis is performed Section 2 • Execution frequencies are computed using simulated execution Section 3 • The program may be executed several hundred times Section 4 • Outcome of conditional control transfers is determined by Section 5 ◮ a random number generator suitably weighted according to ◮ the branch frequency specification in the program Feb 2013 Uday Khedker, IIT Bombay
  • 44. Persistent, Pune History of FORTRAN: The Compiler 23/42 Phases of FORTRAN I Compiler Input program Section 1 • Pseudo registers are replaced by hard index register Section 2 • Results of flow analysis of section 5 are used Section 3 • Hierarchical regions are formed and inner most regions are assigned the Section 4 registers first • “Distance-to-next-use” policy is used Section 5 to evict registers if required • Now the translation to assembly is Section 6 complete Feb 2013 Uday Khedker, IIT Bombay
  • 45. Persistent, Pune History of FORTRAN: The Compiler 23/42 Phases of FORTRAN I Compiler Input program Section 1 Section 2 • The program is assembled to produce the executable Section 3 • It may be created on the tape or on cards Section 4 • A listing of the program can also be generated Section 5 Source statements and corresponding executable statements Section 6 Output program Feb 2013 Uday Khedker, IIT Bombay
  • 46. Persistent, Pune History of FORTRAN: The Compiler 24/42 Expressions in the Programs • Other “algebraic” compilers needed parenthesis for expressions • No concept for parsing using grammars Expression Expression Tree Required Syntax + a ∗ a + b ∗ ∗c ∗ (d + e) (a) + (b ∗ ∗(c ∗ (d + e))) ∗∗ + b c d e Feb 2013 Uday Khedker, IIT Bombay
  • 47. Persistent, Pune History of FORTRAN: The Compiler 25/42 FORTRAN Rules for Expressions 1. Any fixed point (floating point) constant, variable, or subscripted variable is an expression of the same mode. Thus 3 and I are fixed point expressions, and ALPHA and A(I , J, K ) are floating point expressions. 2. If SOMEF is some function of n variables, and if E , F , . . . , H are a set of n expressions of the correct modes for SOMEF , then SOMEF (E , F , . . . , H) is an expression of the same mode as SOMEF. 3. If E is an expression, and if its first character is not “+” or “−”, then +E and −E are expressions of the same mode as E . Thus −A is an expression, but − − A is not. 4. If E is an expression, then (E ) is an expression of the same mode as E . Thus (A), ((A)), (((A))), etc. are expressions. 5. If E and F are expressions of the same mode, and if the first character of F is not + or −, then E + F , E − F , E ∗ F , E /F are expressions of the same mode. Feb 2013 Uday Khedker, IIT Bombay
  • 48. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” Feb 2013 Uday Khedker, IIT Bombay
  • 49. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” • Our expression becomes fully parenthesised by application of this rule. (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E ))))))) Feb 2013 Uday Khedker, IIT Bombay
  • 50. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” • Our expression becomes fully parenthesised by application of this rule. (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E ))))))) Feb 2013 Uday Khedker, IIT Bombay
  • 51. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” • Our expression becomes fully parenthesised by application of this rule. (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E ))))))) Feb 2013 Uday Khedker, IIT Bombay
  • 52. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” • Our expression becomes fully parenthesised by application of this rule. (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E ))))))) Feb 2013 Uday Khedker, IIT Bombay
  • 53. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” • Our expression becomes fully parenthesised by application of this rule. (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E ))))))) Feb 2013 Uday Khedker, IIT Bombay
  • 54. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” • Our expression becomes fully parenthesised by application of this rule. (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E ))))))) Feb 2013 Uday Khedker, IIT Bombay
  • 55. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” • Our expression becomes fully parenthesised by application of this rule. (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E ))))))) Feb 2013 Uday Khedker, IIT Bombay
  • 56. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” • Our expression becomes fully parenthesised by application of this rule. (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E ))))))) Feb 2013 Uday Khedker, IIT Bombay
  • 57. Persistent, Pune History of FORTRAN: The Compiler 26/42 FORTRAN Expression Handling (1) • Conventional precedences were used and parenthesis were not required. • Simple rule of reconstructing parenthesised expressions: Assuming three levels of precedences of “+”, “∗”, and “∗∗” ◮ Add “(((” in the beginning of the expression (and hence before every “(” in the expression) ◮ Add “)))” at the end of the expression (and hence after every “)” in the expression) ◮ Replace every “+” by “))) + (((” ◮ Replace every “∗” by “)) + ((” ◮ Replace every “∗∗” by “) + (” • Our expression becomes fully parenthesised by application of this rule. (((A))) + (((B) ∗ ∗(C )) ∗ ((((((D))) + (((E ))))))) (The rules can be applied in a single left-to-right scan of the expression) Feb 2013 Uday Khedker, IIT Bombay
  • 58. Persistent, Pune History of FORTRAN: The Compiler 27/42 FORTRAN Expression Handling (2) • Observation by Barnie Galler ◮ For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45! Feb 2013 Uday Khedker, IIT Bombay
  • 59. Persistent, Pune History of FORTRAN: The Compiler 27/42 FORTRAN Expression Handling (2) • Observation by Barnie Galler ◮ For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45! ◮ “/” had a higher precedence and 9/2 is 4 in integer arithmetic Feb 2013 Uday Khedker, IIT Bombay
  • 60. Persistent, Pune History of FORTRAN: The Compiler 27/42 FORTRAN Expression Handling (2) • Observation by Barnie Galler ◮ For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45! ◮ “/” had a higher precedence and 9/2 is 4 in integer arithmetic • Response from IBM “It is too complicated to change the compiler so we will fix the manual” Feb 2013 Uday Khedker, IIT Bombay
  • 61. Persistent, Pune History of FORTRAN: The Compiler 27/42 FORTRAN Expression Handling (2) • Observation by Barnie Galler ◮ For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45! ◮ “/” had a higher precedence and 9/2 is 4 in integer arithmetic • Response from IBM “It is too complicated to change the compiler so we will fix the manual” • New manual had the following statement: “Please be warned that mathematical equivalence is not the same as computational equivalence” Feb 2013 Uday Khedker, IIT Bombay
  • 62. Persistent, Pune History of FORTRAN: The Compiler 27/42 FORTRAN Expression Handling (2) • Observation by Barnie Galler ◮ For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45! ◮ “/” had a higher precedence and 9/2 is 4 in integer arithmetic • Response from IBM “It is too complicated to change the compiler so we will fix the manual” • New manual had the following statement: “Please be warned that mathematical equivalence is not the same as computational equivalence” • How about the same precedence for “/” and “∗” and left associativity? Feb 2013 Uday Khedker, IIT Bombay
  • 63. Persistent, Pune History of FORTRAN: The Compiler 27/42 FORTRAN Expression Handling (2) • Observation by Barnie Galler ◮ For n = 10, the expression n ∗ (n − 1)/2 computed 40 instead of 45! ◮ “/” had a higher precedence and 9/2 is 4 in integer arithmetic • Response from IBM “It is too complicated to change the compiler so we will fix the manual” • New manual had the following statement: “Please be warned that mathematical equivalence is not the same as computational equivalence” • How about the same precedence for “/” and “∗” and left associativity? ◮ n/2 ∗ (n − 1) ◮ n ∗ (n − 1) ∗ (1/2) Feb 2013 Uday Khedker, IIT Bombay
  • 64. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program DIMENSION A (10,lO) DIMENSION B (10,lO) DO 1 J = 1, 10 DO 1 I = 1, 10 1 A(I,J) = B(I,J) Feb 2013 Uday Khedker, IIT Bombay
  • 65. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 66. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 67. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 68. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 69. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 70. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 71. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 72. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 73. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 74. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 75. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 76. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 77. Persistent, Pune History of FORTRAN: The Compiler 28/42 A FORTRAN Program for Array Copy Program A simplified view for 4x3 fragments B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) DIMENSION A (10,lO) B(3,1) B(3,2) B(3,3) DIMENSION B (10,lO) B(4,1) B(4,2) B(4,3) DO 1 J = 1, 10 DO 1 I = 1, 10 A(1,1) A(1,2) A(1,3) 1 A(I,J) = B(I,J) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) A(4,1) A(4,2) A(4,3) Feb 2013 Uday Khedker, IIT Bombay
  • 78. Persistent, Pune History of FORTRAN: The Compiler 29/42 Array Address Calculation Cell (i, j) Its address j x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x i x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x Feb 2013 Uday Khedker, IIT Bombay
  • 79. Persistent, Pune History of FORTRAN: The Compiler 29/42 Array Address Calculation Cell (i, j) Its address j x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x i x x x x x x x x x x x x x x x x x x x x 10 Base + (j − 1) ∗ 10 + i − 1 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x Feb 2013 Uday Khedker, IIT Bombay
  • 80. Persistent, Pune History of FORTRAN: The Compiler 29/42 Array Address Calculation Cell (i, j) Its address j x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x i x x x x x x x x x x x x x x x x x x x x 10 Base + (j − 1) ∗ 10 + i − 1 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x An additional complication: In FORTRAN, arrays are stored backwards and index registers are subtracted from the base Feb 2013 Uday Khedker, IIT Bombay
  • 81. Persistent, Pune History of FORTRAN: The Compiler 30/42 Output of FORTRAN I Compiler DIMENSION A (10,lO) DIMENSION B (10,lO) Source Program DO 1 J = 1, 10 DO 1 I = 1, 10 1 A(I,J) = B(I,J) Statement Explanation LXD ONE, 1 Ixr1 = 1 Object LOOP CLA B+1, 1 Acc = ∗(B + 1) − Ixr1 Program ST0 A+1, 1 ∗(A + 1 − Ixr1) = Acc TXI * +1, 1, 1 Ixr1 = Ixr1 + 1, jump ahead by 1 TXL LOOP,l ,100 if (Ixr1 ≤ 100), goto LOOP Feb 2013 Uday Khedker, IIT Bombay
  • 82. Persistent, Pune History of FORTRAN: The Compiler 30/42 Output of FORTRAN I Compiler DIMENSION A (10,lO) DIMENSION B (10,lO) Source • Address calculation? Program DO 1 J = 1, 10 • Nested loops? DO 1 I = 1, 10 1 A(I,J) = B(I,J) Statement Explanation LXD ONE, 1 Ixr1 = 1 Object LOOP CLA B+1, 1 Acc = ∗(B + 1) − Ixr1 Program ST0 A+1, 1 ∗(A + 1 − Ixr1) = Acc TXI * +1, 1, 1 Ixr1 = Ixr1 + 1, jump ahead by 1 TXL LOOP,l ,100 if (Ixr1 ≤ 100), goto LOOP Feb 2013 Uday Khedker, IIT Bombay
  • 83. Persistent, Pune History of FORTRAN: The Compiler 31/42 Compiling Array Copy Program: Control Flow Graph i =j =1 j=0 DIMENSION A (10,lO) DIMENSION B (10,lO) t1 = (j − 1) ∗ 10 + i − 1 t2 = ∗(B − t1 ) DO 1 J = 1, 10 ∗(A − t1) = t2 DO 1 I = 1, 10 i =i +1 1 A(I,J) = B(I,J) (i > 10) (i ≤ 10) j =j +1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 84. Persistent, Pune History of FORTRAN: The Compiler 32/42 Compiling Array Copy Program: Strength Reduction (1) i =j =1 Observations about the inner loop j=0 t1 = (j − 1) ∗ 10 + i − 1 t2 = ∗(B − t1 ) ∗(A − t1) = t2 i =i +1 (i > 10) (i ≤ 10) j =j +1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 85. Persistent, Pune History of FORTRAN: The Compiler 32/42 Compiling Array Copy Program: Strength Reduction (1) i =j =1 Observations about the inner loop j=0 • Whenever i increments by 1, t1 also increments by 1 t1 = (j − 1) ∗ 10 + i − 1 t2 = ∗(B − t1 ) ∗(A − t1) = t2 i =i +1 (i > 10) (i ≤ 10) j =j +1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 86. Persistent, Pune History of FORTRAN: The Compiler 32/42 Compiling Array Copy Program: Strength Reduction (1) i =j =1 Observations about the inner loop j=0 • Whenever i increments by 1, t1 also increments by 1 t1 = (j − 1) ∗ 10 + i − 1 • We can initialise t1 outside of t2 = ∗(B − t1 ) the inner loop ∗(A − t1) = t2 t1 = (j − 1) ∗ 10 + i − 1 i =i +1 = (j − 1) ∗ 10 (because i is 1) (i > 10) (i ≤ 10) and increment it within the loop j =j +1 t1 = t1 + 1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 87. Persistent, Pune History of FORTRAN: The Compiler 33/42 Compiling Array Copy Program: Strength Reduction (2) i =j =1 t1 = (j − 1) ∗ 10 t2 = ∗(B − t1 ) ∗(A − t1) = t2 i =i +1 t1 = t1 + 1 (i > 10) (i ≤ 10) j =j +1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 88. Persistent, Pune History of FORTRAN: The Compiler 33/42 Compiling Array Copy Program: Strength Reduction (2) i =j =1 Observations about the inner loop • Whenever j increments by 1, t1 t1 = (j − 1) ∗ 10 increments by 10 t2 = ∗(B − t1 ) ∗(A − t1) = t2 i =i +1 t1 = t1 + 1 (i > 10) (i ≤ 10) j =j +1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 89. Persistent, Pune History of FORTRAN: The Compiler 33/42 Compiling Array Copy Program: Strength Reduction (2) i =j =1 Observations about the inner loop • Whenever j increments by 1, t1 t1 = (j − 1) ∗ 10 increments by 10 • We can initialise t1 outside of t2 = ∗(B − t1 ) the outer loop ∗(A − t1) = t2 t1 = (j − 1) ∗ 10 i =i +1 = 0 t1 = t1 + 1 (because j is 1) and increment it within the loop (i > 10) (i ≤ 10) t1 = t1 + 10 j =j +1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 90. Persistent, Pune History of FORTRAN: The Compiler 33/42 Compiling Array Copy Program: Strength Reduction (2) i =j =1 Observations about the inner loop • Whenever j increments by 1, t1 t1 = (j − 1) ∗ 10 increments by 10 • We can initialise t1 outside of t2 = ∗(B − t1 ) the outer loop ∗(A − t1) = t2 t1 = (j − 1) ∗ 10 i =i +1 = 0 t1 = t1 + 1 (because j is 1) and increment it within the loop (i > 10) (i ≤ 10) t1 = t1 + 10 j =j +1 • However, the inner loop already increments t1 by 10. (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 91. Persistent, Pune History of FORTRAN: The Compiler 34/42 Compiling Array Copy Program: Flattening the Loops i =j =1 t1 = 0 i = i = 0 t2 = ∗(B − t1 ) ∗(A − t1) = t2 i =i +1 t1 = t1 + 1 (i > 10) (i ≤ 10) j =j +1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 92. Persistent, Pune History of FORTRAN: The Compiler 34/42 Compiling Array Copy Program: Flattening the Loops i =j =1 t1 = 0 • The only activity in the outer i = i = 0 loop now is to control the loop iterations No other computation t2 = ∗(B − t1 ) ∗(A − t1) = t2 i =i +1 t1 = t1 + 1 (i > 10) (i ≤ 10) j =j +1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 93. Persistent, Pune History of FORTRAN: The Compiler 34/42 Compiling Array Copy Program: Flattening the Loops i =j =1 t1 = 0 • The only activity in the outer i = i = 0 loop now is to control the loop iterations No other computation t2 = ∗(B − t1 ) • We can combine the loops into ∗(A − t1) = t2 a single loop by taking a i =i +1 product of the two loop bounds t1 = t1 + 1 • Variables i and j would not be (i > 10) (i ≤ 10) required j =j +1 (j > 10) (j ≤ 10) Feb 2013 Uday Khedker, IIT Bombay
  • 94. Persistent, Pune History of FORTRAN: The Compiler 35/42 Compiling Array Copy Program: The Final Program Control flow graph (CFG) Original Assembly t1 = 0 t2 = ∗(B − t1 ) ∗(A − t1) = t2 t1 = t1 + 1 (t1 > 100) (t1 ≤ 100) j =j +1 Feb 2013 Uday Khedker, IIT Bombay
  • 95. Persistent, Pune History of FORTRAN: The Compiler 35/42 Compiling Array Copy Program: The Final Program Control flow graph (CFG) Original Assembly t1 = 0 LXD ONE, 1 LOOP CLA B+1, 1 ST0 A+1, 1 t2 = ∗(B − t1 ) TXI * +1, 1, 1 ∗(A − t1) = t2 TXL LOOP,l ,100 t1 = t1 + 1 (t1 > 100) (t1 ≤ 100) j =j +1 Feb 2013 Uday Khedker, IIT Bombay
  • 96. Persistent, Pune History of FORTRAN: The Compiler 35/42 Compiling Array Copy Program: The Final Program Control flow graph (CFG) Original Assembly t1 = 0 LXD ONE, 1 LOOP CLA B+1, 1 ST0 A+1, 1 t2 = ∗(B − t1 ) TXI * +1, 1, 1 ∗(A − t1) = t2 TXL LOOP,l ,100 t1 = t1 + 1 Minor differences (t1 > 100) (t1 ≤ 100) CFG Assembly Base address B B +1 j =j +1 Initial value of t1 0 1 Feb 2013 Uday Khedker, IIT Bombay
  • 97. Persistent, Pune History of FORTRAN: The Compiler 36/42 Compiling Array Copy Program Using GCC 4.7.2 (gfortran) .L5: leal 408(%esp), %ebx movl $1, %eax leal 808(%esp), %ecx addl %esi, %ebx addl %esi, %ecx • Integer is now 4 bytes .p2align 4,,7 .p2align 3 .L4: movl -44(%ecx,%eax,4), %edx movl %edx, -44(%ebx,%eax,4) addl $1, %eax cmpl $11, %eax jne .L4 addl $40, %esi cmpl $400, %esi jne .L5 Feb 2013 Uday Khedker, IIT Bombay
  • 98. Persistent, Pune History of FORTRAN: The Compiler 36/42 Compiling Array Copy Program Using GCC 4.7.2 (gfortran) .L5: leal 408(%esp), %ebx movl $1, %eax leal 808(%esp), %ecx addl %esi, %ebx addl %esi, %ecx • Integer is now 4 bytes .p2align 4,,7 .p2align 3 • Efficient address .L4: calculation with movl -44(%ecx,%eax,4), %edx strength reduction movl %edx, -44(%ebx,%eax,4) addl $1, %eax cmpl $11, %eax jne .L4 addl $40, %esi cmpl $400, %esi jne .L5 Feb 2013 Uday Khedker, IIT Bombay
  • 99. Persistent, Pune History of FORTRAN: The Compiler 36/42 Compiling Array Copy Program Using GCC 4.7.2 (gfortran) .L5: leal 408(%esp), %ebx movl $1, %eax leal 808(%esp), %ecx addl %esi, %ebx addl %esi, %ecx • Integer is now 4 bytes .p2align 4,,7 .p2align 3 • Efficient address .L4: calculation with movl -44(%ecx,%eax,4), %edx strength reduction movl %edx, -44(%ebx,%eax,4) • Nested loops not addl $1, %eax flattened cmpl $11, %eax jne .L4 addl $40, %esi cmpl $400, %esi jne .L5 Feb 2013 Uday Khedker, IIT Bombay
  • 101. Persistent, Pune History of FORTRAN: Conclusions 37/42 So is There Nothing New in Compilers? • Languages have changed significantly • Processors have changed significantly • Problem sizes have changed significantly • Expectations have changed significantly • Analysis techniques have changed significantly Feb 2013 Uday Khedker, IIT Bombay
  • 102. Persistent, Pune History of FORTRAN: Conclusions 37/42 So is There Nothing New in Compilers? • Languages have changed significantly ◮ “The Worst thing that has happened to Computer Science is C because it brought pointers with it.” (Frances Allen, IITK, 2007) • Processors have changed significantly • Problem sizes have changed significantly • Expectations have changed significantly • Analysis techniques have changed significantly Feb 2013 Uday Khedker, IIT Bombay
  • 103. Persistent, Pune History of FORTRAN: Conclusions 37/42 So is There Nothing New in Compilers? • Languages have changed significantly ◮ “The Worst thing that has happened to Computer Science is C because it brought pointers with it.” (Frances Allen, IITK, 2007) • Processors have changed significantly ◮ GPUs, Many core processors, Embedded processors • Problem sizes have changed significantly • Expectations have changed significantly • Analysis techniques have changed significantly Feb 2013 Uday Khedker, IIT Bombay
  • 104. Persistent, Pune History of FORTRAN: Conclusions 37/42 So is There Nothing New in Compilers? • Languages have changed significantly ◮ “The Worst thing that has happened to Computer Science is C because it brought pointers with it.” (Frances Allen, IITK, 2007) • Processors have changed significantly ◮ GPUs, Many core processors, Embedded processors • Problem sizes have changed significantly ◮ Programs running in millions of lines of code • Expectations have changed significantly • Analysis techniques have changed significantly Feb 2013 Uday Khedker, IIT Bombay
  • 105. Persistent, Pune History of FORTRAN: Conclusions 37/42 So is There Nothing New in Compilers? • Languages have changed significantly ◮ “The Worst thing that has happened to Computer Science is C because it brought pointers with it.” (Frances Allen, IITK, 2007) • Processors have changed significantly ◮ GPUs, Many core processors, Embedded processors • Problem sizes have changed significantly ◮ Programs running in millions of lines of code • Expectations have changed significantly ◮ Interprocedural analysis and optimization, validation, reverse engineering, parallelization • Analysis techniques have changed significantly Feb 2013 Uday Khedker, IIT Bombay
  • 106. Persistent, Pune History of FORTRAN: Conclusions 37/42 So is There Nothing New in Compilers? • Languages have changed significantly ◮ “The Worst thing that has happened to Computer Science is C because it brought pointers with it.” (Frances Allen, IITK, 2007) • Processors have changed significantly ◮ GPUs, Many core processors, Embedded processors • Problem sizes have changed significantly ◮ Programs running in millions of lines of code • Expectations have changed significantly ◮ Interprocedural analysis and optimization, validation, reverse engineering, parallelization • Analysis techniques have changed significantly ◮ Parsing, Data flow analysis, Parallism Discovery, Heap Analysis Feb 2013 Uday Khedker, IIT Bombay
  • 107. Persistent, Pune History of FORTRAN: Conclusions 38/42 The Wonder Element of FORTRAN • Expressiveness Vs. Efficiency conflict ◮ Efficiency of programming and reach of programming, OR ◮ Efficincy of program execution and resource utilization • FORTRAN: The triumph of the genius of AND over the tyranny of OR Feb 2013 Uday Khedker, IIT Bombay
  • 108. Persistent, Pune History of FORTRAN: Conclusions 38/42 The Wonder Element of FORTRAN • Expressiveness Vs. Efficiency conflict ◮ Efficiency of programming and reach of programming, OR ◮ Efficincy of program execution and resource utilization • FORTRAN: The triumph of the genius of AND over the tyranny of OR • The software equivalent of a transistor Feb 2013 Uday Khedker, IIT Bombay
  • 109. Persistent, Pune History of FORTRAN: Conclusions 39/42 Why Things Happen the Way They Happen? • John Backus was the right person at the right time at the right place Feb 2013 Uday Khedker, IIT Bombay
  • 110. Persistent, Pune History of FORTRAN: Conclusions 39/42 Why Things Happen the Way They Happen? • John Backus was the right person at the right time at the right place ◮ He had the foresight to recognize the adjacent possible ◮ He was Bernard Shaw’s proverbial “unreasonable person” Feb 2013 Uday Khedker, IIT Bombay
  • 111. Persistent, Pune History of FORTRAN: Conclusions 39/42 Why Things Happen the Way They Happen? • John Backus was the right person at the right time at the right place ◮ He had the foresight to recognize the adjacent possible ◮ He was Bernard Shaw’s proverbial “unreasonable person” • The ideas of Charles Babbage were far beyond the adjacent possible Feb 2013 Uday Khedker, IIT Bombay
  • 112. Persistent, Pune History of FORTRAN: Conclusions 40/42 The Challenge Ahead • Expressiveness Vs. Efficiency conflict due to the problem of scale Feb 2013 Uday Khedker, IIT Bombay
  • 113. Persistent, Pune History of FORTRAN: Conclusions 40/42 The Challenge Ahead • Expressiveness Vs. Efficiency conflict due to the problem of scale • Have we reached the Von Neumann bottleneck? Feb 2013 Uday Khedker, IIT Bombay
  • 114. Persistent, Pune History of FORTRAN: Conclusions 40/42 The Challenge Ahead • Expressiveness Vs. Efficiency conflict due to the problem of scale • Have we reached the Von Neumann bottleneck? Backus argued so over three decades ago! Feb 2013 Uday Khedker, IIT Bombay
  • 115. Persistent, Pune History of FORTRAN: Conclusions 40/42 The Challenge Ahead • Expressiveness Vs. Efficiency conflict due to the problem of scale • Have we reached the Von Neumann bottleneck? Backus argued so over three decades ago! • The world awaits another John Backus to give us the next break-through! Feb 2013 Uday Khedker, IIT Bombay
  • 116. Persistent, Pune History of FORTRAN: Conclusions 41/42 Acknowledgements • Mostly based on the online documents made available by the Computer History Museum (www.computerhistory.org) ◮ FORTRAN examples by John Backus ◮ Array copy example by Frances Allen ◮ FORTRAN expression handling explanation by David Padua • Interesting discussions with Supratim Biswas Feb 2013 Uday Khedker, IIT Bombay
  • 117. Persistent, Pune History of FORTRAN: Conclusions 42/42 Last But Not the Least Thank You! Feb 2013 Uday Khedker, IIT Bombay