Cuando los programadores discuten las ventajas de varios lenguajes de programación, a menudo hablan de ellos en términos prosaicos, como herramientas en un conjunto de varios dispositivos: uno es más adecuado para la programación del sistema y el otro para pegar otros programas para resolver el problema actual. Debería ser así. Los idiomas tienen fortalezas diferentes, y afirmar que un idioma es mejor que otros idiomas sin especificar ejemplos específicos significa solo causar debates improductivos y agudos.
Sin embargo, hay un lenguaje que extrañamente despierta el respeto universal:
Lisp . Los cruzados de los teclados, listos para atacar a cualquiera que se atreva a declarar que cualquier idioma es mejor que otros, están de acuerdo en que Lisp está en un nivel diferente. Va más allá de los criterios utilitarios por los cuales se juzgan otros lenguajes, ya que el programador promedio nunca usó Lisp para crear nada práctico, y probablemente nunca lo hará, sin embargo, el respeto por Lisp es tan profundo que a menudo se le atribuye propiedades míticas Los cómics xkcd favoritos de todos retratan a Lisp al menos dos veces: en un cómic, un personaje logra la iluminación de Lisp, lo que lo ayuda a comprender la estructura fundamental del universo. En otro, un viejo programador en bata entrega una pila de paréntesis a su padawan, explicando que esta es "un arma elegante para tiempos más civilizados", aludiendo a las posibilidades ocultas de la
Fuerza inherentes a Lisp.
Otro gran ejemplo es la parodia de Bob Kanefsky de la canción "Dios vive en Terra". Su parodia fue escrita a mediados de los 90 y se llama "Llama eterna". Ella describe cómo, aparentemente, Dios creó el mundo con la ayuda de Lisp. Lo siguiente es un extracto, y la versión completa se puede encontrar en el sitio web de
GNU Humor Collection :
Después de todo, Dios escribió en Lisp
Cuando llenó las hojas de verde.
Flores fractales y raíces recursivas:
El truco más hermoso que he visto.
Y cuando estudio los copos de nieve
Y no encuentro dos de lo mismo
Se que Dios ama el lenguaje
Con su propio nombre de cuatro letras.
Hablo solo por mí mismo, pero me parece que el meme cultural "Lisp es magia secreta" es el fenómeno más extraño e interesante. Lisp fue concebido en una torre de marfil como una herramienta para investigar la inteligencia artificial, por lo que siempre será un poco desconocido y misterioso para los programadores comunes. Sin embargo, ahora los programadores se
presionan entre sí para "probar Lisp antes de morir", como si fuera una especie de droga psicodélica que amplía la conciencia. Lo hacen a pesar del hecho de que Lisp es el segundo lenguaje de programación más antiguo que todavía usan, solo superado por
Fortran , y eso es solo un año. Imagine que la compañía o el equipo que lo desarrolló le indicaría que anuncie un nuevo lenguaje de programación. ¿No sería genial poder convencer a todos de que tu nuevo idioma tiene poderes divinos? Pero, ¿cómo podría lograrse esto? ¿Cómo se hizo famoso el lenguaje de programación como fuente de conocimiento secreto?
¿Cómo llegó Lisp a esto?
Byte Magazine Cover, agosto de 1979Teoría A: lenguaje axiomático
John McCarthy , el creador de Lisp, inicialmente no buscó hacer de Lisp la esencia elegante de los principios computacionales. Pero, después de una o dos ideas exitosas y varias mejoras, Lisp se convirtió en eso.
Paul Graham , hablaremos de eso más tarde, escribió que, después de haber creado Lisp, McCarthy "hizo lo mismo para la programación que Euclides hizo para la geometría". Quizás la gente está buscando un significado más profundo en Lisp, porque McCarthy lo creó a partir de partes tan fundamentales que es difícil decir si lo inventó o descubrió.
McCarthy comenzó a reflexionar sobre la creación del lenguaje durante el
Proyecto de investigación de inteligencia artificial de verano de Dartmouth de 1956 . Este taller fue una conferencia académica continua de varias semanas, la primera en el campo de la IA. Por cierto, fue McCarthy, entonces, como profesor asociado de matemáticas en Dartmoor, quien acuñó el término "inteligencia artificial", y propuso celebrar esta reunión. A la conferencia asistieron unas diez personas. Entre ellos estaban Allen Newel y Herbert Simon, dos investigadores asociados con RAND Corporation y la Universidad Carnegie Mellon, que acababan de completar el desarrollo del lenguaje
IPL .
Newel y Simon intentaron crear un sistema capaz de entregar evidencia en la
lógica de los enunciados . Se dieron cuenta de que sería difícil hacer esto, permaneciendo al nivel de sus propias instrucciones de computadora, por lo que decidieron crear un lenguaje, o, como lo llamaron, un "pseudocódigo", que los ayudaría a expresar de forma más natural el trabajo de su "máquina de lógica teórica". Su lenguaje, IPL, el "lenguaje de procesamiento de información", se parecía más a un dialecto de alto nivel de ensamblador que a un lenguaje de programación en el sentido moderno. Newel y Simon, posiblemente refiriéndose a Fortran, notaron que los "otros pseudocódigos" que estaban en desarrollo estaban "ocupados" representando las ecuaciones en notación matemática estándar. En cambio, su lenguaje se centró en presentar declaraciones como listas de expresiones simbólicas. Los programas de IPL utilizaron secuencias de ensamblaje de macros para procesar y evaluar expresiones dentro de una o más de estas listas.
McCarthy pensó que sería útil tener expresiones algebraicas en un lenguaje similar a Fortran. Por lo tanto, no le gustó la IPL. Pero pensó que las listas simbólicas son una buena manera de modelar tareas desde el campo de la IA, especialmente aquellas que incluyen la deducción. Era el germen del deseo de McCarthy de crear un lenguaje de procesamiento de listas algebraicas, un lenguaje que se pareciera a Fortran, pero que pudiera manejar listas simbólicas como la IPL.
Por supuesto, hoy Lisp no se parece a Fortran. En los próximos años, las ideas de McCarthy para un lenguaje ideal de procesamiento de listas han evolucionado. Sus ideas comenzaron a cambiar en 1957 cuando comenzó a escribir procedimientos para el programa de ajedrez Fortran. La larga exposición de Fortran convenció a McCarthy de que había varios puntos negativos en su diseño, el principal era la torpe declaración de IF. McCarthy inventó una alternativa, la expresión condicional "verdadero", devolviendo la subexpresión A si la verificación dada fue exitosa, y la subexpresión B en otro caso, y ejecutando solo la subexpresión que se devolvió. En el verano de 1958, cuando McCarthy estaba trabajando en un programa capaz de diferenciarse, se dio cuenta de que su expresión condicional "verdadera" hacía que la escritura de funciones recursivas fuera más simple y natural. El problema de diferenciación también llevó a McCarthy a escribir una función de lista de mapas que toma otra función como argumento y la aplica a todos los elementos de la lista. Fue útil para diferenciar las sumas de un número arbitrario de miembros.
Fortran no podía expresar tales cosas, por lo que en el otoño de 1958 McCarthy pidió a varios estudiantes la tarea de implementar Lisp. Como McCarthy era ahora profesor asociado en el MIT, todos los estudiantes estudiaron en el MIT. Al traducir las ideas a código de trabajo, McCarthy y los estudiantes hicieron cambios que simplificaron aún más el lenguaje. La mayor de ellas fue la sintaxis de Lisp. McCarthy al principio quería el llamado "Expresiones M", una capa de "
azúcar sintáctico " que hacía que la sintaxis de Lisp se pareciera a Fortran. Aunque las expresiones M pueden traducirse en expresiones S, una lista simple entre paréntesis por la que es famoso Lisp, las expresiones S eran realmente una representación de bajo nivel para una computadora. El único problema era que McCarthy denotaba expresiones M con corchetes, y no había corchetes en el punzón IBM 026 utilizado en MIT. Por lo tanto, el equipo de Lisp se limitó a las expresiones S y las usó para representar no solo listas de datos, sino también el uso de funciones. McCarthy y los estudiantes hicieron varias otras simplificaciones, incluido el cambio a la grabación de prefijos y un modelo de memoria en el que el idioma solo tenía un tipo de real.
En 1960, McCarthy publicó el famoso trabajo sobre Lisp "Funciones recursivas de las expresiones simbólicas y su cálculo por máquina]. Para entonces, el lenguaje se había reducido hasta tal punto que McCarthy se dio cuenta de que había creado un "sistema matemático elegante", y no solo otro lenguaje de programación. Más tarde escribió que muchas de las simplificaciones en Lisp lo convirtieron en "una forma de describir funciones calculadas, mucho más precisas que las máquinas de Turing o las definiciones recursivas generales utilizadas en la teoría de las funciones recursivas". En su trabajo, presentó a Lisp como un lenguaje de programación funcional y como un formalismo para estudiar el comportamiento de las funciones recursivas.
McCarthy explicó Lisp a los lectores, construyéndolo a partir de un pequeño conjunto de reglas. Más tarde, Paul Graham siguió los pasos de McCarthy usando un lenguaje más fácil de leer en su ensayo
Roots of Lisp . Graham puede explicar Lisp con solo siete operadores primitivos, dos entradas diferentes para funciones y seis funciones de alto nivel definidas a través de operadores primitivos. La capacidad de definir Lisp con una secuencia tan pequeña de reglas simples sin duda se suma a su misterio. Graham calificó el trabajo de McCarthy como un intento de "axiomatizar la computación". Creo que esta es una excelente manera de reflexionar sobre el atractivo de Lisp. En otros idiomas, existen construcciones claramente artificiales descritas por palabras reservadas como while, typedef o public static void; parece que la descripción de Lisp está limitada por la lógica de los cálculos. Esta cualidad y la conexión original de Lisp con un campo tan esotérico como la "teoría de las funciones recursivas" debería explicar el prestigio actual del lenguaje.
Teoría B: la máquina del futuro
Dos décadas después de su creación, Lisp se ha convertido, según el famoso "
diccionario de informáticos ", en el "idioma nativo" de la investigación de IA. Lisp se extendió rápidamente en las primeras etapas, probablemente debido al hecho de que su sintaxis sistemática hizo la tarea de su implementación en máquinas nuevas relativamente sencilla. Más tarde, los investigadores continuaron usándolo debido a lo bien que manejaban las expresiones simbólicas, lo cual era importante en una era en la que la mayoría de las IA eran simbólicas. Lisp se utilizó en proyectos de IA tan prolíficos como el programa de lenguaje natural
SHRDLU , el
sistema de álgebra computacional
Macsyma y el sistema lógico
ACL2 .
A mediados de la década de 1970, los investigadores de IA comenzaron a carecer de energía informática. Por ejemplo, el PDP-10, la máquina de IA favorita de todos, tenía un espacio de direcciones de 18 bits, que cada vez faltaba para los programas de IA en Lisp. Muchos programas de IA también tenían que ser interactivos, y crear un gran programa interactivo que funcionara bien en un sistema de tiempo compartido era una tarea difícil. La solución que Peter Deutsch del MIT propuso por primera vez fue desarrollar una computadora dedicada para Lisp.
Dichas máquinas deberían proporcionar a cada usuario un procesador dedicado optimizado para Lisp. También tenían que tener un entorno de desarrollo escrito en Lisp para programadores hardcore de Lisp. Las máquinas Lisp, inventadas en un momento incómodo al final de la era de las mini computadoras, pero antes del apogeo de la revolución de las microcomputadoras, eran computadoras personales de alto rendimiento para la élite de los programadores.
Durante un tiempo, parecía que las máquinas Lisp serían la ola del futuro. Hubo varias empresas que comenzaron a competir por la comercialización de esta tecnología. El más exitoso de estos fue Symbolics, creado por veteranos del MIT AI Lab. En la década de 1980, Symbolics lanzó su serie 3600 de computadoras, populares en la industria de IA y en industrias que requieren computación de alta potencia. La línea 3600 incluía computadoras con pantallas grandes, gráficos de mapas de bits, una interfaz basada en mouse y potentes programas de gráficos y animación. Estas fueron máquinas impresionantes que hicieron posible escribir programas impresionantes. Por ejemplo, Bob Cali, que trabajó en el campo de la investigación de robótica, me escribió a través de Twitter que pudo implementar y visualizar el algoritmo de búsqueda de ruta en Symbolics 3650 en 1985. Dijo que los gráficos de trama y OOP (disponibles en máquinas Lisp gracias a la extensión Flavors) eran nuevos en la década de 1980. La simbólica estaba a la vanguardia.

