REPL (Read-eval-print loop — цикл читання-обчислення-друку, мовна оболонка) — просте інтерактивне середовище програмування для комп’ютера, яке приймає однокористувацькі введення, виконує їх і повертає результат користувачеві; програма, написана в середовищі REPL, виконується поштучно. Цей термін зазвичай вживається стосовно інтерактивного середовища мови програмування Lisp, але може застосовуватись і до інтерактивних середовищ мов Smalltalk, Python, Ruby, Haskell, JavaScript та ін.
Огляд
В такому середовищі користувач може вводити вирази, які середовище одразу обчислить, а результат обчислень відобразить користувачеві. Назва read-eval-print loop походить від імен примітивів мови Lisp, що реалізують таку функціональність:
- Функція read читає один вираз і перетворює його в відповідну структуру даних у пам'яті. Наприклад, користувач може ввести S-вираз
(+ 1 2 3)
, який аналізується у зв'язаному списку, що містить чотири елементи даних. - Функція eval (evaluate) приймає цю внутрішню структуру даних і обчислює вираз, що відповідає їй. У Lisp обчислення S-виразу, що починається з імені функції, означає виклик цієї функції з аргументами, що складають решту виразу. Отже, функція
+
викликається з аргументами1 2 3
, що дає результат6
. - Функція print приймає результат обчислення виразу, отриманий від eval, і друкує його користувачеві. Якщо це складний вираз, він може бути форматованим, щоб його було легше зрозуміти.
Потім середовище розробки повертається до стану читання, створюючи цикл, який завершується, коли програма закрита.
REPL полегшує дослідницьке програмування та налагодження, оскільки програміст може перевірити результат, перш ніж вирішити, який вираз надати для наступної перевірки. Цикл read–eval–print залучає програміста частіше, ніж класичний цикл edit-compile-run-debug.
Оскільки функція print
виводиться в тому самому текстовому форматі, що функція read
використовує для введення, більшість результатів друкується у формі, яку можна скопіювати та вставити назад у REPL. Однак іноді доводиться друкувати нечитабельні об’єкти, такі як дескриптор сокета або складний екземпляр класу. У цих випадках повинен існувати спеціальний синтаксис. У Python це позначення <__module__.class instance>
, а в Common Lisp - #<whatever>
.
REPL можна створити для підтримки будь-якої текстової мови. Підтримка REPL для скомпільованих мов зазвичай досягається впровадженням інтерпретатора поверх віртуальної машини, який забезпечує інтерфейс для компілятора. Наприклад, починаючи з JDK 9, Java включала як інтерфейс командного рядка до мови. Інші мови мають для завантаження сторонні інструменти, які забезпечують подібну взаємодію оболонки з мовою.
Використання
Як оболонка, середовище REPL дозволяє користувачам отримувати доступ до відповідних функцій операційної системи на додаток до надання можливостей програмування. Найбільш поширене використання REPL за межами оболонок операційної системи - для миттєвого прототипування. Інші сфери використання включають математичний розрахунок, створення документів, що включають науковий аналіз (наприклад, IPython), інтерактивне обслуговування програмного забезпечення, порівняльний аналіз та дослідження алгоритмів.
Особливості Lisp
Впровадження
Мінімальне визначення:
(define (REPL env) (print (eval env (read))) (REPL env) )
Де env
являє собою початкове eval
-uation середовище. Також передбачається, що eval
може деструктивно оновити env
.
Функціональність
Типова функціональність, надана Lisp REPL, включає:
- Історію вхідних та вихідних даних.
- Змінні встановлюються для вхідних виразів та результатів. Ці змінні також доступні в REPL. Наприклад, у Common Lisp * посилається на останній результат, ** і *** на попередні результати.
- Рівні REPL. У багатьох системах Lisp, якщо під час зчитування, обчислення або друку виразу виникає помилка, система не повертається на верхній рівень із повідомленням про помилку. Натомість у контексті помилки запускається новий REPL, на один рівень глибше. Потім користувач може перевірити проблему, виправити її та продовжити - якщо це можливо. Якщо в такому налагоджувальному REPL виникає помилка, запускається інший REPL, знову на глибший рівень. Часто REPL пропонує спеціальні команди налагодження.
- Обробка винятків. REPL забезпечує перезапуск. Ці перезапуски можна використовувати, коли виникає помилка, для повернення до певного рівня REPL.
- Введення та виведення об'єктів даних за допомогою миші.
- Редагування введення та специфіка контексту перед символами, іменами шляхів, іменами класів та іншими об'єктами.
- Довідка та документація для команд.
- Змінні для управління зчитувачем. Наприклад, змінна *read-base* керує тим, що базові числа читаються за замовчуванням.
- Змінні для управління принтером. Приклад: максимальна довжина або максимальна глибина виразів для друку.
- Додатковий синтаксис команди. Деякі REPL мають команди, які слідують не синтаксису s-виразу, але часто працюють з даними Lisp як аргументами.
- Графічні REPL. Деякі REPL Lisp (приклад прослуховувач CLIM) також приймають графічні вхідні та вихідні дані.
Див. також
Посилання
- Опис реалізації REPL [ 30 січня 2021 у Wayback Machine.] у Common Lisp (Paul Graham).
- c-repl [ 11 лютого 2009 у Wayback Machine.] REPL для мови C
- [1] [ 26 вересня 2010 у Wayback Machine.] REPL для мови JavaScript
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
REPL Read eval print loop cikl chitannya obchislennya druku movna obolonka proste interaktivne seredovishe programuvannya dlya komp yutera yake prijmaye odnokoristuvacki vvedennya vikonuye yih i povertaye rezultat koristuvachevi programa napisana v seredovishi REPL vikonuyetsya poshtuchno Cej termin zazvichaj vzhivayetsya stosovno interaktivnogo seredovisha movi programuvannya Lisp ale mozhe zastosovuvatis i do interaktivnih seredovish mov Smalltalk Python Ruby Haskell JavaScript ta in OglyadV takomu seredovishi koristuvach mozhe vvoditi virazi yaki seredovishe odrazu obchislit a rezultat obchislen vidobrazit koristuvachevi Nazva read eval print loop pohodit vid imen primitiviv movi Lisp sho realizuyut taku funkcionalnist Funkciya read chitaye odin viraz i peretvoryuye jogo v vidpovidnu strukturu danih u pam yati Napriklad koristuvach mozhe vvesti S viraz 1 2 3 yakij analizuyetsya u zv yazanomu spisku sho mistit chotiri elementi danih Funkciya eval evaluate prijmaye cyu vnutrishnyu strukturu danih i obchislyuye viraz sho vidpovidaye yij U Lisp obchislennya S virazu sho pochinayetsya z imeni funkciyi oznachaye viklik ciyeyi funkciyi z argumentami sho skladayut reshtu virazu Otzhe funkciya viklikayetsya z argumentami 1 2 3 sho daye rezultat 6 Funkciya print prijmaye rezultat obchislennya virazu otrimanij vid eval i drukuye jogo koristuvachevi Yaksho ce skladnij viraz vin mozhe buti formatovanim shob jogo bulo legshe zrozumiti Potim seredovishe rozrobki povertayetsya do stanu chitannya stvoryuyuchi cikl yakij zavershuyetsya koli programa zakrita REPL polegshuye doslidnicke programuvannya ta nalagodzhennya oskilki programist mozhe pereviriti rezultat persh nizh virishiti yakij viraz nadati dlya nastupnoyi perevirki Cikl read eval print zaluchaye programista chastishe nizh klasichnij cikl edit compile run debug Oskilki funkciya print vivoditsya v tomu samomu tekstovomu formati sho funkciya read vikoristovuye dlya vvedennya bilshist rezultativ drukuyetsya u formi yaku mozhna skopiyuvati ta vstaviti nazad u REPL Odnak inodi dovoditsya drukuvati nechitabelni ob yekti taki yak deskriptor soketa abo skladnij ekzemplyar klasu U cih vipadkah povinen isnuvati specialnij sintaksis U Python ce poznachennya lt module class instance gt a v Common Lisp lt whatever gt REPL mozhna stvoriti dlya pidtrimki bud yakoyi tekstovoyi movi Pidtrimka REPL dlya skompilovanih mov zazvichaj dosyagayetsya vprovadzhennyam interpretatora poverh virtualnoyi mashini yakij zabezpechuye interfejs dlya kompilyatora Napriklad pochinayuchi z JDK 9 Java vklyuchala yak interfejs komandnogo ryadka do movi Inshi movi mayut dlya zavantazhennya storonni instrumenti yaki zabezpechuyut podibnu vzayemodiyu obolonki z movoyu VikoristannyaYak obolonka seredovishe REPL dozvolyaye koristuvacham otrimuvati dostup do vidpovidnih funkcij operacijnoyi sistemi na dodatok do nadannya mozhlivostej programuvannya Najbilsh poshirene vikoristannya REPL za mezhami obolonok operacijnoyi sistemi dlya mittyevogo prototipuvannya Inshi sferi vikoristannya vklyuchayut matematichnij rozrahunok stvorennya dokumentiv sho vklyuchayut naukovij analiz napriklad IPython interaktivne obslugovuvannya programnogo zabezpechennya porivnyalnij analiz ta doslidzhennya algoritmiv Osoblivosti LispVprovadzhennya Minimalne viznachennya define REPL env print eval env read REPL env De env yavlyaye soboyu pochatkove eval uation seredovishe Takozh peredbachayetsya sho eval mozhe destruktivno onoviti env Funkcionalnist Tipova funkcionalnist nadana Lisp REPL vklyuchaye Istoriyu vhidnih ta vihidnih danih Zminni vstanovlyuyutsya dlya vhidnih viraziv ta rezultativ Ci zminni takozh dostupni v REPL Napriklad u Common Lisp posilayetsya na ostannij rezultat i na poperedni rezultati Rivni REPL U bagatoh sistemah Lisp yaksho pid chas zchituvannya obchislennya abo druku virazu vinikaye pomilka sistema ne povertayetsya na verhnij riven iz povidomlennyam pro pomilku Natomist u konteksti pomilki zapuskayetsya novij REPL na odin riven glibshe Potim koristuvach mozhe pereviriti problemu vipraviti yiyi ta prodovzhiti yaksho ce mozhlivo Yaksho v takomu nalagodzhuvalnomu REPL vinikaye pomilka zapuskayetsya inshij REPL znovu na glibshij riven Chasto REPL proponuye specialni komandi nalagodzhennya Obrobka vinyatkiv REPL zabezpechuye perezapusk Ci perezapuski mozhna vikoristovuvati koli vinikaye pomilka dlya povernennya do pevnogo rivnya REPL Vvedennya ta vivedennya ob yektiv danih za dopomogoyu mishi Redaguvannya vvedennya ta specifika kontekstu pered simvolami imenami shlyahiv imenami klasiv ta inshimi ob yektami Dovidka ta dokumentaciya dlya komand Zminni dlya upravlinnya zchituvachem Napriklad zminna read base keruye tim sho bazovi chisla chitayutsya za zamovchuvannyam Zminni dlya upravlinnya printerom Priklad maksimalna dovzhina abo maksimalna glibina viraziv dlya druku Dodatkovij sintaksis komandi Deyaki REPL mayut komandi yaki sliduyut ne sintaksisu s virazu ale chasto pracyuyut z danimi Lisp yak argumentami Grafichni REPL Deyaki REPL Lisp priklad prosluhovuvach CLIM takozh prijmayut grafichni vhidni ta vihidni dani Div takozhInterpretatorPosilannyaOpis realizaciyi REPL 30 sichnya 2021 u Wayback Machine u Common Lisp Paul Graham c repl 11 lyutogo 2009 u Wayback Machine REPL dlya movi C 1 26 veresnya 2010 u Wayback Machine REPL dlya movi JavaScript