¿El lenguaje de programación más expresivo?

Continuamos nuestro repaso al mundo de los lenguajes de programación. Si antes nos fijamos en la eficiencia y la popularidad de estos lenguajes, ahora nos centraremos en cuál es el lenguaje de programación más expresivo.

Entendemos por expresividad de un lenguaje de programación la capacidad de expresar soluciones a problemas complejos de forma elegante, simple y concisa (ver otras definiciones alternativas). Un lenguaje expresivo puede incrementar la productividad de un programador y mejorar la calidad del código, haciéndolo más comprensible, fácil de mantener y con menos defectos.

Por ejemplo, consideremos cómo se codificaría la eliminación de valores duplicados en una lista usando diferentes lenguajes de programación. Algunos lenguajes incluyen el concepto de lista y una primitiva para eliminar duplicados (ejemplo en Haskell) mientras que en otros es necesario escribir el código desde cero (ejemplo en C).

La historia de los lenguajes de programación es la crónica del incremento progresivo de su expresividad y nivel de abstracción. En ensamblador, los programas tienen que usar únicamente las instrucciones que proporciona el procesador. Lenguajes como Fortran ocultan los detalles del procesador, ofreciendo primitivas de control de flujo (bucles, condicionales, …), declaración de variables y vectores, etc. Más adelante, la programación orientada a objetos intenta facilitar la modularidad y el reaprovechamiento de código. Finalmente, los paradigmas basados en programación declarativa (como la programación funcional) intentan afrontar el problema desde otra perspectiva: describir cuál es la solución en lugar de la secuencia de pasos para calcularla, delegando las decisiones sobre el “cómo” al motor de ejecución.

Además del nivel de abstracción, hay otras dos tendencias que incrementan la expresividad de los lenguajes de programación: la creciente potencia de las librerías de los lenguajes y la proliferación de lenguajes donde no es necesario declarar los tipos de las variables, ya que éstos se deducen del contexto o bien se comprueban durante la ejecución.

Dicho esto, ¿cómo se compara la expresividad de dos lenguajes de programación? Una posible estrategia es seleccionar como benchmark un conjunto de problemas, escribir soluciones para dichos problemas en diferentes lenguajes y comparar las soluciones. La “elegancia” de cada programa puede ser subjetiva y difícilmente comparable. Pero si  buscamos una métrica cuantitativa de lo “simple y conciso” de la solución, podemos comparar el tamaño de cada programa (bien en líneas de código o en kb de código fuente). Cuánto menor sea el tamaño, mayor será la expresividad del lenguaje. Obviamente, un lenguaje puede ser más expresivo para algunos tipos de problemas y menos expresivo en otros.

Nos basamos en los datos publicados en los artículos [1] An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl (2000) y [2] Loop Recognition in C++/Java/Go/Scala (2011), y la web comparativa [3]  The Computer Language Benchmarks Game. Los datos deben tomarse con cierta perspectiva porque el número de problemas analizados es muy pequeño ([2] sólo compara un problema, mientras que [1] y [3] utilizan del orden de una decena). Es decir, los datos no son suficientes para hacer un análisis estadísticamente significativo. Teniendo en cuenta estos “peros”, las fuentes nos ofrecen la siguiente ordenación de lenguajes de programación en orden creciente de tamaño de los programas, es decir, en orden decreciente de expresividad:

[1]

[2]

[3]

Perl

Python

Tcl

Rexx

C

Java

C++

Scala

Go

C++

Java

Ruby

Perl

Python

Go

Scala

C#

Java

C

C++

Estos datos parecen confirmar la hipótesis según la que los lenguajes más recientes son más expresivos que los lenguajes más “veteranos”. ¿Coincide este resultado con vuestra experiencia? Tenéis la palabra…

1 Comment

Trackbacks/Pingbacks

  1. ¿Cuál es el lenguaje de programación más expresivo? - [...] "CRITEO-300x250", 300, 250); 1 meneos ¿Cuál es el…
  2. 50 entradas (y seguimos trabajando) | iNFoRMáTiCa++ - [...] ¿El lenguaje de programación más expresivo?  224 visitas [...]

Comentar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Leer entrada anterior
Nuevos Grados en Ingeniería Informática: Los itinerarios

Como ya comentaba en una entrada anterior, los nuevos grados en Ingeniería Informática - GII - (grados EEES o Bolonia)...

Cerrar