Pero como resultado, las computadoras Symbolics eran increíblemente caras. Symbolics 3600 costó $ 110,000 en 1983. La mayoría de las personas solo podían maravillarse con el poder de las máquinas Lisp y la magia de los operadores que escriben en Lisp desde lejos. Pero se maravillaron. La revista Byte describió las máquinas Lisp y Lisp varias veces entre 1979 y finales de la década de 1980. En la edición de agosto de 1979 de Lisp, el editor en jefe estaba entusiasmado con las nuevas máquinas que se estaban desarrollando en el MIT, "con una montaña de memoria" y un "sistema operativo avanzado". Los consideraba tan prometedores que los dos años anteriores en los que aparecieron Apple II, Commodore PET y TRS-80 parecían aburridos. Cinco años más tarde, en 1985, el autor en la revista Byte describió el proceso de escribir programas Lisp para el "Symbolics 3670 complejo y extremadamente poderoso", y alentó a los lectores a aprender Lisp, afirmando que era "un lenguaje que necesitaban la mayoría de los investigadores de IA". y un candidato para un futuro lenguaje de propósito general.
Le pregunté a Paul MacJones,
que había hecho mucho para salvar a Lisp en el Museo de Historia de la Computadora de Mountain View, sobre cuándo la gente comenzó a hablar de Lisp como un regalo de criaturas de dimensiones superiores. Dijo que las características del lenguaje en sí mismo ciertamente contribuyeron a esto, pero también la estrecha conexión entre Lisp y las potentes aplicaciones de inteligencia artificial en los años sesenta y setenta. Cuando fue posible comprar máquinas Lisp en la década de 1980, unas pocas personas más se reunieron fuera de lugares como MIT o Stanford, y la leyenda continuó creciendo. Hoy, pocas personas recuerdan las máquinas y Symbolics de Lisp, pero ayudaron a mantener el aura del misterio de Lisp hasta la década de 1980.
Teoría B: entrenamiento de programación
En 1985, los profesores del MIT, Harold Abelson y Gerald Sasman, así como la esposa de Sasman, Julia, publicaron el libro de texto Estructura e interpretación de programas de computadora. En el libro de texto, a los lectores se les enseñó programación en el lenguaje Scheme, el dialecto Lisp. Fue utilizado en el MIT para una introducción a la programación durante dos décadas. Me parece que este es un libro de texto, SICP, agregó misticismo a Lisp. SICP tomó a Lisp y mostró cómo se puede usar para ilustrar los conceptos profundos, casi filosóficos, del arte de la programación. Estos conceptos fueron lo suficientemente comunes como para usar cualquier PL, pero los autores de SICP eligieron Lisp. Como resultado, la reputación de Lisp se complementó con la notoriedad de este libro extraño y brillante que intrigó a muchas generaciones de programadores (y se convirtió en un
meme muy extraño ). Lisp siempre ha sido el "elegante formalismo de McCarthy"; ahora también se ha convertido en un lenguaje "que le enseña los secretos ocultos de la programación").
Vale la pena hablar un poco sobre lo extraño que es este libro, porque me parece que su extrañeza y extrañeza Lisp se fusionó hoy en uno. La extrañeza comienza en la portada. Representa a un mago o un alquimista acercándose a una mesa, y listo para comenzar algún tipo de brujería. En una mano tiene un calibre o brújula, en la otra, un globo con las inscripciones "eval" y "apply". La mujer frente a él señala la mesa; en el fondo está la letra griega lambda que irradia en el aire.

