Кіріспе

Компьютерлік бағдарламалау ортасы

Read–eval–print loop (REPL), сондай-ақ интерактивті жоғары деңгей немесе тілдік қабық деп аталатын, пайдаланушыдан жеке кіріс деректерін қабылдап, оларды орындап, нәтижесін пайдаланушыға қайтаратын қарапайым интерактивті компьютерлік бағдарламалау ортасы болып табылады; REPL ортасында жазылған бағдарлама бөлік-бөлікпен орындалады.

Тарих

1964 жылы Л. Питер Дойч және Эдмунд Беркли PDP 1 компьютерінде Lisp іске асыру үшін READ EVAL PRINT циклын қолданды. 1980-жылдардың басынан бері Scheme аясында REP Loop және REPL аббревиатуралары қолданылып келеді.

Шолу

REPL-де пайдаланушы бір немесе бірнеше өрнектерді (толық компиляциялық бірлік емес) енгізеді, ал REPL оларды бағалайды және нәтижелерін көрсетеді. «Оқу-бағалау-басып шығару» циклының атауы осы функционалдықты жүзеге асыратын Lisp-тің бастапқы функцияларының аттарынан шыққан: Оқу функциясы пайдаланушыдан өрнекті қабылдап, оны жадтағы дерек құрылымына түрлендіреді. Мысалы, пайдаланушы `(+ 1 2 3)` s-өрнегін енгізе алады, ол төрт дерек элементінен тұратын тізбекке айналады. Eval функциясы осы ішкі дерек құрылымын қабылдап, оны бағалайды. Lisp-те s-өрнекті функция атынан бастау арқылы бағалау, функцияны өрнектің қалған бөлігін құрайтын аргументтерге қолдануды білдіреді. Осылайша, `+` функциясы `1 2 3` аргументтерімен шақырылып, нәтижесінде `6` шығады. Басып шығару функциясы eval функциясының нәтижесін қабылдап, оны пайдаланушыға көрсетеді. Егер өрнек күрделі болса, оны түсінуді жеңілдету үшін әдемі форматта басып шығаруға болады. Содан кейін даму ортасы оқу күйіне оралып, бағдарлама жабылатынға дейін жалғасатын цикл құрайды. REPL зерттеу бағдарламалау мен қателерді жоюға көмектеседі, себебі бағдарламашы келесі өрнекті енгізбес бұрын басып шығарылған нәтижені қарап, шешім қабылдай алады. «Оқу-бағалау-басып шығару» циклы классикалық «өзгерту-компиляциялау-орындау-қателерді жою» циклына қарағанда бағдарламашыны жиі араластырады. Басып шығару функциясы оқу функциясының кіріс ретінде қолданатын мәтіндік форматта нәтиже шығаратындықтан, көптеген нәтижелерді көшіріп REPL-ге қайтадан енгізуге болады. Дегенмен, кейде сокет дескрипторы немесе күрделі сынып инстанциясы сияқты қайта оқуға болмайтын элементтерді көрсету қажет болады. Мұндай жағдайларда оқылмайтын нысандар үшін синтаксис болуы керек. Python-да бұл `<модуль класының инстанциясы>` белгісі, ал Common Lisp-те `#<не нәрсе>` форматы. CLIM, SLIME және Symbolics Lisp машинасының REPL-дері оқылмайтын нысандарды да оқи алады. Олар әрбір шығыс үшін қандай нысан басылғанын жасайды. Кейін кодты қайта оқығанда, нысан басылған шығыстан алынады. REPL кез келген мәтіндік тілді қолдау үшін құрылуы мүмкін. Компиляцияланған тілдер үшін REPL қолдауы әдетте компиляторға интерфейс беретін виртуалды машинаның үстінде интерпретаторды іске асыру арқылы қамтамасыз етіледі. Мысалы, JDK 9-дан бастап Java JShell-ді тілге командалық жол интерфейсі ретінде қосты. Басқа да көптеген тілдер үшін осыған ұқсас тілмен өзара әрекеттесуді қамтамасыз ететін үшінші тараптың жүктеуге болатын құралдары бар.

Қолданылуы

Қабықша ретінде REPL ортасы пайдаланушыларға бағдарламалау мүмкіндіктерін ұсына отырып, операциялық жүйенің де тиісті мүмкіндіктеріне қол жеткізуге мүмкіндік береді. REPL-дің операциялық жүйе қабықшаларынан тыс кеңінен қолданылатын түрі – интерактивті прототиптеу. Басқа қолданыстар математикалық есептеулер, ғылыми талдауды қосатын құжаттар жасау (мысалы, IPython), бағдарламалық жасақтаманы интерактивті түрде күту, жылдамдық сынақтарын жүргізу және алгоритмдерді зерттеу болып табылады.