A BRIEF HISTORY OF PROGRAMMING LANGUAGES Figure 2

A BRIEF HISTORY OF PROGRAMMING LANGUAGES

Figure 2. 1 Genealogy of common high-level programming languages

TIOBE

Pseudocodes (1949) - Short code; 1949; BINAC; Mauchly - Expressions were coded, left to right - Speedcoding; 1954; IBM 701, Backus - Pseudo ops for arithmetic and math functions - Conditional and unconditional branching - Autoincrement registers for array access - Slow! - Only 700 words left for user program

FORTRAN (mid-late 1950’s) • Emphasis on scientific programming • • FORTRAN FORTRAN 0 I II IV 77 90 95 1954(not implemented) 1957 1958 1960 -62 1978 1990 1995 Dramatically changed forever the way computers are used

FORTRAN in depth • FORTRAN II – 1958 • Independent compilation • FORTRAN IV – 1960 -62 • Improved data typing • ANSI standard in 1966 • FORTRAN 77 – 1978 • Better logical statements • FORTRAN 90 – 1990 • Allows recursion • Syntactic changes • FORTRAN 95 – 1995 • Deletes some deprecated features • Deprecates more features

LISP (1959) • • Designed at MIT by Mc. Carthy Still the dominant language for AI Pioneered functional programming Syntax is based on lambda calculus • Contemporary dialects: COMMON LISP, Scheme • Object-oriented versions: Flavors, LOOPS, CLOS • Related languages: ML, Miranda, Haskell

Scheme • Developed at MIT in mid 1970 s • Small • Extensive use of static scoping • Functions as first-class entities • Simple syntax (and small size) make it ideal for educational applications

COMMON LISP • An effort to combine features of several dialects of LISP into a single language • Large, complex

ALGOL • Goals of the language – Close to mathematical notation – Good for describing algorithms – Must be translatable to machine code • Not meant to be implemented, but variations of it were – MAD, JOVIAL • IBM initially enthusiastic, but all support dropped by mid-1959

ALGOL 58 (1958) • Formalized the concept of the data type • • Compound statements (begin. . . end) Parameters were separated by mode (in & out) Names could have any length Arrays could have any number of subscripts – Subscripts were placed in brackets • Semicolon as a statement separator • Assignment operator was : = • if had an else-if clause • no i/o - “would make it machine dependent”

ALGOL 60 (1960) • New Features: – Block structure; multiple scopes – Better parameter passing – Recursion – Stack-dynamic arrays • Successes: – Standard for publishing algorithms for over 20 years – All subsequent imperative languages are based on it – First machine-independent language – First formally defined syntax • Failures: – Programs non-portable – Hard to implement – Intrenchment of FORTRAN – Formal syntax description – Lack of support of IBM

COBOL (1960) • Based on FLOW-MATIC, which had: – Names up to 12 characters, with embedded hyphens – English names for arithmetic operators – Data and code kept completely separate – Verbs as the first word in every statement • COBOL Design Problems: – Arithmetic expressions? – Subscripts? – Fights among manufacturers • Contributions: – Macros – Hierarchical data structures – Nested selection statements – Long names with hyphens – Separate data division

BASIC (1964) • Intended for teaching how to program • Interactive interpreted environment • Designed by Kemeny & Kurtz at Dartmouth • First widely used language with time sharing • Current popular dialect: Visual BASIC

PL/I (1965) • Contributions: – First unit-level concurrency – First exception handling – Switch-selectable recursion – First pointer data type – First array cross sections • Comments: – Many new features were poorly designed – Too large and too complex – Was (and still is) actually used for both scientific and business applications

APL (1962) • Array and matrix processing • Dynamic typing and dynamic storage allocation • Designed as a hardware description language • Highly expressive • Programs are very difficult to read

SIMULA 67 (1967) • Introduced classes – data and operations together • Designed primarily for system simulation • Based on ALGOL 60 and SIMULA I • Primary Contribution: – Classes, objects, and inheritance

ALGOL 68 (1968) • Primary design goal: orthogonality • Based on ALGOL 60, but not a superset

Pascal (1971) • Designed for teaching structured programming • Small, simple, nothing really new • Many subsequent languages based on Pascal – Delphi – Occam

C (1972) • Designed for systems programming • Powerful set of operators • Poor type checking • Initially spread through UNIX • Flexible, but unsafe

Prolog (1972) • Logic language, non-procedural • Programs are sets of facts and rules • Not proven to be widely applicable

Ada (1983 - began in mid-1970 s) • Contributions: – Packages; Exception handling; Generic program units; Concurrency • Comments: – Competitive design – Included all that was then known about software engineering and language design – First compilers were very difficult: Five years to develop the first really usable compiler • Ada 95 (began in 1988) – Support for OOP through type derivation – New concurrency features – More flexible libraries

Smalltalk (1972 -1980) • Object-oriented programming language • Really a graphical environment • Developed at Xerox PARC • First full implementation of an objectoriented language • Pioneered the GUI everyone now uses

C++ (1985) • Design goal: no performance penalty, relative to C • Features: – Parameterized types (templates) – Exception handling – Operator overloading • Facilities for object-oriented programming added to C • Large and complex • Rapidly grew in popularity, along with OOP • ANSI standard approved in November, 1997!!

Java (early 1990’s) • Developed at Sun Microsystems – Smaller, simpler, more reliable C++ – Significantly simplified – All code must be encapsulated in classes – Concurrency support (threads) – Garbage collected • Java. Script (1995) – Began as Live. Script at Netscape – Client-side HTML-resident scripting language – Used for designing client-side dynamic documents – Purely interpreted

Scripting Languages • Earliest scripts were files which stored a sequence of OS commands • interpreted by simple OS facility • UNIX had a profound influence • sh • ksh • awk • Not all are Turing Complete

Perl (1987) • Related to ALGOL only through C • A scripting language – A script (file) contains instructions to be executed – Other examples: sh, awk, tcl/tk • Developed by Larry Wall • Perl variables are statically typed and implicitly declared – Three distinctive namespaces, denoted by the first character of a variable’s name • Powerful but somewhat dangerous • Widely used as a general purpose language

Scripting Languages for the Web • Java. Script • Used in Web programming (client side) to create dynamic HTML documents • PHP (1994) • Server-side HTML-resident scripting language • Purely interpreted • Python • An OO interpreted scripting language

C# (2000) • Microsoft • The primary language of the. NET platform • A successor to both Java and C++ • Includes most of the features of Java, with some modifications, as well as some of the features of C++ that were left out of Java • Can be used for both. NET applications for the Web, as well as a general-purpose programming language

Markup/Programming Hybrid Languages • XML : e. Xtensible Markup Language – a metamarkup language – e. Xtensible Stylesheet Language Transformation (XSTL) transforms XML documents for display • JSP : Java Server Pages – a collection of technologies to support dynamic Web documents

Summary • Development, development environment, and evaluation of a number of important programming languages • Perspective into current issues in language design
- Slides: 31