# Kompilyator va interpretator farqi nimada

> Yozgan kodingiz kompyuterga qanday yetib boradi? Kompilyator va interpretator o'rtasidagi farq, ularning afzalliklari va qaysi til qaysi usulni tanlagani.

Manba: https://learncode.uz/dasturlash-asoslari/kompilyator-va-interpretator/
Sana: 2026-05-02

![Kodni kompilyator va interpretator orqali kompyuter buyruqlariga aylantirish jarayoni](https://learncode.uz/images/dasturlash-asoslari/kompilyator-interpretator-hero-v2.webp)

*Kod yozilgach, uni kompyuter tushunadigan ko'rinishga tarjima qilish kerak.*

Yozgan kodingiz odam o'qiy oladigan matn — kompyuter esa uni to'g'ridan-to'g'ri
tushunmaydi. Oradan **tarjimon** o'tishi kerak. Bu tarjimonning ikki asosiy
turi bor: **kompilyator** va **interpretator**. Bu darsda ular qanday
farq qilishini va nega bu muhimligini ko'ramiz.

Avvalgi darsda [dasturlash tillari xilma-xil](https://learncode.uz/dasturlash-asoslari/dasturlash-tillari)
ekanini ko'rgandik. Aynan shu tillarning bir qismi kompilyatsiya, bir qismi
interpretatsiya qilinadi.

## Kod kompyuterga qanday yetib boradi

Kompyuter faqat mashina tilini — nol va birlarni — tushunadi. Siz esa
`print("Salom")` deb yozasiz. Bu matnni protsessor buyruqlariga aylantirish
kerak. Shu ishni tarjimon bajaradi va uni ikki xil usulda qilish mumkin.

![Kompilyatorning butun kodni oldindan, interpretatorning esa kodni qatorma-qator tarjima qilishi](https://learncode.uz/images/dasturlash-asoslari/ikki-xil-tarjima-usuli-v2.webp)

*Kompilyator kodni bir marta to'liq tarjima qiladi, interpretator esa uni qatorma-qator bajaradi.*

### Kompilyator — hammasini oldindan tarjima qiladi

**Kompilyator** butun kodni bir marta boshdan-oxir o'qiydi va uni to'liq
mashina kodiga aylantiradi. Natijada alohida **bajariladigan fayl** hosil
bo'ladi. Keyin siz shu faylni ishga tushirasiz — endi tarjimon kerak emas.

Bu oshpaz butun taomni oldindan pishirib qo'yishiga o'xshaydi: tayyor
bo'lgach, xohlagancha tez tortib beriladi.

- **Afzalligi:** tayyor dastur juda tez ishlaydi.
- **Kamchiligi:** har o'zgarishdan keyin qaytadan kompilyatsiya kutiladi;
  xato butun tarjima tugaguncha ko'rinmasligi mumkin.
- **Misol tillar:** C, C++, Go, Rust.

### Interpretator — qatorma-qator o'qiydi

**Interpretator** kodni oldindan to'liq tarjima qilmaydi. U dasturni
**qatorma-qator** o'qiydi va o'sha zahoti bajaradi.

Bu oshpaz buyurtmani o'qib, har taomni kelgan payti pishirishiga o'xshaydi:
darrov boshlanadi, lekin har safar pishirishga vaqt ketadi.

- **Afzalligi:** darhol ishga tushadi, kod yozib-sinash tez kechadi.
- **Kamchiligi:** odatda kompilyatsiya qilingan dasturdan sekinroq.
- **Misol tillar:** Python, JavaScript, PHP.

> **Atama**
>
> **Bajariladigan fayl** (executable) — mashina kodiga aylantirilgan, mustaqil
> ishga tushadigan dastur (Windows'da `.exe`). Uni ishlatish uchun asl kod
> ham, tarjimon ham kerak emas.

### Ikkalasini solishtirish

| Xususiyat | Kompilyator | Interpretator |
|---|---|---|
| Tarjima vaqti | Ishga tushishdan oldin, bir marta | Ishlash paytida, qatorma-qator |
| Natija | Alohida bajariladigan fayl | Fayl yo'q, darhol bajariladi |
| Tezlik | Yuqori | Pastroq |
| Xatoni ko'rish | Kompilyatsiyadan keyin | O'sha qatorga yetganda |
| Til misoli | C, C++, Go | Python, JavaScript |

![Kompilyator va interpretatorning ishlash usuli, tezligi hamda dasturlash tillari bo'yicha taqqoslanishi](https://learncode.uz/images/dasturlash-asoslari/kompilyator-interpretator-taqqoslash-v2.webp)

*Kompilyator tez ishlaydigan tayyor dastur yaratadi, interpretator esa kodni darhol bajarishni boshlaydi.*

> **Yodda tuting**
>
> Chegara qat'iy emas. **Java** avval oraliq shaklga (bytecode)
> kompilyatsiya qilinadi, keyin maxsus muhit uni bajaradi — ya'ni ikki
> usulning aralashmasi. [Python](https://learncode.uz/python/python-nima) ham ichida shunga
> o'xshash oraliq bosqichdan foydalanadi. Shuning uchun "faqat u yoki bu"
> deb qat'iy ajratmang.

### Bu boshlovchiga nega muhim

[Python](https://learncode.uz/python/python-ornatish) interpretatsiya qilingani uchun
o'rganishga qulay: kod yozasiz, `Enter` bosasiz — natija shu zahoti
ko'rinadi. Kutish yo'q. Aynan shu tezkor "yozib-sinash" jarayoni boshlovchi
uchun eng qadrli narsa: xatodan tez o'rganasiz.

### Haqiqiy muhitlar aralash bo'lishi mumkin

Kompilyator va interpretatorni ikki butunlay ajralgan quti deb tasavvur qilmang. Ko'p zamonaviy tizimlar bir nechta bosqichdan foydalanadi. Masalan, dastur avval oraliq ko'rinishga tarjima qilinishi, keyin virtual muhitda bajarilishi, tez-tez ishlayotgan qismlari esa keyinroq yanada tez mashina kodiga aylantirilishi mumkin. Bu tafsilotlarni hozir yodlash kerak emas; asosiy fikr — til nomi emas, uning ishga tushirish zanjiri tezlik, xato va deploy tajribasiga ta'sir qiladi.

## Amaliy oqibatlari

### Xatolar qachon topiladi?

Kompilyatsiya bosqichi ko'plab yozish qoidasi va tur mosligi xatolarini dastur ishga tushishidan oldin ko'rsatishi mumkin. Interpretatsiya qilinadigan dasturda esa faqat bajarilgan yo'ldagi xato ko'rinishi mumkin. Masalan, foydalanuvchi hali bosmagan tugma ichidagi xato dastur ochilganda bilinmasligi mumkin. Shu sabab testlar turli yo'llarni ishga tushiradi, linter va type checkerlar esa xatoni erta topishga yordam beradi.

### Build va deploy bilan bog'lanish

Web loyihada `build` ko'pincha manba fayllarini brauzer yoki server uchun tayyor shaklga o'tkazadi: JavaScript qisqarishi, CSS birlashishi, statik sahifalar yaratilishi mumkin. Build o'tgani dasturning barcha foydalanuvchi holati to'g'ri degani emas, ammo publishdan oldingi muhim nazorat nuqtasi. Shu sabab pull requestda test, check va build birgalikda ishlatiladi.

### Mustaqil mashq

Bir kun davomida ishlatgan dasturingizni tanlang: telefon ilovasi, brauzer yoki terminal dasturi. Uning manba kodi qayerda, foydalanuvchi ishlatadigan tayyor versiyasi qayerda bo'lishi mumkinligini yozing. Keyin Python'da bitta qator xato qilib, qachon va qanday xabar chiqishini kuzating. Shu tajriba tarjimonning nazariy ta'rifini real ish jarayoni bilan bog'laydi.

### Manba kodi, build artefakti va runtime

**Manba kodi** dasturchi yozadigan, Gitda saqlanadigan matnli fayllardir. U
to'g'ridan-to'g'ri foydalanuvchiga berilmasligi ham mumkin. **Build artefakti**
esa shu koddan hosil bo'lgan tayyor natija: bajariladigan fayl, brauzerga
yuboriladigan JavaScript/CSS to'plami yoki statik HTML sahifalar. **Runtime**
esa dastur ishlayotgan muhit: operatsion tizim, brauzer, virtual mashina yoki
server jarayoni. Uchalasini ajratish deploy va xato tahlilida juda foydali.

Masalan, manba faylini tahrir qilganingiz bilan production sayti darrov
o'zgarmaydi. O'zgarish builddan o'tishi, test qilinishi va hostingga chiqarilishi
kerak. Productiondagi xato esa ba'zan manba kodida emas, noto'g'ri environment
variable, eski build yoki runtime versiyasida bo'ladi.

### Platformaga bog'liqlik

Kompilyatsiya qilingan bajariladigan fayl ko'pincha ma'lum operatsion tizim va
protsessor turiga mos bo'ladi. Windows uchun yaratilgan `.exe` fayl Linuxda
odatda to'g'ridan-to'g'ri ishlamaydi. Interpretatsiya qilinadigan kod esa mos
interpretator o'rnatilgan bo'lsa, bir nechta platformada ishlashi mumkin. Ammo
bu ham mutlaq qoida emas: fayl yo'llari, tashqi kutubxonalar, tizim buyruqlari
va versiyalar farq qilishi mumkin.

Shu sabab loyiha hujjatida talab qilinadigan runtime versiyasi va ishga tushirish
buyruqlari yoziladi. Jamoada bir odamdagi Python yoki Node versiyasi boshqasidan
farq qilsa, kod bir joyda ishlab, boshqa joyda xato berishi mumkin. Virtual
muhit va paket fayllari ana shu farqni boshqarishga yordam beradi.

### Tezlikni to'g'ri tushunish

Interpretatorli til "sekin" degani loyiha yomon degani emas. Ko'p web ilovada
kutishning katta qismi tarmoq, baza, rasm yuklanishi yoki noto'g'ri algoritmdan
keladi. Tilning bajarilish tezligi muammo bo'lsa, avval o'lchov oling: qaysi
so'rov sekin, qaysi funksiya ko'p vaqt olmoqda, qaysi ma'lumot qayta-qayta
olinmoqda? Keyin cache, indeks, algoritm yoki kerak bo'lsa boshqa texnik
qarorni tanlang.

Kompilyatsiya qilingan dastur ham yomon algoritm bilan sekin ishlashi mumkin.
Masalan, million elementli ro'yxatni har safar boshidan qidirish til tezligidan
ko'ra katta ta'sir qilishi mumkin. Shuning uchun performance — birgina tarjimon
tanlovi emas, o'lchash va tizim dizayni masalasi.

### Xavfsizlik va yangilanish

Tayyor bajariladigan fayl yoki paketni ishonchsiz manbadan yuklab ishga
tushirmang. Paketning rasmiy manbasi, versiyasi va checksum/imzosi mavjud
bo'lsa tekshiring. Runtime ham yangilanib turadi: eski versiyada xavfsizlik
nuqsoni qolishi mumkin. Yangilanishni productionga birdan yuborishdan oldin
test muhitida sinash esa ishlayotgan tizimni buzish xavfini kamaytiradi.

### Qisqacha qaror

Boshlovchi sifatida sizga kompilyator yoki interpretator nomini tanlashdan
ko'ra, tanlangan tilning ishga tushirish oqimini bilish muhim: kod qayerda,
qanday tekshiriladi, qaysi buyruq build qiladi va xato qayerda ko'rinadi. Shu
tushuncha [dasturchi vositalari](https://learncode.uz/dasturlash-asoslari/dasturchi-vositalari) va
keyingi amaliy loyihalarda mustahkamlanadi.

### Tekshirish savollari

1. Manba kodi bilan build artefakti o'rtasidagi farq nima?
2. Nega bir kompyuterda ishlagan dastur boshqasida runtime xatosi berishi mumkin?
3. Build o'tgan bo'lsa ham, nega productionda smoke test kerak?
4. Dastur sekin bo'lsa, tilni almashtirishdan oldin nimalarni o'lchaysiz?

Bu savollarga o'z so'zingiz bilan javob bering. Javobda tarjima vaqti, muhit,
versiya hamda real foydalanuvchi oqimini ajrata olsangiz, mavzuning asosiy
modeli shakllangan.

Bu bilim keyinchalik xato xabaridan qo'rqmasdan, qaysi qatlamga qarash kerakligini tanlashga yordam beradi: manba kodimi, paketmi, buildmi, runtime sozlamasimi yoki production muhiti mi. Har doim eng kichik tekshiriladigan taxmindan boshlang.

### Qo'shimcha eslatma

Natijani yozib boring: qaysi buyruq, qaysi versiya va qaysi muhitda sinov o'tganini qayd qilish keyingi xatoni ancha tez topishga yordam beradi.

## Qisqacha xulosa

- Kod odam tilida yoziladi — kompyuterga yetishi uchun **tarjimon** kerak.
- **Kompilyator** butun kodni oldindan tarjima qiladi → tez, lekin alohida
  qadam talab qiladi.
- **Interpretator** qatorma-qator o'qib bajaradi → darhol ishlaydi, lekin
  sekinroq.
- C/C++ — kompilyatsiya; Python/JavaScript — interpretatsiya; Java — aralash.
- Python interpretatsiya qilingani uchun o'rganishga qulay: natija darhol
  ko'rinadi.

Keyingi darsda [algoritm nima ekanini](https://learncode.uz/dasturlash-asoslari/algoritm-nima) —
masalani kompyuter bajara oladigan aniq qadamlarga qanday bo'lishni ko'ramiz.
