stringtranslate.com

Bucle de lectura-evaluación-impresión

Un bucle de lectura, evaluación e impresión ( REPL ), también denominado nivel superior interactivo o shell de lenguaje , es un entorno de programación de computadora interactivo simple que toma entradas de un solo usuario, 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 de máquina Lisp clásico . 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 scripting . [2]

Historia

En 1964, L. Peter Deutsch y Edmund Berkeley utilizan la expresión ciclo READ-EVAL-PRINT para una implementación de Lisp en el PDP-1 . [3]

Al menos desde la década de 1980, las abreviaturas REP Loop y REPL están atestiguadas en el contexto de Scheme . [4] [5]

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 lectura-evaluación-impresión proviene de los nombres de las funciones primitivas Lisp que implementan esta funcionalidad:

Luego, el entorno de desarrollo vuelve 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 lectura-evaluación-impresión involucra al programador con más frecuencia que el clásico ciclo edición-compilación-ejecución-depuración.

Debido a que la función de impresión genera el mismo formato de texto que utiliza la función de lectura 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, como un identificador de socket o una instancia de clase compleja. En estos casos, debe existir una sintaxis para 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 pueden leer objetos ilegibles. Registran para cada salida qué objeto se imprimió. Más adelante, cuando se vuelva a leer el código, el objeto se recuperará de la salida impresa.

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

Usos

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

Detalles de ceceo

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 Lisp REPL incluye:

Ver también

Referencias

  1. ^ ab Grillmeyer, O. (2013). Explorando la informática con Scheme. Textos de Pregrado en Informática. Springer Nueva York. pag. 239.ISBN​ 978-1-4757-2937-5. Consultado 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; Papay, Gyuri (2014). El universo informático: un viaje a través de una revolución . Prensa de la Universidad de Cambridge. pag. 76.ISBN 978-1-316-12322-5, "Una característica importante de los lenguajes de secuencias de comandos 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 secuencias de comandos".{{cite book}}: Mantenimiento CS1: posdata ( enlace )
  3. ^ L. Peter Deutsch; Edmund Berkeley, La implementación LISP para la computadora PDP-1 (PDF) , p. 15
  4. ^ Smith, Jerry D. (1988). Una introducción al esquema. Englewood Cliffs, Nueva Jersey: Prentice Hall. pag. 8.ISBN 978-0-13-496712-7.
  5. ^ Hanson, Chris (1986). "rep.scm - Revisión inicial de 1986 del MIT-Scheme". GitHub . Consultado el 11 de junio de 2023 .
  6. ^ van Binsbergen, L. Thomas; Verano Merino, Mauricio; Jeanjean, Pierre; van der Storm, Tijs; Combemale, Benoit; Barais, Olivier (17 de noviembre de 2020). "Un enfoque de principios para los intérpretes REPL". Actas del Simposio internacional ACM SIGPLAN 2020 sobre nuevas ideas, nuevos paradigmas y reflexiones sobre programación y software . Nueva York, NY, Estados Unidos: ACM. págs. 84-100. doi :10.1145/3426428.3426917. ISBN 978-1-4503-8178-9.

enlaces externos