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

23 noviembre, 2011

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. ¿Son ahora los lenguajes programación más expresivos?

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…

(Visited 225 times, 1 visits today)
Autor / Autora
Robert Clarisó Viladrosa
Comentarios
Miguel Gómez14 septiembre, 2016 a las 5:20 pm

Gran entrada! Sin duda me quedo con Python y Django
Saludos

Responder
Quete de Tal4 diciembre, 2017 a las 9:22 pm

Java es mas expresivo que C++ !!??!?!?!!
Disculpenme pero no me van a poner gato por liebre.

Responder
Deja un comentario