Bosh sahifa Wiki REPL

REPL

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:

  1. Read — foydalanuvchi inputi o‘qiladi.
  2. Eval — ifoda tahlil qilinib bajariladi.
  3. Print — natija ko‘rsatiladi.
  4. 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:

  • uzun listni qatorlarga bo‘lish;
  • table;
  • rang;
  • syntax highlight;
  • object fieldlari;
  • qisqartirish.

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:

  1. import qilish;
  2. input yaratish;
  3. function chaqirish;
  4. natijani ko‘rish;
  5. 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:

Bunday console production data’ga kuchli kirish berishi mumkin.

Production console

Production REPL orqali:

mumkin.

Xavflar:

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:

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