stringtranslate.com

Bucle de lectura-evaluación-impresión

Un bucle de lectura-evaluación-impresión ( REPL ), también denominado shell de lenguaje o nivel superior interactivo , es un entorno de programación informática interactivo simple que toma entradas de usuario individuales, las ejecuta y devuelve el resultado al usuario; un programa escrito en un entorno REPL se ejecuta por partes. [1] El término generalmente se refiere a interfaces de programación similares al entorno interactivo clásico de la máquina Lisp . Los ejemplos comunes incluyen shells de línea de comandos y entornos similares para lenguajes de programación , y la técnica es muy característica de los lenguajes de script . [2]

Historia

En 1964, la expresión ciclo READ-EVAL-PRINT es utilizada por L. Peter Deutsch y Edmund Berkeley para una implementación de Lisp en el PDP-1 . [3] Tan solo un mes después, Project Mac publicó un informe de Joseph Weizenbaum (el creador de ELIZA , el primer chatbot del mundo) que describe un lenguaje basado en REPL, llamado OPL-1, implementado en su lenguaje Fortran-SLIP en el Compatible Time Sharing System (CTSS) . [4] [5] [6]

El manual de referencia de Maclisp de 1974 de David A. Moon menciona "bucle de lectura-evaluación-impresión" en la página 89, pero no utiliza el acrónimo REPL. [7]

Desde al menos la década de 1980, las abreviaturas REP Loop y REPL están atestiguadas en el contexto del Esquema . [8] [9]

Descripción general

En un REPL, el usuario ingresa una o más expresiones (en lugar de una unidad de compilación completa ) y el REPL las evalúa y muestra los resultados. [1] El nombre bucle read–eval–print proviene de los nombres de las funciones primitivas de Lisp que implementan esta funcionalidad:

Luego, el entorno de desarrollo regresa al estado de lectura, creando un bucle que finaliza cuando se cierra el programa.

Los REPL facilitan la programación exploratoria y la depuración porque el programador puede inspeccionar el resultado impreso antes de decidir qué expresión proporcionar para la siguiente lectura. El ciclo de lectura-evaluación-impresión involucra al programador con más frecuencia que el ciclo clásico de edición-compilación-ejecución-depuración.

Debido a que la función de impresión genera el mismo formato de texto que la función de lectura utiliza para la entrada, la mayoría de los resultados se imprimen en un formato que se puede copiar y pegar nuevamente en el REPL. Sin embargo, a veces es necesario imprimir representaciones de elementos que no se pueden volver a leer de manera sensata, como un identificador de socket o una instancia de clase compleja. En estos casos, debe existir una sintaxis para los objetos ilegibles. En Python, es la <__module__.class instance>notación y, en Common Lisp, la #<whatever>forma. El REPL de CLIM , SLIME y Symbolics Lisp Machine también puede volver a leer objetos ilegibles. Registran para cada salida qué objeto se imprimió. Más tarde, cuando se vuelve a leer el código, se recuperará el objeto de la salida impresa.

Se pueden crear REPL para admitir cualquier lenguaje basado en texto. La compatibilidad de REPL con lenguajes compilados se logra generalmente implementando un intérprete sobre una máquina virtual que proporciona una interfaz al compilador. Por ejemplo, a partir de JDK 9, Java incluyó JShell como una interfaz de línea de comandos para el lenguaje. Varios otros lenguajes tienen herramientas de terceros disponibles para descargar que brindan una interacción de shell similar con el lenguaje.

Usos

Como shell , un entorno REPL permite a los usuarios acceder a funciones relevantes de un sistema operativo además de proporcionar acceso a capacidades de programación. El uso más común de los REPL fuera de los shells del sistema operativo es para la creación de prototipos interactivos . [10] Otros usos incluyen el cálculo matemático, la creación de documentos que integran análisis científicos (por ejemplo, IPython ), el mantenimiento de software interactivo, la evaluación comparativa y la exploración de algoritmos.

Especificaciones de Lisp

Implementación

Una definición mínima es:

( definir ( REPL env ) ( imprimir ( eval env ( leer ))) ( REPL env ) )         

donde envrepresenta evalel entorno de -uación inicial. También se supone que envpuede actualizarse destructivamente mediante eval.

Funcionalidad

La funcionalidad típica proporcionada por un REPL de Lisp incluye:

Véase también

Referencias

  1. ^ ab Grillmeyer, O. (2013). Explorando la informática con Scheme. Textos de pregrado en informática. Springer Nueva York. p. 239. ISBN 978-1-4757-2937-5. Recuperado el 26 de junio de 2021. El componente central del intérprete de Scheme es el bucle read-eval-print . Los comandos se leen y luego se evalúan. Finalmente, se imprime el resultado evaluado.
  2. ^ Hola, Tony; Pápay, Gyuri (2014). El universo informático: un viaje a través de una revolución . Cambridge University Press. pág. 76. ISBN 978-1-316-12322-5"Una característica importante de los lenguajes de programación modernos es su interactividad, a veces denominada entorno de programación REPL . ... Las características de facilidad de uso y ejecución inmediata con un entorno REPL a veces se toman como la definición de un lenguaje de programación".{{cite book}}: Mantenimiento de CS1: postscript ( enlace )
  3. ^ L. Peter Deutsch; Edmund Berkeley, La implementación de LISP para la computadora PDP-1 (PDF) , pág. 15
  4. ^ Joseph Weizenbaum, OPL-I: UN SISTEMA DE PROGRAMACIÓN ABIERTA DENTRO DE CTSS
  5. ^ Ambos proyectos se llevaron a cabo probablemente en 1963, mucho antes de que aparecieran las respectivas publicaciones. Sin embargo, es imposible determinar con exactitud las fechas de invención.
  6. ^ Existe una relación compleja e interesante entre Lisp y SLIP, ambos son "lenguajes de procesamiento de listas" epónimos inventados por académicos relacionados con el MIT: ELIZA reinterpretado: el primer chatbot del mundo no fue pensado como un chatbot en absoluto
  7. ^ David A. Moon (8 de abril de 1974), Manual de referencia MACLISP (PDF) , pág. 89
  8. ^ Smith, Jerry D. (1988). Introducción a Scheme. Englewood Cliffs, NJ: Prentice Hall. pág. 8. ISBN 978-0-13-496712-7.
  9. ^ Hanson, Chris (1986). «rep.scm – Revisión inicial de 1986 de MIT-Scheme». GitHub . Consultado el 11 de junio de 2023 .
  10. ^ van Binsbergen, L. Thomas; Verano Merino, Mauricio; Jeanjean, Pierre; van der Storm, Tijs; Combemale, Benoit; Barais, Olivier (17 de noviembre de 2020). "Un enfoque basado en principios para los intérpretes REPL". Actas del Simposio Internacional ACM SIGPLAN de 2020 sobre Nuevas ideas, nuevos paradigmas y reflexiones sobre programación y software . Nueva York, NY, EE. UU.: ACM. págs. 84–100. doi :10.1145/3426428.3426917. ISBN . 978-1-4503-8178-9.

Enlaces externos