jump to navigation

¿Es el futuro funcional? 23 agosto 2006

Posted by Jesús in Programación.
trackback

He encontrado estos días (no me acuerdo dónde) un articulín en el que se muestran las virguerías que permiten hacer algunos lenguajes de programación modernos, en este caso javascript (sí, esa cosa tan chunga que parece que sólo sirve para mostrar popups, quién lo iba a decir) pero que también son aplicables a otros lenguajes tipo Python o Ruby. El asunto se basa en hacer cosas que suenan como a sacrilegio a cualquier programador de C, Pascal o hasta diría que Java, como pasar funciones como parámetro y cosas así, pero que, bien usadas, pueden conseguir resultados sorprendentes.

Planteémosnos una pregunta: hoy en día, que cada vez vemos procesadores más paralelos (ya es normal tener una CPU con dos cores, el año que viene salen las de 4, y ya se habla de 8, 16, etc.), ¿podremos aprovechar todo ese paralelismo con los lenguajes convencionales? Al fin y al cabo, muchos de los lenguajes que conocemos a día de hoy no dejan de ser envoltorios sintácticamente atractivos para un paradigma totalmente lineal: la arquitectura von Neumann, usease, una instrucción detrás de otra, y saltamos de vez en cuando. Vale que tenemos toda una serie de facilidades tipo procesos, threads y demás, pero teniendo en cuenta que generan casi tantos problemas como solucionan (que si exclusión mutua, que si interbloqueos, etc.), podría parecer más un apaño que otra cosa.

¿No sería genial programar en un lenguaje verdaderamente de alto nivel, que no estuviera atado a la arquitectura von Neumann? Así, bastaría escribir el programa y luego, al ejecutarlo en nuestro flamante Athlon X64 (no porque sea de 64 bits, sino porque tendría 64 cores), automágicamente se haría uso de tanto paralelismo junto.

Y aquí llego al asunto: todo esto ya existe, y de hecho es casi tan viejo como la informática. Los lenguajes funcionales, tipo Lisp y compañía, se basan en un paradigma que no tiene nada que ver con el clásico modelo lineal, y por ello son altamente paralelizables. En realidad, y aunque tal vez Lisp tenga otros problemas, en los nuevos lenguajes que van apareciendo se deja ver una influencia funcional muy importante: basta ver las funciones anónimas o la definición de listas por comprensión. Con cosas como éstas se puede programar a muy alto nivel, de manera que, si el compilador/intérprete es lo bastante listo, la paralelización sea, no sólo posible (todo es posible en este mundo), sino bastante fácil.

En el artículo se pone el ejemplo del típico bucle para procesar todos los elementos de un array: si lo hacemos con el clásico for, estamos indicando explícitamente que el procesado debe hacerse linealmente, desde el primer elemento al último. Si por el contrario lo hacemos con una función como la map() de Python, a la que se le pasa el array implicado y la función que queremos aplicar, no indicamos explícitamente ningún orden, sólo que queremos procesar todo el array, por lo que el compilador es libre de hacer los cálculos en serie, en paralelo o como quiera. Mecanismos como éste son los que nos permitirán en el futuro seguir programando con independencia de los cambios arquitecturales en el hardware.

En fin, quién sabe, tal vez en 10 años estemos todos programando en Lisp (habrá que aprender, porque mi Lisp es bastante básico…), pero por lo menos hay que ir poniéndose las pilas con la programación de más alto nivel, ya que hasta cosas tan “clásicas” como Java se están apuntando al carro…

Anuncios

Comentarios»

No comments yet — be the first.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: