CSci 555: Functional Programming
Spring 2016
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.
- 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 (instructor studied this language while working
in the military aerospace industry 1980-83)
- 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
influenced JavaScript, Lua), used virtual machine with
just-in-time compilation (JIT) which influenced Java HotSpot
- Perl, 1987; dynamic programming language originally
focused on providing powerful text-processing facilities based
around regular expressions
- 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-specific 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); developed
by Sun Microsystems, now Oracle
- 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
- PHP, 1995; server-side scripting language for dynamic web
applications
- OCaml (originally Objective Caml), 1996; a dialect of ML that
adds object-oriented constructs, focusing on performance and
practical use
- C#, 2001; class-based object-oriented programming, statically
typed, mostly imperative, language that runs on Microsoft's Common
Language Infrastructure (in some sense, Microsoft's response to
Sun's Java)
- F#, 2002; OCaml re-envisioned for Microsoft's Common
Language Infrastructure (.Net)
- Scala, 2003; hybrid functional and object-oriented language
that runs on the Java Virtual Machine
- Groovy, 2003; dynamically typed 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, 2014 (for 1.0 release); functional concurrent
programming language, dynamic strong typing, metaprogramming,
protocols, Erlang actors, runs on Erlang Virtual Machine,
influenced by Erlang, Ruby, and Clojure
- Swift, 2014; Apple's replacement for Objective C that
incorporates contemporary language concepts and focuses on
program safety; "Objective C without the C"
- Rust, 2015 (for 1.0 release); systems programming
language that incorporates contemporary language concepts and
focuses on safety and performance, meant to replace C and C++
- Idris, 2016 (for 1.0 release); Haskell-like functional
language with dependent types, incorporating ideas from proof
assistants.
- Other interesting languages: Julia, miniKanren, etc.
UP to CSci 555 root document?
Copyright © 2016, H. Conrad Cunningham
Last modified: Thu Apr 21 08:39:21 CDT 2016