REPL — foydalanuvchi kiritgan ifodani o‘qib, bajarib, natijani ko‘rsatadigan va jarayonni takrorlaydigan interaktiv dasturlash muhiti. Uning to‘liq nomi Read–Eval–Print Loop hisoblanadi.
REPL dasturlash tili sintaksisini tez sinash, APIni o‘rganish, hisoblash va debugging uchun ishlatiladi.
To‘rt bosqich
REPL nomi to‘rtta asosiy bosqichdan keladi:
- Read — foydalanuvchi inputi o‘qiladi.
- Eval — ifoda tahlil qilinib bajariladi.
- Print — natija ko‘rsatiladi.
- Loop — keyingi input uchun jarayon takrorlanadi.
Misol:
> 2 + 3
5
> "UzbekDevs".lower()
'uzbekdevs'
Session state
REPL bir buyruqdan keyingi buyruqqa state’ni saqlaydi.
> x = 10
> x * 2
20
x oldingi inputda yaratilgan va session tugaguncha mavjud.
Bu oddiy bir martalik command executiondan farq qiladi.
Expression va statement
Ba’zi REPL faqat expression natijasini avtomatik chiqaradi.
Statement:
natijani ekranga chiqarmasligi mumkin.
Til sintaksisiga qarab ko‘p qatorli blok uchun maxsus prompt ishlatiladi.
Multiline input
Function yoki loop bir necha qator talab qiladi.
REPL parser input tugaganini aniqlaydi.
Misol:
>>> def add(a, b):
... return a + b
...
>>> add(2, 4)
6
Asosiy va davomiy promptlar farq qiladi.
Interpreter bilan munosabat
Interpreter source code’ni bajaradi.
REPL interpreterga interaktiv shell beradi.
Har interpreter REPL bo‘lishi shart emas. Script interpreter faylni bajarib tugashi mumkin.
REPL esa input-output loopini saqlaydi.
Compile qilinadigan tillar
REPL faqat interpreted tillarga xos emas.
Compile qilinadigan til REPL’i:
- inputni vaqtincha compile qiladi;
- dynamic module yaratadi;
- JIT orqali bajaradi;
- session symbol table’ni saqlaydi.
Shu sababli compiled va interpreted farqi REPL mavjudligini belgilamaydi.
History
REPL avvalgi buyruqlarni history’da saqlashi mumkin.
Imkoniyatlar:
History ichida parol yoki token yozilsa diskda saqlanib qolishi mumkin.
Completion
Tab completion:
ni taklif qiladi.
Dynamic til REPL’i objectni runtime introspection orqali ko‘rishi mumkin.
Completion property getter yoki dynamic hookni chaqirsa side effect yuz berishi mumkin.
Pretty printing
Oddiy printdan farqli, REPL natijani qulay formatda ko‘rsatishi mumkin.
Masalan:
Katta objectni avtomatik ko‘rsatish terminalni sekinlashtirishi mumkin.
Introspection
REPL runtime obyektlar haqida ma’lumot olishga qulay.
Imkoniyatlar:
Til va runtime reflection darajasiga qarab farq qiladi.
Development
REPL orqali kichik funksiyani tez tekshirish mumkin.
Jarayon:
- import qilish;
- input yaratish;
- function chaqirish;
- natijani ko‘rish;
- variantni o‘zgartirish.
Katta application xatti-harakati faqat REPL sinovi bilan to‘liq tekshirilmaydi.
Application console
Framework yoki application o‘z konteksti bilan REPL ochishi mumkin.
Masalan:
- database model;
- dependency container;
- application config;
- service object.
Bunday console production data’ga kuchli kirish berishi mumkin.
Production console
Production REPL orqali:
mumkin.
Xavflar:
- audit yo‘qligi;
- tasodifiy o‘chirish;
- transaction tashqarisida o‘zgarish;
- secret ko‘rinishi;
- uzoq query;
- code execution.
Access, logging va role qat’iy boshqariladi.
Notebook bilan farqi
Notebook ham interaktiv code bajaradi, ammo cell, document va natijalarni saqlaydi.
REPL odatda ketma-ket terminal session.
Notebook’da celllar tartibsiz bajarilishi yashirin state yaratishi mumkin. REPL’da ham state bor, ammo document modeli yo‘q.
Shell REPL
Unix shell ham read-eval-print loopga o‘xshaydi.
U commandni o‘qiydi, process ishga tushiradi va promptni qaytaradi.
Biroq shellning “eval” semantikasi dasturlash tili REPL’idan farq qiladi.
Async REPL
Asynchronous runtime bilan ishlaydigan REPL top-level awaitni qo‘llashi mumkin.
Event loop allaqachon ishlayotgan bo‘lsa, oddiy loop start qilish xato beradi.
REPL runtime bilan maxsus integratsiya qiladi.
Error handling
Xato input sessionni to‘liq tugatmasligi kerak.
REPL:
ni ko‘rsatib, keyingi promptga qaytadi.
Fatal runtime xato yoki process crash sessionni tugatishi mumkin.
Environment
REPL ishlayotgan environment script environmentidan farq qilishi mumkin.
Farqlar:
- current directory;
- import path;
- virtual environment;
- environment variable;
- loaded module;
- startup script.
“REPL’da ishladi” production processda ham ishlashini kafolatlamaydi.
Reproducibility
Interaktiv sessiondagi aniq qadamlar history yoki scriptga ko‘chirilmasa qayta takrorlash qiyin.
Muhim tajriba:
- test;
- script;
- notebook;
- documentation
ko‘rinishida saqlanadi.
Xavfsizlik
REPL to‘liq code execution beradi.
Remote REPL:
bilan himoyalanadi.
Internetga ochiq debug console juda xavfli.
Diagnostika
REPL xatti-harakati noto‘g‘ri bo‘lsa:
- session state;
- import cache;
- runtime versiyasi;
- virtual environment;
- current directory;
- startup file;
- async loop;
- history;
- application context
tekshiriladi.
Yangi toza session yashirin state ta’sirini aniqlashga yordam beradi.
Startup fayli
REPL ishga tushganda maxsus startup faylini bajarishi mumkin. Unda import, helper va prompt sozlamalari mavjud bo‘ladi. Startup kodi session xatti-harakatini o‘zgartirgani sababli reproduksiya uchun uning mavjudligi ham qayd etiladi.
Bog‘liq tushunchalar
Interpreter, Interactive shell, Runtime, Evaluation, Introspection, Notebook, History, Completion, Debug console, Session