# Bucle lectura-avaluació-impressió

Un bucle de lectura-avaluació-impressió (REPL), també anomenat intèrpret d'ordres interactiu de nivell superior o intèrpret d'ordres de llenguatge, és un entorn de programació informàtic interactiu senzill que pren les entrades d'un sol usuari, les executa i retorna el resultat a l'usuari; un programa escrit en un entorn REPL s'executa a trossos. El terme sol referir-se a interfícies de programació similars a l'entorn interactiu clàssic de la màquina Lisp. Els exemples habituals inclouen shells de línia d'ordres i entorns similars per a llenguatges de programació, i la tècnica és molt característica dels llenguatges de programació.
Història
L'any 1964, L. Peter Deutsch i Edmund Berkeley utilitzen l'expressió cicle READ-EVAL-PRINT per a una implementació de Lisp al PDP-1.
Com a mínim des dels anys 80, les abreviatures REP Loop i REPL estan testimoniades en el context de Scheme.

## Visió general

En un REPL, l'usuari introdueix una o més expressions (en lloc d'una unitat de compilació sencera) i el REPL les avalua i mostra els resultats. El nom de bucle de lectura-avaluació-impressió prové dels noms de les funcions primitives de Lisp que implementen aquesta funcionalitat:
* La funció de lectura accepta una expressió de l'usuari i l'analitza en una estructura de dades a la memòria. Per exemple, l'usuari pot introduir l'expressió s (+ 1 2 3), que s'analitza en una llista enllaçada que conté quatre elements de dades.
* La funció eval pren aquesta estructura interna de dades i l'avalua. A Lisp, avaluar una expressió s que comença amb el nom d'una funció significa cridar aquesta funció als arguments que formen la resta de l'expressió. Així, la funció + es crida als arguments 1 2 3, donant el resultat 6.
* La funció d'impressió pren el resultat obtingut per eval i l'imprimeix a l'usuari. Si és una expressió complexa, pot ser que estigui ben impresa per facilitar-ne la comprensió.
Aleshores, l'entorn de desenvolupament torna a l'estat de lectura, creant un bucle, que finalitza quan es tanca el programa.
Els REPL faciliten la programació exploratòria i la depuració perquè el programador pot inspeccionar el resultat imprès abans de decidir quina expressió proporcionarà per a la següent lectura. El bucle lectura-avaluació-impressió implica el programador amb més freqüència que el cicle clàssic edició-compilació-execució-depuració.
Com que la funció d'impressió surt en el mateix format de text que la funció de lectura utilitza per a l'entrada, la majoria dels resultats s'imprimeixen en una forma que es podria copiar i tornar a enganxar al REPL. No obstant això, de vegades és necessari imprimir representacions d'elements que no es poden llegir de manera sensata, com ara un mànec de socket o una instància de classe complexa. En aquests casos, ha d'existir una sintaxi per als objectes il·legibles. A Python, és la notació <__module__.class instance>, i a Common Lisp, la forma #<whatever>. El REPL de CLIM, SLIME i la màquina Symbolics Lisp també poden llegir objectes il·legibles. Enregistren per a cada sortida quin objecte s'ha imprès. Més tard, quan es torni a llegir el codi, l'objecte es recuperarà de la sortida impresa.
Els REPL es poden crear per admetre qualsevol llenguatge basat en text. El suport REPL per a llenguatges compilats s'aconsegueix generalment mitjançant la implementació d'un intèrpret a sobre d'una màquina virtual que proporciona una interfície al compilador. Per exemple, a partir del JDK 9, Java va incloure JShell com a interfície de línia d'ordres per a l'idioma. Altres idiomes tenen eines de tercers disponibles per a la seva baixada que proporcionen una interacció similar amb l'idioma.

## Usos

Com a shell, un entorn REPL permet als usuaris accedir a les funcions rellevants d'un sistema operatiu a més de proporcionar accés a les capacitats de programació. L'ús més comú dels REPL fora dels intèrprets d'ordres del sistema operatiu és per a la creació de prototips interactius. Altres usos inclouen el càlcul matemàtic, la creació de documents que integren l'anàlisi científica (per exemple, IPython), el manteniment de programari interactiu, l'anàlisi comparativa i l'exploració d'algoritmes.

## Referències

* ↑ Grillmeyer, O. Exploring Computer Science with Scheme (en anglès). Springer New York, 2013, p. 239 (Undergraduate Texts in Computer Science). ISBN 978-1-4757-2937-5.
* ↑ Hey, Tony. The Computing Universe: A Journey through a Revolution (en anglès). Cambridge University Press, 2014, p. 76. ISBN 978-1-316-12322-5.
* ↑ Smith, Jerry D. An introduction to Scheme (en anglès). Englewood Cliffs, N.J. : Prentice Hall, 1988, p. 8. ISBN 978-0-13-496712-7.
* ↑ Hanson, Chris. «rep.scm -- Initial 1986 revision of MIT-Scheme» (en anglès). GitHub, 1986. [Consulta: 11 juny 2023].
* ↑ Grillmeyer, O. Exploring Computer Science with Scheme (en anglès). Springer New York, 2013, p. 239 (Undergraduate Texts in Computer Science). ISBN 978-1-4757-2937-5.