viernes, 16 de julio de 2010

Programar programas que programan

Lisp es un lenguaje bastante particular (lleno de paréntesis, jeje). Entre las características que tiene hay una que hasta donde conozco, no poseen otros lenguajes: permite modificar la sintaxis del lenguaje mismo.
Explicándolo sin entrar en demasiado detalle, uno puede escribir macros (que no son nada ni cercano a las macros de los otros lenguajes, solo el nombre tienen parecido), que son "programas que escriben programas". Lisp utilizará esas macros que escribamos para "leer" el código en la sintaxis que inventemos, y a partir de él "escribirá" código (programas) que finalmente serán los que se ejecuten.

Algo así:

  1. inventamos una sintaxis
  2. programamos una macro, que es una función que recibe código en esa sintaxis inventada, y genera código en la sintáxis normal
  3. hacemos programas usando nuestra sintaxis inventada
  4. lisp convierte nuestros programas con sintaxis inventada, en programas válidos, usando nuestra macro
  5. lisp finalmente ejecuta los programas que se crearon en el paso anterior


Cosas interesantes en eso:

  • La macro es una función, pero recibe código como parámetro! En Lisp, la diferencia entre código y datos es bastante borrosa, uno puede manejar código como si fuesen datos fácilmente. El código son en realidad listas, y podemos transformarlas como a cualquier lista normal.
  • Programamos programas que programan! O sea, hacemos un programa que es capaz de crear código y después ejecutar el código que creó.
  • Si trabajamos en una empresa donde nos pagan por cada línea que programamos... a quien le pagan las líneas que nuestros programas programan? a nuestros programas?? :)

Con un poco de idea nomás, uno ya puede hasta crear macros que permitan escribir código lisp invertido, y que se termine ejecutando como si estuviese bien escrito, jeje.

No hay comentarios:

Publicar un comentario