De Wikipedia, la enciclopedia libre
  (Redirigido desde REPL )
Saltar a navegación Saltar a búsqueda

Un ciclo de lectura-evaluación-impresión ( REPL ), también denominado nivel superior interactivo o shell de lenguaje , es un entorno de programación informática interactiva 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. El término se usa generalmente para referirse 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 scripting . [1]

Resumen [ editar ]

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. El nombre del bucle read-eval-print proviene de los nombres de las funciones primitivas Lisp que implementan esta funcionalidad:

  • La función de lectura acepta una expresión del usuario y la analiza en una estructura de datos en la memoria. Por ejemplo, el usuario puede ingresar la expresión s (+ 1 2 3) , que se analiza en una lista vinculada que contiene cuatro elementos de datos.
  • La función eval toma esta estructura de datos interna y la evalúa. En Lisp, evaluar una expresión-s que comience con el nombre de una función significa llamar a esa función en los argumentos que componen el resto de la expresión. Por tanto, la función +se invoca sobre los argumentos 1 2 3y se obtiene el resultado 6.
  • La función de impresión toma el resultado producido por eval y lo imprime al usuario. Si es una expresión compleja, es posible que tenga una letra bonita para que sea más fácil de entender.

Luego, el entorno de desarrollo vuelve al estado de lectura, creando un bucle que termina 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 leer-evaluar-imprimir involucra al programador con más frecuencia que el ciclo clásico editar-compilar-ejecutar-depurar.

Debido a que la función de impresión genera la salida en el mismo formato textual que la función de lectura usa para la entrada, la mayoría de los resultados se imprimen en una forma que podría copiarse y pegarse nuevamente en el REPL. Sin embargo, a veces es necesario imprimir representaciones de elementos que no se pueden leer de forma sensata, 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. La REPL de CLIM , SLIME y Symbolics Lisp Machinetambién puede leer objetos ilegibles. Registran para cada salida qué objeto se imprimió. Más tarde, 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. El soporte REPL para lenguajes compilados generalmente se logra mediante la implementación de un intérprete en la parte superior de 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 idiomas tienen herramientas de terceros disponibles para descargar que brindan una interacción de shell similar con el idioma.

Usos [ editar ]

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 la creación instantánea de prototipos . Otros usos incluyen cálculo matemático, creación de documentos que integran análisis científico (por ejemplo, IPython ), mantenimiento de software interactivo, evaluación comparativa y exploración de algoritmos.

Detalles de Lisp [ editar ]

Implementación [ editar ]

Una definición mínima es:

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

Donde envrepresenta el evalentorno de evaluación inicial . También se supone que envpuede ser actualizado destructivamente por eval.

Funcionalidad [ editar ]

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

  • Historial de entradas y salidas.
  • Las variables se establecen para las expresiones de entrada y los resultados. Estas variables también están disponibles en REPL. Por ejemplo, en Common Lisp * se refiere al último resultado, ** y *** a los resultados anteriores.
  • Niveles de REPL. En muchos sistemas Lisp, si ocurre un error durante la lectura, evaluación o impresión de una expresión, el sistema no regresa al nivel superior con un mensaje de error. En su lugar, se inicia un nuevo REPL, un nivel más profundo, en el contexto de error. Luego, el usuario puede inspeccionar el problema, solucionarlo y continuar, si es posible. Si se produce un error en dicho REPL de depuración, se inicia otro REPL, de nuevo un nivel más profundo. A menudo, REPL ofrece comandos de depuración especiales.
  • Manejo de errores . El REPL proporciona reinicios. Estos reinicios se pueden utilizar, cuando se produce un error, para volver a un cierto nivel de REPL.
  • Entrada y salida de objetos de datos sensibles al ratón .
  • Ingrese la edición y la finalización específica del contexto sobre símbolos, nombres de ruta, nombres de clases y otros objetos.
  • Ayuda y documentación para comandos.
  • Variables para controlar el lector. Por ejemplo, la variable * read-base * controla en qué números base se leen por defecto.
  • Variables para controlar la impresora. Ejemplo: longitud máxima o profundidad máxima de expresiones para imprimir.
  • Sintaxis de comando adicional. Algunos REPL tienen comandos que no siguen la sintaxis de la expresión s, pero a menudo funcionan con datos Lisp como argumentos.
  • REPL gráficos. Algunos REPL Lisp (CLIM Listener es un ejemplo) aceptan también entradas y salidas gráficas.

Ver también [ editar ]

  • Modo directo
  • Intérprete (informática)

Referencias [ editar ]

  1. ^ Hola, Tony; Pápay, Gyuri (2014). El universo de la informática: un viaje a través de una revolución . Prensa de la Universidad de Cambridge. pag. 76 . ISBN 978-1-31612322-5, "Una característica importante de los lenguajes de scripting 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 scripting".CS1 maint: posdata ( enlace )

Enlaces externos [ editar ]

  • Paul Graham ha escrito una descripción de una implementación REPL en Common Lisp.
  • Lista de REP y REPL en línea de Joël Franusic