Below is the genealogy of the common high-level programming languages. For a more general presentation of the history of computing check out The Virtual Museum of Computing.
1957 FORTRAN I---+ FLOW-MATIC 58 FORTRAN II +-ALGOL 58 | 59 | | | LISP 60 | ALGOL 60 APL COBOL-----+ | 61 | | | | | +-----------------+ | | 62 FORTRAN IV | | | +------------| | | CPL | 63 | | | +---SIMULA I | | | | | 64 | | +---+ | BASIC PL/I | | 65 +----------- | --- | -- | ---------+---+ | | 66 | ALGOL W | | | | | 67 | | | SIMULA 67 | | | 68 | | ALGOL 68 | | | | | | 69 | | | | | | BCPL | 70 | | | | | | B | 71 | PASCAL | | | | C + | 72 | | | | | | | | | | 73 | | +----------+| | | | | | | 74 | | || | | | | | | 75 | | || | +----------+ | | SCHEME 76 | | || | | | | | | 77 | MODULA-2 || | | | | | | 78 FORTRAN 77 | || | | | | | | 79 | | || | | | | | 80 | | || Smalltalk 80 | | | | 81 | | |+---+ | | | | 82 | | | | | | | | | 83 | | Ada 83 | | | | | | 84 | | | | | | | | COMMON LISP 85 | | | | | C++ +----------+ 86 | +-- + | | +----+ | +---------+ | 87 | | | | | | +------+ | | 88 | | Oberon | | Quick Basic | | | 89 | MODULA-3 | | | | ANSI C 90 FORTRAN 90 +---Eiffel Visual Basic | 91 | | 92 | | 93 | | 94 | | 95 Ada 95 Java
Each of the new languages listed above meets some specialized goal. For instance, AMPL is designed for expressing mathematics; HTML is a mark-up language for hypertext documents; and Active VRML, which was derived from the CAML family of languages, has been designed by Microsoft to enable transmission of active virtual reality scenarios across networks.
a few different forms of the expression x + 1 x + 1 C, Pascal, Ada, Algol $x + 1 Perl x 1 add Forth, Postscript (+ x 1) Lisp, Scheme add $1 $2 $3 Assembly language
Let us illustrate the problem via an example. Consider the following statement:
set x[i] to x[i] + 1
x[i] = x[i] + 1;
x
and adds i
to it. The addition is a hardware operation,
so it is dependent upon the hardware in question. This resulting
address is then referenced (if it's legal - which it might not be),
1
is added to the bit-string stored there (again, as a
hardware addition, which can overflow), and the result is stored back
to that location. However, no attempt has been made to determine that
x
is even a vector and that x[i]
is a
number.
(vector-set! x i (+ (vector-ref x i) 1))
x
is
indeed an array, (b) makes sure i
is within the bounds of
the array, (c) ensures the dereferenced location contains a number,
and (d) performs abstract arithmetic (so there will be no
``overflow'').
x[i] = x[i] + 1;