[Estamos en un lento proceso de migración: http://emacs-es.manticore.es -- http://emacs.manticore.es -- http://lisp.manticore.es ]
0.1-Diseño de abajo-arriba
El diseño de abajo-arriba se hace más importante en la medida en que
software crece en complejidad. Los programas actuales pueden tener
que cumplir con especificaciones que son extremadamente complejas, o
incluso con un final abierto. Bajo tales circunstancias, el método
tradicional de arriba-abajo a veces se quiebra. En su lugar ha
evolucionado un estilo de programación bastante diferente a que
actualmente se toma en la mayoría de los cursos de ciencias de la
computación: un estilo de abajo-arriba en el que los programas se
escriben como series de capas, cada una de ellas actuando como una
especie de lenguaje de programación para la superior. X Windows y TeX
son ejemplos de programas escritos en este estilo.
El tema de este libro es doble: que Lisp es un lenguaje natural para
programas escritos en el estilo de abajo-arriba, y que el estilo de
abajo-arriba es una vía natural para escribir programas Lisp. _On
Lisp_ será por tanto de interés para dos clases de lectores. Para las
personas interesadas en escribir programas extensibles, este libro
mostrará lo que se puede hacer si se dispone del lenguaje adecuado.
Para los programadores Lisp, este libro ofrece una explicación
práctica de cómo aprovechar del mejor modo todas las ventajas de Lisp.
El título está pensado para subyarar la importancia de la programación
de abajo-arriba en Lisp. En vez de tan solo escribir programas en
Lisp, se puede escribir un lenguaje propio sobre Lisp, y escribir el
programa en él.
Es posible escribir programas de abajo-arriba en cualquier lenguaje,
pero Lisp es el vehículo más natural para este estilo de programación.
En Lisp, el diseño de abajo-arriba no es una técnica especial
reservada para programas inusualmente largos o difíciles. Cualquier
programa sustancial será escrito parcialmente en este estilo. Lisp
fue concebido desde sus inicios para ser un lenguaje extensible. El
lenguaje en sí es mayormente una colección de funciones Lisp, no
diferentes de lista que uno defina por sí mismo. Y lo que es más, las
funciones Lisp pueden ser expresadas como listas, que son estructuras
de datos Lisp. Esto significa que se pueden escribir funciones Lisp
que generan código Lisp.
Un buen programador Lisp debe saber cómo aprovechar estas
posibilidades. La manera habitual de hacerlo es definir un tipo de
operador llamado macro. Dominar las macros es uno de los pasos más
importantes en el tránsito que va de escribir programas Lisp correctos
a escribirlos bellos. Los libros introductorios a Lisp no tienen
espacio para más de una simple introducción a las macros: una
explicación de qué son las macros, junto con unos cuantos ejemplos que
presentan las extrañas y maravillosas cosas que se pueden hacer con
ellas. Esas cosas extrañas y maravillosas recibirán una atención
especial aquí. Uno de los objetivos de este libro es recoger en un
solo sitio todo lo que la gente ha tenido que aprender sobre las
macros solo mediante la experencia.
Comprensiblemente, los libros introductorios a Lisp no ponen énfasis
en las diferencias entre Lisp y otros lenguajes. Tienen que divuelgar
su mensaje entre estudiantes que en su mayor parte han sido instruidos
para pensar en los programas en términos de Pascal. Sólo se
conseguiría confundir más las cosas si se explicara que, mientras
defun se parece a una definición de procedimiento, es de hecho un
programa que escribe programas que generan código que construye un
objeto funcional y lo indexa bajo el símbolo dado como primer
argumento.
Uno de los propósitos de este libro es explicar lo que hace a Lisp
diferente de otros lenguajes. Cuando empecé, sabía que, siendo
iguales las demás cosas, prefería con mucho escribir programas en Lisp
en vez de en C o en Pascal o Fortran. También sabía que esto no era
simplemente una cuestión de gusto. Pero me dí cuenta que si de hecho
fuera a proclamar que Lisp era en cierto modo un lenguaje mejor, sería
preferible que estuviera preparado para explicar por qué.
Cuando alguien le preguntó a Louis Armstrong qué era el jazz, contestó
"Si tiene que preguntar qué es el jazz, nunca lo sabrá". Pero
contestó a la pregunta de una manera: mostró a la gente lo que era el
jazz. Esa es una vía para explicar el poder de Lisp: mostrar técnicas
que serían difíciles o imposibles en otros lenguajes. La mayoría de
los libros sobre programación -incluidos los libros sobre programación
en Lisp- abordan los tipos de programas que se podrían escribir en
cualquier lenguaje. On Lisp se las entiende mayormente con los tipos
de programas que sólo se podrían escribir en Lisp. La extensibilidad,
la programación de abajo-arriba, el desarrollo interactivo, la
transformación del código fuente, los lenguajes incrustados... aquí es
donde Lisp muestra sus ventajas.
En principio, por supuesto, cualquier lenguaje de programación
Turing-equivalente puede hacer las mismas cosas que cualquier otro.
Pero ese tipo de poder no es el tema central de los lenguajes de
programación. En principio, cualquier cosa que se pueda hacer con un
lenguaje de programación se podrá hacer con una máquina de Turing; en
la práctica, programar una máquina de Turing no soluciona el problema.
Así que cuando digo que este libro trata de cómo hacer cosas que son
imposibles en otros lenguajes, no quiero decir "imposible" en el
sentido matemático, sino en el sentido que importa a los lenguajes de
programación. Esto es, si el lector tuviera que escribir algunos de
los programas de este libro en C, podría hacerlo también escribiendo
primero un compilador Lisp en C. Incrustar Prolog en C, por ejemplo,
¿se puede uno imaginar la cantidad de trabajo que se tomaría? El
Capítulo 24 muestra cómo hacerlo en 180 líneas de Lisp.
Sin embargo, espero hacer algo más que demostrar simplemente el poder
de Lisp. También quiero explicar por qué Lisp es diferente. Esto se
revela como una cuestión sutil, demasiado sutil para ser respondida
con frases como "computación simbólica". Lo que he aprendido hasta
ahora, he intentado explicarlo de la manera más claro posible.
- 595 lecturas

Enviar un comentario nuevo