¿Qué está pasando aquí? ¿Por qué hay una pata de animal en la mesa? ¿Por qué una mujer señala la mesa? ¿Cuál es el significado del tintero? ¿Deberíamos entender que el mago reveló el conocimiento secreto del universo, y que consisten en un ciclo de evaluación / aplicación y
cálculo lambda ? Aparentemente lo es. Solo esta imagen debería haber agregado mucho a la percepción actual de Lisp.
Pero el texto del libro en sí a menudo resulta igual de extraño. SICP no es como la mayoría de los otros libros sobre informática. Los autores del prefacio explican que el libro no trata solo de programación en Lisp, sino que cuenta "tres trucos o fenómenos: la mente humana, un conjunto de programas de computadora y una computadora". Más adelante describen que están convencidos de que la programación no debe considerarse como una disciplina de la informática, sino como un nuevo registro de "
epistemología procesal". Los programas son una nueva forma de estructurar pensamientos que solo se ingresan ocasionalmente en una computadora. El primer capítulo ofrece un breve recorrido por Lisp, pero la mayor parte del libro trata sobre conceptos más abstractos. Discute varios paradigmas de programación, la naturaleza del tiempo y la identidad en los sistemas OO, y en un lugar, qué problemas de sincronización pueden surgir debido a las limitaciones fundamentales del paso de mensajes, que juegan el papel de la velocidad de la luz en la teoría de la relatividad. Estas son cosas bastante abstrusas.
Y no quiere decir que el libro sea malo. Ella es maravillosa Discute conceptos importantes de programación a un nivel más alto que en todos los otros libros que leí, conceptos que pensé durante mucho tiempo pero que no pude describir. Sorprendentemente, la introducción al libro de texto de programación puede describir rápidamente las desventajas fundamentales de OOP y las ventajas de los lenguajes funcionales que minimizan un estado mutable.
Es sorprendente cómo esto se convierte en una discusión sobre cómo el paradigma de transmisión, probablemente algo así como el RxJS de hoy , puede brindarle lo mejor de ambos enfoques. SICP destaca la esencia misma del desarrollo de programas de alto nivel de una manera que recuerda el trabajo original de McCarthy en Lisp. Lo primero que quiere hacer después de leer este libro es hacer que sus compañeros programadores lo lean; si lo encuentran, ven la portada y no leen, entonces todo lo que se pospondrá es que algo misterioso llamado eval / apply les da a los magos un poder especial sobre las mesas con patas de animales. Me habrían impresionado sus zapatos.Pero quizás la contribución más importante de SICP fue elevar a Lisp de un curioso nivel de curiosidad a una necesidad pedagógica. Mucho antes del SICP, las personas se aconsejaban mutuamente aprender Lisp para mejorar su nivel como programador. Número de 1979 de Byte Magazine. El mismo editor, que admiraba las nuevas máquinas Lisp en el MIT, explicó que vale la pena aprender este idioma porque "representa un punto de vista diferente sobre las tareas". Sin embargo, en SICP, Lisp se presentó no solo como un contraste con otros idiomas. Fue utilizado como un lenguaje introductorio, insinuando que es el mejor lenguaje para aprender conceptos básicos de programación. Cuando los programadores de hoy se aconsejan entre sí que prueben Lisp antes de morir, probablemente lo hagan por SICP. Después de todo, Brainfuck probablemente también ofrece una "perspectiva diferente de las tareas".Pero la gente en cambio estudia Lisp, sabiendo que durante veinte años el punto de vista de Lisp ha sido tan útil que los estudiantes del MIT enseñaron Lisp a todos los demás idiomas.Lisp Return
En el año en que se lanzó SICP, Björn Straustrup publicó la primera edición del libro " C ++ Programming Language ", que llevó la POO a las masas. Unos años más tarde, el mercado de máquinas Lisp colapsó y comenzó el invierno de la IA . Durante los siguientes diez años más o menos, C ++ y luego Java se convirtieron en los lenguajes del futuro, y Lisp vegetó.Naturalmente, es imposible indicar cuándo exactamente las personas comenzaron a admirar a Lisp nuevamente. Quizás esto sucedió después de que Paul Graham, cofundador de Y-Combinator y creador de Hacker News, publicó varios ensayos influyentes que describen a Lisp como el mejor lenguaje para las nuevas empresas. En ensayo antes del medio"Graham afirmó que las macros de Lisp hicieron que el lenguaje fuera más fuerte que otros idiomas. Afirmó que usar Lisp en su startup Viaweb lo ayudó a desarrollar ciertas cosas más rápido que sus competidores. Algunos programadores estaban convencidos. Pero la mayoría no se cambió a Lisp".En cambio, cada vez más características de Lisp comenzaron a caer en los idiomas favoritos de todos. Python ha agregado la generación de listas. En C # - Linq. En Ruby ... bueno, Ruby es Lisp. Como Graham señaló en 2001, "el idioma predeterminado, integrado en muchos de los lenguajes populares posteriores, evolucionó gradualmente hacia Lisp". Y mientras que otros idiomas se están acercando gradualmente a Lisp, el mismo Lisp de alguna manera mantiene su reputación especial como un idioma misterioso que pocos entienden, pero todos necesitan aprender. En 1980, en el año del vigésimo aniversario de Lisp, McCarthy escribió que Lisp había sobrevivido durante el tiempo que tomó "un óptimo local aproximado de algún tipo en el espacio de PL". Pero esto subestima la influencia real de Lisp. Ha sobrevivido durante cincuenta años porque los programadores reconocieron de mala gana, década tras década, que esta es la mejor herramienta para su tarea. Él sobrevivió aunqueque la mayoría de los programadores no lo usan. Debido a su origen y uso en la investigación de IA, y quizás también al legado de SICP, Lisp continúa deleitando a las personas. Y hasta que podamos imaginar a Dios que creó el mundo con la ayuda de un lenguaje más nuevo, Lisp no irá a ninguna parte.