Pređi na sadržaj

REPL (read–eval–print petlja)

S Vikipedije, slobodne enciklopedije

REPL čitaj–proceni–štampaj petlja (REPL Read-eval-print loop), takođe nazvana interaktivni gornji nivo ili jezička ljuska, je jednostavno interaktivno okruženje računarskog programiranja koje uzima unose jednog korisnika, izvršava ih i vraća rezultat korisniku; program napisan u REPL okruženju se izvršava deo po deo.[1] Termin se obično odnosi na programske interfejse slične klasičnom interaktivnom okruženju Lisp mašina. Uobičajeni primeri uključuju ljuska komandne linije (command line shell) i slična okruženja za programske jezike, a tehnika je veoma karakteristična za skript jezike.[2]

Pregled[uredi | uredi izvor]

U REPL-u, korisnik unosi jedan ili više izraza (umesto cele kompilacione jedinice) i REPL ih procenjuje i prikazuje rezultate.[1] Ime čitaj–proceni–štampaj petlje potiče od imena Lisp primitivnih funkcija koje implementiraju ovu funkcionalnost:

  • Funkcija čitanja prihvata izraz od korisnika i analizira ga u strukturu podataka u memoriji. Na primer, korisnik može da unese s-izraz (+ 1 2 3), koji se raščlanjuje u povezanu listu koja sadrži četiri elementa podataka.
  • Funkcija evaluacije uzima ovu internu strukturu podataka i procenjuje je. U Lisp-u, evaluacija s-izraza koji počinje imenom funkcije znači pozivanje te funkcije na osnovu argumenata koji čine ostatak izraza. Dakle, funkcija + se poziva na argumentima 1 2 3, dajući rezultat 6.
  • Funkcija štampaj uzima rezultat koji daje funkcija evaluacije i ispisuje ga korisniku. Ako je reč o složenom izrazu, može biti lepo odštampan da bi se lakše razumeo.

Razvojno okruženje se zatim vraća u stanje čitanja, stvarajući petlju, koja se završava kada se program zatvori.

REPL-ovi olakšavaju istraživačko programiranje i otklanjanje grešaka, jer programer može da pregleda odštampan rezultat pre nego što odluči koji izraz da obezbedi za sledeće čitanje. Petlja čitanje–procena–štampanje uključuje programera češće nego klasični ciklus uređivanje–kompajliraj–pokreni–otklanjanje grešaka (edit–compile–run–debug).

Pošto funkcija štampanja izlazi u istom tekstualnom formatu koji funkcija čitanja koristi za unos, većina rezultata se štampa u obliku koji se može kopirati i nalepiti nazad u REPL. Međutim, ponekad je potrebno odštampati reprezentacije elemenata koji se ne mogu razumno čitati nazad, kao što je ručica utičnice ili instanca složene klase. U tim slučajevima, mora postojati sintaksa za nečitljive objekte. U Pajton-u, to je <__module__.class instance> notacija, a u Common Lisp-u oblik #<whatever> . REPL CLIM-a, SLIME-a i Simbolik Lisp mašine takođe može da čita nazad nečitljive objekte. Oni beleže za svaki izlaz koji je objekat odštampan. Kasnije kada se kod ponovo pročita, objekat će biti preuzet iz odštampanog izlaza.

REPL-ovi se mogu kreirati da podrže bilo koji jezik zasnovan na tekstu. REPL podrška za kompajlirane jezike se obično postiže implementacijom interpretatora na virtuelnu mašinu koja obezbeđuje interfejs kompajleru. Na primer, počevši od JDK 9, Java je uključila JShell kao interfejs komandne linije za jezik. Razni drugi jezici imaju alate treće strane dostupne za preuzimanje koje pružaju sličnu interakciju ljuske sa jezikom.

Primena[uredi | uredi izvor]

