Monthly Archives: febrero 2009

Lenguajes: nuevas versiones

En estos últimos días he visto los nuevos lanzamientos, o lo que se espera lanzar en varios “mundos” del desarrollo del software. Por un lado, hay varios puntos donde la interfaz pasado-futuro corre bastante peligro.

Los desarrolladores de ciertos lenguajes han creído conveniente romper con el pasado de uso de dichos lenguajes para acogerse a los progresos y prácticas más usadas actualmente. Haremos repaso.

Perl 6

El lanzamiento de esta versión de Perl ha traído de cabeza a varios programadores, en algunos sitios ya existen guías de migración de Perl 5 a Perl 6 a modo de poder ayudar a los programadores a pasar a esta nueva versión y aprovechar sus nuevas características. Entre ellas, cabe destacar:

  • Tipificación
  • Parámetros en subrutinas
  • Orientación a Objetos
  • Comparaciones encadenadas
  • Evaluación perezosa
  • Macros

Larry Wall mencionó que la versión 5 era su reescritura de Perl, su visión de cómo debía de ser y que, la versión 6, debía de ser la reescritura de Perl para lo que quiera que sea la comunidad.

PHP 6

La versión de PHP 5, trajo consigo una orientación a objetos muy mejorada. Pero aún hoy, con la versión 5.2 estable y la 5.3 en inestable, se echa en falta una versión más completa del lenguaje, características avanzadas como las que se encuentran en otros lenguajes como Ruby, Java, Python o C++.

Por ello, la versión de PHP 6, nos aportará mejoras considerables como:

  • Closures y lambda
  • Traits
  • Namespaces
  • Más mejoras en la orientación a objetos

Por otro lado, hay que mencionar que esta versión ya no asegura la compatibilidad hacia atrás, es decir, con scripts programados para versiones de PHP 3.x, 4.x o incluso algunas del 5.x.

Python 2.6 y 3.0

El último lanzamiento de la versión 2.x se hizo con la versión 2.6, la cual incluye características y corrección de fallos, además herramientas para migrar a la versión 3, e incluso comenzar a usar elementos específicos de la versión 3 incluídos en la 2.6, a través del comando future.

La versión 3.0 de Python rompe también la interfaz pasado-futuro al no ser compatible con la rama anterior a nivel de scripts. No obstante, se han incluido herramientas para facilitar su transición.

Las mejoras incluidas:

  • Print es una función
  • Views e Iterators en lugar de Lists
  • Nueva sintaxis de anotaciones, argumentos y literales
  • Cambios en las librerías estándares (reorganización)

Conviene realizar una migración y estudiar un poco los cambios, si se desea realizar el salto a esta nueva versión.

Ruby 1.9.1

El comentario más sonado sobre esta versión es: el más rápido que la 1.8; y es que, parece que, aún no habiendo cambiado mucho la forma del lenguaje, sí han cambiado los procedimientos internos para hacerlos más óptimos.

Lea las características para más información.

Conclusiones

Aprender un lenguaje no es una seguridad en cuanto a dejar de aprender se refiere. Dentro de cada uno de los lenguajes de programación existentes, se han observado cambios patentes que se realizan con una periodicidad de pocos años, con lo que es bueno mantenerse al tanto de las nuevas versiones, otros lenguajes y, sobre todo, las necesidades y entornos, sus progresos y cómo se adaptan los lenguajes a ellos, puesto que determinarán si estamos eligiendo adecuadamente nuestra herramienta de trabajo o no.

Lenguajes de Programación

Revisando los tipos de lenguajes de programación existentes, llego a esta clasificación de los mismos:

  • Lenguajes imperativos
    • Lenguajes Spaguetti
    • Lenguajes Estructurados
    • Lenguajes Modulares
    • Lenguajes Orientados a Objetos
  • Lenguajes lógicos
    • Lenguajes declarativos
    • Lenguajes funcionales

Todos estos lenguajes de programación obedecen a una necesidad y/o ideología subyacente, que motivó el desarrollo del lenguaje con la metodología y sintaxis específica. A continuación describiré algo más en detalle cada uno de los anteriores.

Lenguajes Spaguetti

Fueron los primeros lenguajes de programación. El lenguaje máquina y posterior ensamblador, se basaba en la programación de instrucciones, una a una y comandos de salto ante ciertos estados del procesador. Con ello se conseguía un código entrelazado en saltos de línea a línea y parte a parte, consiguiendo un spaguetti bien entrelazado en proyectos grandes.

Lenguajes como Basic, posteriormente, siguieron esta forma de programación.

Lenguajes Estructurados

Los lenguajes estructurados que surgieron después (Fortran, C, Pascal, …) se basan en la estructuración del código en forma de procedimientos, funciones o subrutinas. Cada programa está formado por un conjunto de estas estructuras que son llamadas entre sí, tienen un nombre diferenciado y una funcionalidad bien conocida que se basa en los parámetros de entrada, pudiendo retornar valores en su retorno.

Lenguajes Modulares

Es un nivel más en los lenguajes estructurados. Se basa en la agrupación de los procedimientos, funciones y/o subrutinas en bloques, paquetes o módulos, de modo que queden bien organizados. Lenguajes como Java, Perl, Ruby o Modula-2, hacen uso de esta metodología.

Lenguajes Orientados a Objetos

El enfoque de este paradigma se basa en darle más importancia a los datos que a las acciones en sí. Es decir, en los modelos anteriores, la separación se hacía por unidades funcionales (verbos). La programación orientada a objetos se realiza mediante la organización del código mediante el conjunto de datos con sus funciones afines (objetos = datos + funciones).

Lenguajes que hacen uso de esta metodología son: Smalltalk, Ruby, C++, Java y Python, entre otros.

Lenguajes Declarativos

Los lenguajes declarativos se basan en una especificación lógica de lo que la máquina debe de hacer. Pero sin entrar en detalle en el cómo debe de hacerlo. Es un lenguaje más cercano al lenguaje natural que al lenguaje máquina, que se basa en la entrada de predicados para, a través de inferencia, llegar a un resultado.

Lenguajes que se basan en este paradigma son Lisp, Scheme, Clips y Prolog, entre otros.

Lenguajes Funcionales

Los lenguajes funcionales son como los declarativos, pero en lugar de predicados, trabajan con funciones matemáticas, es decir, carecen de máquina de inferencia y la definición de programas se basa en la especificación matemática del programa que se quiere conseguir.

Lenguajes que se basan en este paradigma son Haskell y Erlang, principalmente.

Otros paradigmas compartidos

Las necesidades de los desarrolladores cambia según el sector en que se trabaje, la época, la empresa… cualquier factor puede influir para tomar como determinación el uso de una tecnología y/o metodología específica y, dentro de la elección tomada, puede permutarse incluso hasta llegara a alcanzar un nuevo paradigma.

Estos paradigmas, se incluyen dentro de lenguajes ya creados y solo requieren de un uso específico de un tipo de lenguajes para conseguir el propósito deseado.

Los paradigmas que obedecen a esta forma son:

  • Programación Orientada a Eventos
  • Programación Orientada a Aspectos
  • Programación Concurrente

Estos paradigmas pueden ser integrados en cualquiera (o la mayoría) de los lenguajes citados anteriormente. Dejo pendiente el comentar estos paradigmas de programación.