CSci 450-01: Organization of Programming Languages
CSci 503-01: Fundamental Concepts in Languages
Fall 2014
History of Programming Languages
Note: These brief notes are similar to the instructor's unscripted
remarks on this topic in CSci 450/503 during the lecture/discussion on 29
August 2014. It is based, in part, on the following references:
- O'Reilly History of Programming Languages poster (displayed in class)
- Wikipedia History of Programming Languages article
From the instructor's perspective, key languages and milestones
include the following. (Some of these were pointed out by the
instructor; others perhaps not.)
- Fortran, 1957; first compiler, math-like language for
scientific programming, influenced many subsequent languages,
still in use today (first language learned by instructor in 1974)
- Lisp, 1958; code and data have same format (homoiconic),
related to Church's lambda calculus theory, recursion, syntactic
macros, automatic storage management, higher order functions,
influenced many subsequent languages/research, still in use today
- Algol, 1958, 1960; nested block structure, lexical
scoping, BNF invented to define syntax, call by name parameter
passing, greatly influenced most subsequent languages
- COBOL, 1959; Grace Hopper, business/accounting programming,
still in use today
- Simula; 1962, 1967; original purpose for discrete-event
simulation, first object-oriented language (in Scandinavian school)
- Snobol, 1962; string processing, patterns as first class
data, backtracking on failure
- PL/I, 1964; IBM-designed language to merge scientific
(Fortran), business (COBOL), and systems programming (second
language learned by instructor in 1975)
- BASIC, 1964; interactive computing (timesharing, early microcomputers)
- Pascal, 1970; Niklaus Wirth's simplified Algol,
structured programming, one-pass compiler, important for teaching
in 1980s and 1990s (used by UM CIS in CS1 and CS2 until
1999)
- Prolog, 1972; logic programming
- C, 1972; systems programming language for Unix, widely in use
today, influenced many subsequent languages
- Smalltalk, 1972; ground-up object-oriented programming
language, message-passing between objects (in American school of
object-oriented language)
- ML, 1973; polymorphic type system on top of Lisp, pioneering
statically typed functional programming, algebraic data types,
influenced subsequent functional programming languages
- Scheme, 1975; minimalist dialect of Lisp with lexical
scoping, tail call optimization, first-class continuations,
influenced subsequent languages/research
- Icon, 1977; structured programming successor to Snobol, uses
goal-directed execution based on success or failure of expressions
- C++, 1980; C with Simula-like classes
- Ada, 1983; designed by US DoD-funded committee as standard
language for military applications, statically typed, block
structured, modular, synchronous message passing, object-oriented
extensions in 1995
- Objective C, 1986; C with Smalltalk-like messaging, selected
by Steve Jobs' NeXT systems, picked up by Apple when NeXT
absorbed, key language for OS X and iOS
- Erlang, 1986; message-passing concurrency on functional
programming base (actors), fault-tolerant/real-time systems,
dynamic typing, virtual machine
- Self, 1986; dialect of Smalltalk (developed partly at
Sun), first prototype-based object-oriented language (which
influcenced JavaScript, Lua), used virtual machine with
just-in-time compilation (JIT) which incluenced Java HotSpot
- Haskell, 1990; purely functional language with non-strict
semantics (i.e., lazy evaluation) and strong static typing, widely
used in functional programming research community
- Python, 1991; dynamically typed, multiparadigm language,
increasing in use
- Ruby, 1993; dynamically typing, object-oriented,
reflective/metaprogramming, internal domain-specfic languages,
popularized by Ruby on Rails framework, influence on subsequent
languages
- Lua, 1993; minimalistic language designed for embedding
in any environment supporting standard C, dynamic typing, lexical
scoping, first-class functions, garbage collection, tail recursion
optimization, pervasive table/metatable data structure, facilities
for prototype object-oriented programming, coroutines
- Java, 1995; class-based object-oriented programming,
statically typed, virtual machine, version 8 has functional
programming features (higher order functions, streams)
- Javascript, 1995; designed for embedding in web pages,
dynamic typing, first-class functions, prototype-based
object-oriented programming, became popular quickly before
language design made clean
- F#, 2002; object-oriented ML descendent running on
Microsoft's Common Language Infrastructure
- Scala, 2003; hybrid functional and object-oriented language
that runs on the Java Virtual Machine
- Clojure, 2007; Lisp dialect with concurrency (software
transactional memory) that runs on Java Virtual Machine, immutable
data structures
- Elixir, 2012-14; functional concurrent programming
language, dynamic strong typing, Erlang actors, runs on Erlang
Virtual Machine, influenced by Erlang, Ruby, and Clojure
UP to CSci 450/503 root document?
Copyright © 2014, H. Conrad Cunningham
Last modified: Sun Sep 14 23:04:51 CDT 2014