2012-08-06 05:05:49 +0200 - Permalink
Borges, mundos extraños y lenguajes de programación
(Esta es una transcripción de un post con el mismo título que escribí originalmente en Capuccino Productions Inc., mi tumblelog. Para propósitos documentales y además porque es un post largo, que más se ajusta a este blog, lo reproduzco aquí).
(Atención: contenido altamente técnico / geek. Si después de leer el primer párrafo decides que este post no te interesa, está bien, puedes retirarte; cierra la ventana de tu navegador y sigue tranquilamente con tu vida :) )
Hace unas horas leí un post en el blog de Steve Yegge, muy interesante, aunque algo antiguo, en el cual se queja de que en Java (el lenguaje de programación), se le da demasiada importancia a los “sustantivos” (objetos) por sobre los “verbos” (métodos), a tal punto que los “verbos” no pueden existir sin los “sustantivos” (en Java no se pueden crear funciones “sueltas”, solo métodos asociados a clases); esto da como resultado el inconveniente de que no se puedan implementar acciones independientes, si no que se tienen que crear “hacedores” o “ejecutores” dentro de los cuales implementar las acciones que uno quiere (¿alguien recuerda new ActionListener() { void actionPerformed(ActionEvent e) { ... } };
?).
(La frase memorable del post: “… advocating Object-Oriented Programming is like advocating Pants-Oriented Clothing.” :) ).
Después de leer el post, recordé que uno de los cuentos de Jorge Luis Borges (Tlön, Uqbar, Orbis Tertius, uno de mis favoritos)) describe exactamente lo contrario: un mundo cuyos habitantes poseen una filosofía (el idealismo de George Berkeley) que ha ocasionado que sus lenguas no posean sustantivos, únicamente “verbos impersonales, calificados por sufijos (o prefijos) monosilábicos de valor adverbial”.
Por ejemplo: no hay palabra que corresponda a la palabra luna, pero hay un verbo que sería en español lunecer o lunar. Surgió la luna sobre el río se dice hlör u fang axaxaxas mlö o sea en su orden: hacia arriba (upward) detrás duradero-fluir luneció.
(Sí, así de locazo es el cuento :). Recomendado).
Y entonces me puse a pensar: ¿cual sería el equivalente de esta imaginaria lengua en un lenguaje de programación? Tendría que ser un lenguaje que tuviera el problema contrario al que describe Steve Yegge con Java: los “sustantivos” estarían supeditados a los “verbos”, no podrían existir sin ellos. Para crear un “sustantivo”, se necesitaría un “verbo” generador… El propio Steve Yegge da la respuesta cuando habla acerca de los lenguajes funcionales “al otro lado del mundo”, en especial cuando habla de “Lambda the Ultimate”, un “reino lejano” en el que no existen sustantivos, solamente verbos (haciendo referencia seguramente al cálculo lambda).
… Peeeero, como mi experiencia en lenguajes funcionales (como por ejemplo Haskell) es limitada, recurrí a un lenguaje más conocido para mí: Javascript. Tendríamos entonces:
// "Surgió la luna sobre el río"
var frase = lunecer({'direccion': 'arriba', 'posicion': detras(permanente(fluir()))})
// O sino
var frase = lunecer({'direccion': 'arriba', 'posicion': 'detras', 'relativo-a': permanente(fluir())})
La idea, de manera similar al lenguaje del cuento, es que los métodos generan los objetos, utilizando parámetros como información adicional, pero de forma limitada (los “prefijos … de valor adverbial”). O, llevado un poco más allá, los métodos (o funciones) simplemente se componen para dar como resultado una gran función que, al ser ejecutada, da como resultado la acción (o fenómeno) esperado, en este caso el surgir de la luna sobre el río. Es decir, frase
no es una variable, es una función de Javascript que representa el surgir de la luna sobre el río. Recién al ejecutar:
frase()
obtendríamos, por ejemplo, una bonita animación en el navegador que nos mostrara a la luna surgiendo sobre el río (ya que estamos hablando de Javascript :) ).
Peeero la rayadera no termina aquí (no señor :P ). El cuento continúa de este modo:
Lo anterior se refiere a los idiomas del hemisferio austral. En los del hemisferio boreal (…) la célula primordial no es el verbo, sino el adjetivo monosilábico. El sustantivo se forma por acumulación de adjetivos. No se dice luna; se dice aéreo - claro sobre oscuro - redondo o anaranjado - tenue - del cielo.
Como mi dominio de Javascript no llega a tanto, cambiemos de lenguaje a un favorito de la casa: Ruby. La flexibilidad del sistema de clases en Ruby nos permitiría implementar algo análogo a lo descrito en el cuento.
# Luna
luna = Object.new
class << luna
def medio
:aereo
end
def forma
:redondo
end
def color
:blanco
end
def inspect
"#{medio} - #{color} - #{forma}"
end
end
# En irb:
>> luna
=> aereo - blanco - redondo
(No es exactamente lo del cuento, pero tampoco quería complicarme mucho :P ).
Y luego viene una de mis partes favoritas del cuento:
En el caso elegido, la masa de adjetivos corresponde a un objeto real; el hecho es puramente fortuito. En la literatura de este hemisferio (…) abundan los objetos ideales, convocados y disueltos en un momento, según las necesidades poéticas. Los determina, a veces, la mera simultaneidad. Hay objetos compuestos de dos términos, uno de caracter visual y otro auditivo: el color del naciente y el remoto grito de un pájaro.
>> amanecer = Object.new
=> #<Object:0x103325880>
>> class << amanecer
>> def color
>> "el color del naciente"
>> end
>> def sonidos
>> "el remoto grito de un pájaro"
>> end
>> def inspect
>> "El cielo se ha teñido de #{color}.\nSe puede oír #{sonidos}."
>> end
>> end
=> nil
>> amanecer
=> El cielo se ha teñido de el color del naciente.
Se puede oír el remoto grito de un pájaro.
Hay poemas famosos compuestos de una sola enorme palabra. Esta palabra integra un objeto poético creado por el autor.
>> haiku = Object.new
=> #<Object:0x1032fd178>
>> class << haiku
>> def adverbio
>> "oscuramente"
>> end
>> def cosas
>> ['libros', 'laminas', 'llaves']
>> end
>> def seguido
>> "suerte"
>> end
>> def inspect
>> "#{adverbio.capitalize}\n#{cosas.join(', ')}\nsiguen mi #{seguido}"
>> end
>> end
=> nil
>> haiku
=> Oscuramente
libros, laminas, llaves
siguen mi suerte
(Fuente: http://terebess.hu/english/haiku/borges.html)
Creo que con esto le hemos dado todo un nuevo sentido al lema de los muchachos de Wordpress (http://wordpress.org/): “el código es poesía”.
… Bueeeeno, suficiente pateadera de cerebros por el día de hoy. Nos vemos la siguiente vez que los planetas se alineen y yo haya tomado suficiente café :D. Chau…