Pages

10.29.2008

¡Oh, la humanidad!

Por ahí dicen que P != NP. ¿Será eso cierto?

10.16.2008

Cerraduras

No, accidental lector, este post no tiene nada que ver con aquellos dispositivos mecánicos que sirven para cerrar puertas o similares. No. Para variar esto tiene que ver con temas de programación. Advertido está usted. Siga leyendo si la curiosidad lo corroe.

Estudiando para el examen de SCJP he llegado al tema de Clases Internas. Haré a un lado mis típicos comentarios de cuánto y por qué pienso que Java es un lenguaje muy mal diseñado y sólo comentaré que la existencia de las cerraduras léxicas me ha hecho la vida muy fácil en los distintos lenguajes que las tienen y he utilizado (Lisp, Erlang, Haskell) y que la inexistencia de las mismas en Java me hará la vida muy difícil.

Como soy un programador funcional creí que la existencia de las clases internas en Java era para tener "cierto tipo" de cerradura léxica. Pues bien, creí mal. Hasta la versión 1.6 no existen y no parece que las vayan a tener pronto o que, para variar, las implementen de una manera limpia (lo cual se me hace cómico y trágico al mismo tiempo ya que las cerraduras ayudan a crear código más limpio). Las clases internas no sirven para emular cerraduras. Punto. Memorízalo, Iván.

Me pregunto por qué es que los desarrolladores de Java no las logran implementar aún. Cuando yo programé mi intérprete de SALSA! (un lenguaje estilo Scheme) me costó trabajo tener cerraduras verdaderas, ya que las que tenía parecían ser cerraduras pero lo único que hacían era buscar el símbolo en el siguiente scope. Al final logré implementarlas haciendo varios cambios a las tablas de símbolos y la forma en la que éstas funcionaban pero lo logré. ¿Qué impide a los desarrolladores de Java tener cerraduras? No creo que sea algo como "un simple bug" como el que mi intérprete tenía, deben ser cosas más profundas que de seguro tocan puntos medulares en el diseño del lenguaje. Al menos esa es mi idea ya que ha pasado mucho tiempo como para que no las tengan.

Por ahí escuché que C# tiene una forma de cerraduras que hacen llamar delegates (amo esa consistencia en Microsoft de inventar términos para llamar a cosas que pretenden ser otras que no llegan a serlo). Si es que los delegates están bien programados o si al menos mantienen en cierta forma el poder de las cerraduras reales, harán a C# un lenguaje digno de ser aprendido y hasta, tal vez, usado.

Me pregunto si los demás lenguajes de ultima generación que no son funcionales y más o menos conozco (Python, PHP, Ruby) las tendrán implementadas y cómo. Empecé a buscar en Google los términos "python closures" y "ruby closures" (aún falta que busque para PHP) y encontré algunas ligas que estaré revisando y tal vez haga un post acerca de las mismas.

Ligas para Ruby:
http://www.artima.com/intv/ruby.html
http://www.artima.com/intv/tuesday.html
http://www.artima.com/intv/closures.html

Ligas para Python:
http://mail.python.org/pipermail/python-list/2004-July/270951.html
http://ivan.truemesh.com/archives/000392.html

Liga para Java:
http://gafter.blogspot.com/2007/01/definition-of-closures.html

10.07.2008

Interesante...

Una era de avances en una sola liga