El Espectro de los Lenguajes de Programación

Los lenguajes de programación pueden ser clasificados en familias de acuerdo con su modelo de computación [].

    declarativo
      funcional                          Lisp, Scheme, Clojure, ML, Haskell, Scala
      flujo de datos (dataflow)          Id, Val
      logicos, basados-en-restricciones  Prolog
      basados en templates               XSLT
   imperativos
      von Neuman                         C, Ada, Fortran
      scripting                          Perl, Python, PHP
      orientados a objetos               Smalltalk, Ruby, Eiffel, C++, Scala

  1. Los lenguajes funcionales usan un modelo computacional basado en la definición de funciones recursivas. Se inspiran en el lambda cálculo (Lisp, ML, Haskell, Erlang, Elixir)
  2. Los lenguajes dataflow realizan su cálculo según el flujo de información entre nodos funcionales. Son ejemplos de Dataflow los lenguajes Id y Val. Las hojas de cálculo también pueden considerarse un ejemplo, ya que el cambio de una variable fuerza el re-cálculo de todas las celdas que dependen de ella
  3. Los lenguajes lógicos y los lenguajes de restricciones se inspiran en la lógica de predicados
  4. Los lenguajes de von Neumann se basan en la ejecución de las sentencias de un programa almacenado en memoria y que cambian los valores de las variables almacenadas en la memoria
  5. Los lenguajes de scripting o lenguajes dinámicos facilitan la combinación de componentes que fueron desarrolladas como programas independientes. Son lenguajes de scripting bash, csh, awk, PHP, JavaScript, Perl, Python, Ruby, ...
  6. Los Lenguajes orientados a objetos describen la solución en base a objetos que interactuan entre si. Los objetos disponen de su propio estado interno y un conjunto de subrutinas (denominadas métodos) que modifican dicho estado. el lenguaje orientado a objetos por excelencia es Smalltalk

En cuanto a la concurrencia, las mas de las veces es implementada mediante librerías, paquetes y compiladores extendiendo las capacidades de un lenguaje secuencial como C o Fortran. Algunos lenguajes, entre ellos Java, C#, Ada, Modula-3, Erlang y Elixir contienen características explícitamente concurrentes.

Para ver como diferentes lenguajes resuelven el mismo problema puede consultarse:

Casiano Rodriguez León 2015-01-07