Search code examples
language-featureshistorylanguage-design

When and in what language were certain programming features introduced?


Programming has come a long way. I am still relatively young (first Computer: C64), hence I take many things in programming for granted that were obviously introduced at some point and facilitated ways of programming that are now commonplace.

What follows is a (by no means complete) list of features, where I would love to know in which language and when they were introduced:

  • introduction of functions
  • compiled language
  • interpreted language
  • conditional & loop structures
  • the array
  • the dictionary (Hashtable)
  • allowance of multi-threading
  • functional programming (functions as data)
  • object orientation (do we need to be more specific? maybe inheritance was there earlier than interfaces?)
  • generics
  • aspect-oriented programming
  • meta-programming

If you can, try to back up your statement with some reference. If you feel I have missed an important programming language feature whose introduction should also be appreciated, please comment on this question such that it can be added to the list.

UPDATE: I suppose that a programming language cannot introduce anything that wouldn't be possible in assembler, I'm rather looking for languages that made a certain feature available to "mere mortals".


Solution

  • Lisp. 1958.

    Alternatively,

    • introduction of functions - Alonzo Church's lambda calculus, 1930

    • compiled language - Grace Hopper, 1952

    • interpreted language - Lisp, 1958, maybe something before.

    • conditional & loop structures - Bletchley Park Bombe 1940s ( ran in a loop ). Jacquard, 1801

    • the array - as a contiguous chunk of memory with an index, Bletchley Park or Manchester Baby, 1940s

    • the dictionary (Hashtable) - ?

    • allowance of multi-threading - Jacquard, 1801; Multix 1965

    • functional programming (functions as data) - Godel, 1930s

    • object orientation

      • Simula ( Dahl and Nygaard 1967 ) for class based OO with inheritance
      • CLU ( Liskov 1975 ) iterators had a common interface, and allowed abstract data types with encapsulated state and behaviour
      • Smalltalk ( Kay late 1970s ) 'everything is an object'
      • Eifell ( Meyer 1986 ) design by contract influenced Java's interfaces
    • generics - generic methods ( Lisp again ) or parametric types ( modula??? )?

    • aspect-oriented programming - common lisp meta-object protocol, late 1980s

    • meta-programming - lisp macros, sometime in the 50s or 60s