Kao ljuska, REPL okruženje omogućava korisnicima pristup relevantnim karakteristikama operativnog sistema pored pružanja pristupa programskim mogućnostima. Najčešća upotreba REPL-ova izvan ljuski operativnog sistema je trenutno kreiranje prototipa.[3] Ostale upotrebe uključuju matematičko izračunavanje, kreiranje dokumenata koji integrišu naučnu analizu (npr. IPajton), interaktivno održavanje softvera, benčmarking i istraživanje algoritama.

Lisp specifičnosti[uredi | uredi izvor]

Implementacija[uredi | uredi izvor]

Minimalna definicija je:

(define (REPL env)
  (print (eval env (read)))
  (REPL env) )

gde env predstavlja okruženje početne eval-uacije. Takođe se pretpostavlja da env može biti destruktivno ažuriran pomoću eval-a.

Funkcionalsnost[uredi | uredi izvor]

Tipična funkcionalnost koju pruža Lisp REPL uključuje:

  • Istorija ulaza i izlaza.
  • Promenljive su podešene za ulazne izraze i rezultate. Ove promenljive su takođe dostupne u REPL-u. Na primer, u Common Lisp-u * se odnosi na poslednji rezultat, ** i *** na rezultate pre toga.
  • Nivoi REPL-a. U mnogim Lisp sistemima ako dođe do greške tokom čitanja, evaluacije ili štampanja izraza, sistem se ne vraća na najviši nivo sa porukom o grešci. Umesto toga, novi REPL, jedan nivo dublje, pokreće se u kontekstu greške. Korisnik tada može da pregleda problem, popravi ga i nastavi – ako je moguće. Ako dođe do greške u takvom REPL-u za otklanjanje grešaka, pokreće se drugi REPL, opet nivo dublje. REPL često nudi posebne komande za otklanjanje grešaka.
  • Greška rukovanje. REPL obezbeđuje ponovno pokretanje. Ova ponovna pokretanja se mogu koristiti kada dođe do greške za povratak na određeni REPL nivo.
  • Unos i izlaz objekata podataka osetljiv na miš.
  • Uređivanje unosa i dovršavanje specifičnog konteksta preko simbola, imena putanja, imena klasa i drugih objekata.
  • Pomoć i dokumentacija za komande.
  • Promenljive za kontrolu čitača. Na primer, promenljiva *read-base* kontroliše u koji se osnovni brojevi čitaju podrazumevano.
  • Promenljive za kontrolu štampača. Primer: maksimalna dužina ili maksimalna dubina izraza za štampanje.
  • Dodatna komandna sintaksa. Neki REPL-ovi imaju komande koje ne prate sintaksu s-izraza, ali često rade sa Lisp podacima kao argumentima.
  • Grafički REPL. Neki Lisp REPL (primer je CLIM slušalac) takođe prihvataju grafički ulaz i izlaz.

Vidi takođe[uredi | uredi izvor]

Reference[uredi | uredi izvor]

  1. ^ a b Grillmeyer, O. (2013). Exploring Computer Science with Scheme. Undergraduate Texts in Computer Science. Springer New York. str. 239. ISBN 978-1-4757-2937-5. Pristupljeno 2022-02-13. 
  2. ^ Hey, Tony; Pápay, Gyuri (2014). The Computing Universe: A Journey through a Revolution. Cambridge University Press. str. 76. ISBN 978-1-31612322-5"A major characteristic of modern scripting languages is their interactivity, sometimes referred to as a REPL programming environment. ... The characteristics of ease of use and immediate execution with a REPL environment are sometimes taken as the definition of a scripting language." 
  3. ^ van Binsbergen, L. Thomas; Verano Merino, Mauricio; Jeanjean, Pierre; van der Storm, Tijs; Combemale, Benoit; Barais, Olivier. A principled approach to REPL interpreters. New York, NY, USA: ACM. ISBN 978-1-4503-8178-9. doi:10.1145/3426428.3426917. 

Spoljašnje veze[uredi | uredi izvor]