Lisp.Qxd 17/10/05 12:42 Página 46
Total Page:16
File Type:pdf, Size:1020Kb
46-49 lisp.qxd 17/10/05 12:42 Página 46 Ciencia e investigación Un lenguaje de casi 50 años de historia LLiisspp ((II)) David Arroyo Menéndez, José E. Marchesi finanzas, y también en la educación en ingeniería informática y, por supuesto, en investigación. Lisp es una familia de lenguajes de El nombre Lisp viene de “Procesamiento de Listas”. La estructura de datos de listas y las primitivas para programación con una larga historia. manejarlas son el denominador común de todos los Desarrollado originalmente como una dialectos Lisp, como ya explicaremos más adelante. Otras características comunes de los dialectos Lisp implementación de un modelo incluyen el tipado dinámico, el soporte a la progra- computacional, rápidamente se mación funcional y la habilidad para manejar códi- go fuente como datos. convirtió en el lenguaje favorito para Los lenguajes Lisp tienen una apariencia rápida- hacer investigación en el ámbito de la mente reconocible. El código del programa es escri- to usando la misma sintaxis de listas: la sintaxis de inteligencia artificial. S-expressions. Cada subexpresión en un programa (o estructura de datos) está rodeada con paréntesis. Lisp ha sido pionero en el uso de estructuras de árbol Esto hace que los lenguajes Lisp sean fáciles de par- (S-Expressions), recolección de basura, intérpretes y sear y también de metaprogramar, esto es, crear pro- programación funcional. Hoy dialectos Lisp son usa- gramas que escriben otros programas. Esta es la dos en muchos campos, desde el desarrollo web a las mayor razón para su gran popularidad en los años 70 y 80; los programadores de inteligencia artificial Tabla 1. creyeron que esta característica de Lisp resolvería fácilmente grandes problemas de la IA. Número de resultados en Google en agosto de 2005 Lisp se especificó en 1958, convirtiéndose en el Búsqueda Número de resultados segundo lenguaje de programación de alto nivel que “programming language” java 3.360.000 se usa hoy; solo Fortran es más viejo. Al igual que “programming language” c -c++ 2.790.000 Fortran, Lisp ha cambiado bastante desde sus prime- “programming language” c++ 2.020.000 ros día y numerosos dialectos han existido a través “programming language” perl 1.010.000 de su historia. Hoy, los dialectos Lisp más usados “programming language” python 881.000 para programar son Common Lisp y Scheme. “programming language” shell 568.000 “programming language” lisp 573.000 Historia de Lisp “programming language” ruby 292.000 “programming language” tcl 249.000 Information Processing Language (IPL) fue el primer lenguaje de Inteligencia Artificial (IA), desde 1955 o 1956, y ya incluía muchos de los conceptos, tales Tabla 2. Relación de lenguajes y número de proyectos como procesamiento de listas y facilidades para la recursividad, que fueron usadas en Lisp. en Sourceforge en agosto de 2005 Lisp fue inventado por John McCarthy en 1958 Lenguaje Número de proyectos mientras él estaba en el MIT. McCarthy publicó su C++ 16.111 diseño en un artículo de Comunicaciones del ACM Java 15.849 en 1960, titulado “Recursive Functions of Symbolic C 15.396 Expressions and Their Computation by Machine, Part Perl 6.039 I” (Funciones Recursivas de Expresiones Simbólicas y Python+Zope 4.409 su Computación por Máquinas, Parte I). Curiosa- C# 2.646 mente la segunda parte nunca fue publicada. Él Unix Shell 1.767 mostraba que con unos pocos simples operadores y Tcl 892 una notación para funciones, se puede construir un Ruby 365 lenguaje de programación completo. Scheme 195 La notación original usada por McCartyhy estaba Common Lisp 18 basada en “M-expressions”. Esta fue rápidamente Emacs Lisp 9 abandonada en favor de las S-expressions que él MUNDO nº84 Linux 46 http://digital.revistasprofesionales.com 46-49 lisp.qxd 17/10/05 12:42 Página 47 Ciencia e investigación Lisp (I) programas. Las técnicas de construcción de Lisp no es tan usado como otros lenguajes; sin compiladores modernos y las gigantescas embargo, constituye una pieza fundamental capacidades de los computadores de hoy en para entender la historia de la informática y día han hecho esta especialización hardware gente bastante inteligente sigue escribiendo innecesaria y hoy disfrutamos de entornos código Lisp. Lisp mucho más eficientes que otros lengua- jes más populares. Lisp como lenguaje de extensión Entre 1980 y 1990, se hace un gran esfuer- zo para unificar los numerosos dialectos Lisp Lisp ha sido usado múltiples veces como len- dentro de un lenguaje simple. El nuevo len- guaje de extensión. Los ejemplos más popu- guaje, liderado por Guy Steele, se llamaría lares en la informática han sido Emacs y Common Lisp y era esencialmente un super- AutoCAD, pero no han sido los únicos: gimp, conjunto de los dialectos reemplazados. En gnucash, texmacs son aplicaciones intere- 1994, ANSI publicaba el estándar Common santes para las que nos será útil haber apren- Lisp, “ANSI X3.226-1994 Information dido lisp. Technology Programming Language Common La primera comunidad que se generó alre- Lisp”. En esos momentos el mercado que había dedor de software libre se generó alrededor entorno a Lisp ya era bastante pequeño, com- de Emacs y el primer proyecto de GNU fue parado con el de unos años atrás. GNU Emacs. No es un proyecto cualquiera, es Mientras eso ocurría Richard Stallman un proyecto importante. Tened en cuenta anunció en 1983 el proyecto GNU, para que más del 90% de lo que hacemos cuando crear un nuevo sistema operativo libre. estamos delante del ordenador es editar Se puede automatizar trabajo en Puesto que lo que tendría que hacer el texto, así es que la herramienta con la que The Gimp gracias a scripts en Scheme Lisp. 90% del tiempo que empleara con la compu- hacerlo tiene que ser cómoda. tadora para llevar a cabo su proyecto sería Cuando Stallman creó el proyecto GNU se le originalmente propuso como una representa- editar texto decidió empezar creando un edi- pasó por la cabeza hacerlo todo con Lisp, pero ción interna. Por ejemplo, la M-expresssion tor llamado Emacs (editor de macros) y con por razones de eficiencia y dada la velocidad de car[cons[A,B]] es equivalente a la S-expression Emacs surgió Emacs Lisp, también conocido las máquinas de aquel entonces se decantó por (car (cons A B)). como elisp. De este modo, el primer progra- hacer las herramientas de bajo nivel en C. A Lisp fue originalmente implementado por ma libre fue desarrollado por una comunidad pesar de eso en GNU habría Lisp, y así fue. Steve Russell en un ordenador IBM 704 y los de programadores Lisp. En 1990 el editor y el Emacs tiene un pequeño núcleo escrito en dos lenguajes de macros para esta máquina compilador de GNU estaría completos. C; no obstante, todos los modos están escritos llegaron a ser las operaciones primitivas para En 1986 en el mundo del software privati- en Lisp y así cambiar el comportamiento de descomposición de listas: car (Contents of vo surge otro lenguaje específico de la aplica- cualquier cosa que estés haciendo en Emacs Address Register) y cdr (Contents of ción: AutoLisp (renombrado posteriormente significa evaluar Lisp, lo cual se hace de una Decrement Register). Los dialectos Lisp todavía como VisualLisp), un lenguaje para extender manera tan natural e integrada con el editor usan car y cdr para las operaciones que AutoCAD (un programa verdaderamente que a veces es incluso usando el ratón. devuelven el primer ítem de una lista y el resto extendido en ingeniería y arquitectura) y que De este modo, se pueden crear abreviaturas de la misma respectivamente. ha generado mucho código Lisp. para supercalifragilísticoespialidoso que es El primer compilador de Lisp completo y En 1995 en GNU están pensando en hacer una palabra larga que por una serie de razo- escrito en Lisp fue implementado en 1962 aplicaciones para el escritorio y les gustaría nes vas a tener que escribir muchas veces en por Tim Hart y Mike Levin. (AI Memo 39, 767 tener un lenguaje de programación para distintos documentos. También puedes crear- kB PDF (ftp://publications.ai.mit.edu/ai- poder escribirlas de un modo fácil y extensible te fácilmente una función Lisp para comentar publications/pdf/AIM-039.pdf)). Este compi- como en el editor de gnu, es decir, GNU el código de un lenguaje raro con el que vas a lador ya introducía el modelo Lisp de compi- Emacs. En ese momento TCL está sirviendo tener que programar durante unos meses y al lación incremental, en el que las funciones muy bien para ese propósito. A Richard que además te gustaría asociarle un atajo de compiladas e interpretadas pueden mezclar- Stallman no le gustó básicamente porque, teclado. Todo esto y muchísimo más es tan se libremente. aunque hereda algunas ideas de Lisp, TCL no sencillo como escribir y evaluar Lisp sin tener Desde su concepción, Lisp estaba estrecha- es Lisp y decidieron crear Scheme, el lenguaje que apagar el Emacs. Y cuando decimos sen- mente conectado con la comunidad investiga- de extensibilidad estándar para GNU. cillo es que es sencillo; Stallman comentaba dora en inteligencia artificial. En los años 70, No se eligió Common Lisp porque parecía que incluso administrativas acababan creando se empieza a comercializar la IA y el rendi- bastante largo y prefirieron algo más sencillo. programas Lisp debido a que nadie les decía miento de los sistemas Lisp existentes llega a La idea era tener un intérprete de Scheme que estaban programando, que les soluciona- cuestionarse seriamente, en parte debido a diseñado para ser enlazado dentro de aplica- ba problemas reales y que había una buena utilizar un recolector de basura y en parte por- ciones tal y como TCL lo hacía. El principal documentación integrada.