En informática , un evaluador meta-circular ( MCE ) o un intérprete meta-circular ( MCI ) es un intérprete que define cada característica del lenguaje interpretado utilizando una facilidad similar del idioma anfitrión del intérprete. Por ejemplo, la interpretación de una aplicación lambda se puede implementar usando la función aplicación. [1] La evaluación meta-circular es más prominente en el contexto de Lisp . [1] Un auto-intérprete es un intérprete meta-circular donde el idioma interpretado es casi idéntico al idioma anfitrión; los dos términos se utilizan a menudo como sinónimos. [2]
Historia
La disertación de Corrado Böhm [3] describe el diseño de un autoalojamiento compilador. [4] Debido a la dificultad de compilar funciones de orden superior , muchos lenguajes se definieron a través de intérpretes, principalmente Lisp. [1] [5] El término en sí fue acuñado por John C. Reynolds , [1] y popularizado a través de su uso en el libro Estructura e interpretación de programas de computadora . [2] [6]
Auto-intérpretes
Un auto-intérprete es un intérprete meta-circular donde el idioma anfitrión es también el idioma que se interpreta. [7] Un auto-intérprete tiene una función universal para el idioma en cuestión y puede ser útil para aprender ciertos aspectos del idioma. [8] Un auto-intérprete proporcionará una definición circular y vacía de la mayoría de las construcciones del lenguaje y, por lo tanto, proporcionará poca información sobre la semántica del lenguaje interpretado, por ejemplo , la estrategia de evaluación . Abordar estos problemas produce la noción más general de un "intérprete de definiciones". [1]
Usos
En combinación con una implementación de lenguaje existente, los intérpretes meta-circulares proporcionan un sistema de base desde el cual extender un lenguaje, ya sea hacia arriba agregando más características o hacia abajo compilando características en lugar de interpretarlas. [9] También son útiles para escribir herramientas que están estrechamente integradas con el lenguaje de programación, como depuradores sofisticados. [ cita requerida ] Un lenguaje diseñado con una implementación meta-circular en mente es a menudo más adecuado para construir lenguajes en general, incluso aquellos completamente diferentes del lenguaje anfitrión. [ cita requerida ]
Ejemplos de
Muchos lenguajes tienen una o más implementaciones meta-circulares. A continuación se muestra una lista parcial.
Algunos lenguajes con una implementación meta-circular diseñada de abajo hacia arriba, en orden cronológico agrupado:
- Lisp , 1958
- En cuarto lugar , 1968
- PostScript , 1982
- Prólogo , 1972
- TeX , basado en virgin TeX, 1978
- Smalltalk , 1980
- Rebol , 1997
- Rojo , 2011
- Factor , 2003
Algunos lenguajes con implementación meta-circular a través de terceros:
- Java a través de Jikes RVM , Squawk , Maxine o Espresso de GraalVM
- Scala vía Metascala
- JavaScript a través de Narcissus o JS-Interpreter
- Oz vía Glinda
- Python a través de PyPy
- Ruby a través de Rubinius
- Lua vía Metalua
Ver también
- Expresión M
- Homoiconicidad
- Compilador autohospedado
Referencias
- ↑ a b c d e Reynolds, John C. (agosto de 1972). "Intérpretes de definiciones para lenguajes de programación de orden superior" (PDF) . Computación simbólica y de orden superior . 11 (4): 363–397. doi : 10.1023 / A: 1010027404223 . Consultado el 14 de abril de 2017 . CS1 maint: parámetro desalentado ( enlace )
- ^ a b "El evaluador metacircular" . Estructura e interpretación de programas informáticos . MIT.
- ^ C. Böhm, Calculatrices digitales. Du déchiffrage des formules logico-mathématiques par la machine même dans la conception du program, Ann. Estera. Pura Appl. (4) 37 (1954) 1-51
- ^ Knuth, Donald E .; Pardo, Luis Trabb (agosto de 1976). El desarrollo temprano de lenguajes de programación . pag. 36.
- ^ McCarthy, John (1961). "Una función LISP universal" (PDF) . Manual del programador Lisp 1.5 . pag. 10.
- ^ Harvey, Brian. "Por qué es importante la estructura y la interpretación de programas informáticos" . people.eecs.berkeley.edu . Consultado el 14 de abril de 2017 . CS1 maint: parámetro desalentado ( enlace )
- ^ Braithwaite, Reginald (22 de noviembre de 2006). "La importancia del intérprete meta-circular" . Consultado el 22 de enero de 2011 . CS1 maint: parámetro desalentado ( enlace )
- ^ Reynolds, John C. (1998). "Interpretadores de definiciones revisados" (PDF) . Computación simbólica y de orden superior . 11 (4): 356–7. doi : 10.1023 / A: 1010075320153 . Consultado el 14 de abril de 2017 . CS1 maint: parámetro desalentado ( enlace )
- ^ Oriol, Manuel; Meyer, Bertrand (29 de junio de 2009). Objetos, componentes, modelos y patrones: 47ª Conferencia Internacional, TOOLS EUROPE 2009, Zúrich, Suiza, 29 de junio al 3 de julio de 2009, Actas . Springer Science & Business Media. pag. 330. ISBN 9783642025716. Consultado el 14 de abril de 2017 . CS1 maint: parámetro desalentado ( enlace )
- ^ Implementación meta-circular del lenguaje de programación Pico
enlaces externos
- Estructura e interpretación de programas informáticos (SICP) , versión en línea del libro completo, consultado el 18 de enero de 2009 .
- Metascala