History of Generic Programming

Some informal notes tracing the origins of generic programming. (To be merged into http://en.wikipedia.org/wiki/Generic_programming.)

Background for this page

WGP'08 CFP said: "only recently have generic programming techniques become a specific focus of research in the functional and object-oriented programming language communities"

This formulation is not good and seems to have been "inherited" for years. Looking back we can trace that sentence almost unchanged 10 years back to the call for WGP'98: "Recent developments in functional and object-oriented programming lead the organizers of this workshop to believe that there is sufficient interest to warrant the organisation of a one-day workshop on the theme of generic programming." http://web.archive.org/web/19990127120852/http://www.cse.ogi.edu/PacSoft/conf/wgp/

Some history (should grow)

  • 1978: Ada has had generics since it was first designed [http://www.adahome.com/History/Steelman/steelman.htm#12D]
  • 1983: The Ada 83 standard had "generic program units"
  • 1985: Eiffel was first implemented
  • 1985: C. Böhm and A. Berarducci. Automatic synthesis of typed Lambda -programs on term algebras. Theoretical Computer Science, 39:135-154, 1985.
  • 1988: Wadler introduced type classes to Haskell [see History of Haskell, HOPL III, 2007], [Wadler and Blott, 1989]
  • 1991: multi-parameter type classes in Gofer

Bertrand Meyer published "Genericity vs Inheritance" -- a research paper on genericity in an object-oriented context -- at the first OOPSLA in 1986. Eiffel has had genericity built-in since its first implementation in 1985 and improvements have been constant since then. The mechanism has been amply documented at various stages of its evolution ("Object-Oriented Software Construction" 1988 and 1997, "Eiffel: the Language" 1990 and 1991, ECMA/ISO standard 367 2005 and 2006). As a matter of fact one of the possible definitions of Eiffel is that it is the delicate combination (devised in 1985) of genericity and O-O techniques.