РЕПЛ (read–eval–print petlja)

С Википедије, слободне енциклопедије

РЕПЛ читај–процени–штампај петља (REPL Read-eval-print loop), такође названа интерактивни горњи ниво или језичка љуска, је једноставно интерактивно окружење рачунарског програмирања које узима уносе једног корисника, извршава их и враћа резултат кориснику; програм написан у РЕПЛ окружењу се извршава део по део.[1] Термин се обично односи на програмске интерфејсе сличне класичном интерактивном окружењу Лисп машина. Уобичајени примери укључују љуска командне линије (command line shell) и слична окружења за програмске језике, а техника је веома карактеристична за скрипт језике.[2]

Преглед[уреди | уреди извор]

У РЕПЛ-у, корисник уноси један или више израза (уместо целе компилационе јединице) и РЕПЛ их процењује и приказује резултате.[1] Име читај–процени–штампај петље потиче од имена Лисп примитивних функција које имплементирају ову функционалност:

  • Функција читања прихвата израз од корисника и анализира га у структуру података у меморији. На пример, корисник може да унесе с-израз (+ 1 2 3), који се рашчлањује у повезану листу која садржи четири елемента података.
  • Функција евалуације узима ову интерну структуру података и процењује је. У Лисп-у, евалуација с-израза који почиње именом функције значи позивање те функције на основу аргумената који чине остатак израза. Дакле, функција + се позива на аргументима 1 2 3, дајући резултат 6.
  • Функција штампај узима резултат који даје функција евалуације и исписује га кориснику. Ако је реч о сложеном изразу, може бити лепо одштампан да би се лакше разумео.

Развојно окружење се затим враћа у стање читања, стварајући петљу, која се завршава када се програм затвори.

РЕПЛ-ови олакшавају истраживачко програмирање и отклањање грешака, јер програмер може да прегледа одштампан резултат пре него што одлучи који израз да обезбеди за следеће читање. Петља читање–процена–штампање укључује програмера чешће него класични циклус уређивање–компајлирај–покрени–отклањање грешака (edit–compile–run–debug).

Пошто функција штампања излази у истом текстуалном формату који функција читања користи за унос, већина резултата се штампа у облику који се може копирати и налепити назад у РЕПЛ. Међутим, понекад је потребно одштампати репрезентације елемената који се не могу разумно читати назад, као што је ручица утичнице или инстанца сложене класе. У тим случајевима, мора постојати синтакса за нечитљиве објекте. У Пајтон-у, то је <__module__.class instance> нотација, а у Common Lisp-у облик #<whatever> . РЕПЛ ЦЛИМ-а, СЛИМЕ-а и Симболик Лисп машине такође може да чита назад нечитљиве објекте. Они бележе за сваки излаз који је објекат одштампан. Касније када се код поново прочита, објекат ће бити преузет из одштампаног излаза.

РЕПЛ-ови се могу креирати да подрже било који језик заснован на тексту. РЕПЛ подршка за компајлиране језике се обично постиже имплементацијом интерпретатора на виртуелну машину која обезбеђује интерфејс компајлеру. На пример, почевши од ЈДК 9, Јава је укључила JShell као интерфејс командне линије за језик. Разни други језици имају алате треће стране доступне за преузимање које пружају сличну интеракцију љуске са језиком.

Примена[уреди | уреди извор]

Као љуска, РЕПЛ окружење омогућава корисницима приступ релевантним карактеристикама оперативног система поред пружања приступа програмским могућностима. Најчешћа употреба РЕПЛ-ова изван љуски оперативног система је тренутно креирање прототипа.[3] Остале употребе укључују математичко израчунавање, креирање докумената који интегришу научну анализу (нпр. ИПајтон), интерактивно одржавање софтвера, бенчмаркинг и истраживање алгоритама.

Лисп специфичности[уреди | уреди извор]

Имплементација[уреди | уреди извор]

Минимална дефиниција је:

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

где env представља окружење почетне eval-уације. Такође се претпоставља да env може бити деструктивно ажуриран помоћу eval-а.

Функционалсност[уреди | уреди извор]

Типична функционалност коју пружа Лисп РЕПЛ укључује:

  • Историја улаза и излаза.
  • Променљиве су подешене за улазне изразе и резултате. Ове променљиве су такође доступне у РЕПЛ-у. На пример, у Common Lisp* се односи на последњи резултат, ** и *** на резултате пре тога.
  • Нивои РЕПЛ-а. У многим Лисп системима ако дође до грешке током читања, евалуације или штампања израза, систем се не враћа на највиши ниво са поруком о грешци. Уместо тога, нови РЕПЛ, један ниво дубље, покреће се у контексту грешке. Корисник тада може да прегледа проблем, поправи га и настави – ако је могуће. Ако дође до грешке у таквом РЕПЛ-у за отклањање грешака, покреће се други РЕПЛ, опет ниво дубље. РЕПЛ често нуди посебне команде за отклањање грешака.
  • Грешка руковање. РЕПЛ обезбеђује поновно покретање. Ова поновна покретања се могу користити када дође до грешке за повратак на одређени РЕПЛ ниво.
  • Унос и излаз објеката података осетљив на миш.
  • Уређивање уноса и довршавање специфичног контекста преко симбола, имена путања, имена класа и других објеката.
  • Помоћ и документација за команде.
  • Променљиве за контролу читача. На пример, променљива *read-base* контролише у који се основни бројеви читају подразумевано.
  • Променљиве за контролу штампача. Пример: максимална дужина или максимална дубина израза за штампање.
  • Додатна командна синтакса. Неки РЕПЛ-ови имају команде које не прате синтаксу с-израза, али често раде са Лисп подацима као аргументима.
  • Графички РЕПЛ. Неки Лисп РЕПЛ (пример је ЦЛИМ слушалац) такође прихватају графички улаз и излаз.

Види такође[уреди | уреди извор]

Референце[уреди | уреди извор]

  1. ^ а б Grillmeyer, О. (2013). Exploring Computer Science with Scheme. Undergraduate Texts in Computer Science. Springer New York. стр. 239. ISBN 978-1-4757-2937-5. Приступљено 2022-02-13. 
  2. ^ Hey, Tony; Pápay, Gyuri (2014). The Computing Universe: A Journey through a Revolution. Cambridge University Press. стр. 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. 

Спољашње везе[уреди | уреди извор]