History of Compilers
What is a Compiler ?
A compiler is a special computer program which converts computer code written in one programming language into another language. Mainly compilers are used for translating source code in higher-level programming language to lower-level programming language i.e, Machine executable Code. The compiling process consist of basic translation mechanisms and error detection.
History of Compiler
Early, No high-level languages were available, so all programming was done in machine and assembly language. This was very Expensive in early days as most of the companies spent was for software development, due to the complexities of assembly and it is more productive for a programmer to use a higher level language for the programming as it can be used for different kinds of computers. Due to this problems, the need of Compilers in those days occurred.
In 1951, the first practical compiler was written by Corrado Bohm for his PhD thesis.
The first implemented compiler was written by Grace Murray Hopper, who also introduced the word “compiler” referring to her A-0 system which functioned as a loader or linker, not the modern notion of a compiler.
In 1952, Alick Glennie was developed the first Autocode and compiler in modern sense at the University of Manchester for the Mark 1 computer.
In 1953, John W. Backus and his team at IBM came up with the idea of “speed coding”, and developed the first interpreter. Unfortunately, this was times slower than programs written in assembly. In 1954, They released the reaserch paper titled “Preliminary Report, Specifications for the IBM Mathematical FORmula TRANslating System, FORTRAN.” In 1956, the first release of FORTRAN was of total 25,000 lines of assembly code. The code which taken 2–3 weeks now can write in 2 hours. They introduced the first commercially available compiler, in 1957, which took 18 person-years to create. By 1958 more than half of all software was written in FORTRAN.
In the year end of 1958, Friedrich L. Bauer, Hermann Bottenbruch, Heinz Rutishauser, and Klaus Samelson developed first ALGOL 58 compiler for the Z22 computer.
In 1960, an extended FORTRAN compiler, ALTAC, was available on the Philco 2000, it was the FORTRAN program that compiled on both IBM and Philco computer architecture.
The first developed cross-platform higher-level language was COBOL(Common Business Oriented Language). A COBOL program was compiled and executed on both the UNIVAC II and the RCA 501.
Self- hosting Compilers
These compilers are the compilers which written in same programming language it compiles.
i. NELIAC
In 1958, Naval Electronics Laboratory developed Navy Electronics Laboratory International ALGOL Compiler or NELIAC was a dialect and compiler implementation of the ALGOL 58 programming language. The main person behind this was Harry Husky.
ii. Lisp
In 1962, Tim Hart and Mike Levin at MIT written self-housting compiler for Lisp. Lisp is Locator/Identifier Separation Protocol. They wrote this compiler in Lisp and tested inside existing Lisp interpreter. They developed this compiler to level where it could compile its own source code.
iii. Forth
First appered in 1975.It is one of the self-hosting compiler. Like Lisp, Forth is an extensible programming language.It is the extensible programming language features of Forth and Lisp that enable them to generate new versions of themselves or port themselves to new environments. The bestselling 1986 computer game Starflight, from Electronic Arts, was written with a custom Forth.[
Parsers
Parser is a phase of a compiler in which token string is taken as input and with the help of grammar converts it into the corresponding parse tree. parser is also known as Syntax Analyser.The grammar on which parser works known as context free grammar.A context-free grammar provides a simple and precise mechanism for describing how programming language constructs are built from smaller blocks. The formalism of context-free grammars was developed in the mid-1950s by Noam Chomsky
1.LR Parser
A LR parser is a parser which reads input from left to right and produces a Rightmost derivation. It was invented by Donald Knuth in 1965 in a paper,“On the Translation of Languages from Left to Right”.
2.LL parser
A LL parser is a parser which reads input from left to right and produces Leftmot derivation.The idea of LL(1) grammars was introduced by Lewis and Stearns in 1968. LL(k) grammar parsed by recursive descent parser. The concept of recursive descent parsing was discussed in the January 1961 issue of CACM in separate papers by A.A. Grau and Edgar T. “Ned” Irons. Recursive descent was popularised by Niklaus Wirth with PL/0, an educational programming language used to teach compiler construction in the 1970s.
3.Earley Parser
In 1970, Jay Early invented Early parser. This parser is very effeciently parse the language.
Parser generators
A parser generator generates the lexical-analyser portion of a compiler which takes the formal grammar of any programming language and produce parser of that language.In 1960, Tony Brooker written first compiler-compiler which was used to create compilers at Atlas Computer University of Manchester.
1. XPL
XPL is a dialect of the PL/I programming language, used for the development of compilers for computer languages.. It was designed and implemented in 1967 by a team with William M. McKeeman, James J. Horning, and David B. Wortman at Stanford University and the University of California, Santa Cruz. It was first announced at the 1968 Fall Joint Computer Conference in San Francisco.
2. YACC
It is ancronym of “Yet another Compiler Compiler”. Yacc is a left to right parser generator loosly compiler-compiler. Yacc was originally written in the B programming language . Yacc was developed by Stephen C. Johnson in 1975 at AT&T for the Unix operating system.Yacc provides a general tool for imposing structure on the input to a computer program. The structure of YACC (.y) file looks like In other words, a full specification file looks like -
declarations
%%
rules
%%
programs
Just In Time Compiler
The earliest published JIT compiler is generally attributed to work on LISP by John McCarthy in 1960. Mainly used for Java compilation. On 30 March 2019 PHP announced that JIT was coming to PHP 8 in 2021.