una resumen que programacion por opcion macro lenguaje latina idea herida definicion decolonial colonial capitulos america macros lisp scheme history racket

macros - resumen - que es un macro en lenguaje c



¿Cuándo apareció la idea de macros(transformación de código definida por el usuario)? (3)

Creo que la idea se remonta a los sistemas de Post , reescribiendo con cadenas ("si ves esta cadena, reemplázala con esa cadena"). Los sistemas de correos son compatibles con Turing y, por lo tanto, pueden computar cualquier cosa (¡incluso los textos del programa!). El artículo de Emil Post sobre estos está fechado en 1943, pero supuestamente hizo la conceptualización original en los años veinte.

El Procesador de macros de propósito general , uno de los primeros más utilizados, estaba disponible a principios de los años sesenta.

TRAC es otro procesador de macros temprano que data del mismo período. La historia de los lenguajes informáticos (TRAC) dice que fue diseñada en 1959.

Ambos son procesadores de macro capaces de Turing.

SNOBOL también data del mismo período.

El hecho de que se estuvieran construyendo procesadores de macros para fines generales a principios de los años 60 me indica que probablemente se hayan construido procesadores de macros para propósitos especiales antes de esa fecha para proporcionar inspiración. Estoy bastante seguro de que los procesadores de macros estaban en uso en ensambladores antes de este punto, pero no tengo evidencia específica.

Sé que COBOL tiene las llamadas bibliotecas COPY, que son un cruce entre macros e archivos de inclusión. No sé cuándo se introdujo en COBOL, pero el idioma se remonta a 1958.

Es interesante tener en cuenta que las macros de LISP se pueden considerar como un caso especial de reescrituras de árbol a árbol ("si ve una expresión s que se parece a esta, sustitúyala por una expresión s que se vea así") . Los árboles se pueden modelar fácilmente como cadenas (ver: "LISP" :) y, por lo tanto, las macros de LISP son un caso especial de reescritura de cadenas.

El caso generalizado de reescritura de árboles es ahora la base de los Sistemas de transformación de programas , que pueden llevar a cabo cambios masivos en el texto del programa.

He leído el artículo de McCarthy de 1960 sobre LISP y no encontré ninguna referencia a nada similar a las macros definidas por el usuario o la evaluación de orden normal. Me preguntaba cuándo aparecieron las macros en la historia del lenguaje de programación (y también en la historia de Lisp):

  • ¿Cuándo se describió por primera vez (teóricamente) la idea de transformación de código definido por el usuario (antes de la interpretación o compilación)?
  • ¿Cuál fue la primera implementación del lenguaje de programación en tener macros similares a Lisp (por "me refiero a" como a Lisp "usando un lenguaje Turing completo para hacer la transformación de código")? (Incluyendo no Lisps - Forth, por ejemplo, es bastante antiguo, pero no estoy seguro si la primera implementación de Forth ya tenía "INMEDIATO")
  • Además, ¿cuál de ellos fue el primer lenguaje de programación de alto nivel (excluir lenguajes de ensamblador ...)
  • ¿Cuál fue el primer dialecto Lisp en tener macros?

¡Gracias!



Para ver cómo se introdujeron las macros en Lisp, debe buscar menciones de FEXPRs y FSUBRs que los antecesores de las macros modernas de Lisp (o más precisamente, los FEXPRs son los antecesores de las macros definidas por el usuario). Estos se mencionan en varios lugares, por ejemplo, en la sección De LISP 1 a LISP 1.5 de la Historia de Lisp de McCarthy. Pero, de hecho, también se mencionó antes: en la p.48 del MANUAL DEL PROGRAMADOR LISP I (desde 1960) puede ver una descripción de FEXPR y FSUBR.

Por cierto, es un poco falso comparar macros de Lisp con sistemas basados ​​en cadenas. La ventaja de usar un transformador de árbol frente a manipulaciones de cadena es lo suficientemente significativa como para convertirlo en un sistema completamente diferente. Otro aspecto importante de las macros de Lisp es que se trata de una transformación local frente a una transformación global del programa (el artículo más obvio para leer sobre esto es el poder expresivo de los lenguajes de programación de Felleisen). Y, por supuesto, aquí hay un área completa: de las FEXPR a las macros más modernas y de mejor comportamiento, luego a las macros higiénicas en el Esquema (que tratan con una representación que es más rica que los árboles simbólicos de análisis), luego una combinación de macros y una sistema de módulos, fases de expansión de sintaxis, etc., etc. Probablemente haya suficientes cosas aquí para leer durante unos años ...