DeepSeek Harness’ning nazariy qatlami bitta markaziy muammoga javob beradi: ishlayotgan tizimni qanday qilib xavfsiz o‘zgartirish mumkin? Bu darsda o‘sha muammoning o‘zini ko‘rib chiqamiz — maqola va tizim aynan nimaga qarshi qurilganini tushunamiz.
Statik kompozitsiya — hal qilingan muammo
Dasturiy ta’minotni statik kompozitsiya qilish — funksiya chaqiruvlari, import’lar, meros (inheritance) — o‘nlab yillar davomida hal qilingan. Hammasi ishga tushishdan oldin hal bo‘ladi va ish paytida o‘zgarmaydi.
Ishlayotgan paytda kompozitsiya — boshqa gap. Maqola aytadi: bu muammoning rasmiy asosi (formal foundation) uning amaliy ahamiyati talab qiladigan darajadan ancha kam rivojlangan.
Ikki o‘lcham
Muammoning ikkita o‘lchami bor va ular bir-biridan mustaqil:
| O‘lcham | Savol | Statikada kim hal qiladi |
|---|---|---|
| Temporal (vaqt) | Qismni olib tashlaganda, u qilgan hamma narsa to‘liq bekor bo‘lishi kerak | O‘zgaruvchi sohasi (variable scope) |
| Spatial (fazo) | Qismlar nimaga bog‘liqligini e’lon qilishi va o‘zgarishlarga reaksiya berishi kerak | Import resolution |
Statikada ikkalasi ham oson. Runtime’da ular keskin qiyinlashadi.
Eslatma
Temporal o‘lcham — «qachon» haqida: qismni olib tashlaganingda ortda iz qolmasligi kerak. Spatial o‘lcham — «qayerda» haqida: qism nimaga tayanadi va uning atrofi o‘zgarsa nima bo‘ladi.
Hamma azob chekkan misol: VS Code
Maqola misol sifatida Visual Studio Code’ni ishlatadi — va ma’lumot aniq. Ular extension marketplace’dan 2026-yil 9-iyunda ma’lumot to‘plagan.
| Ma’lumot | Raqam | Bu nimani anglatadi |
|---|---|---|
| Eng ko‘p o‘rnatilgan 100 ta extension’dan | 87 tasida bajariladigan kod bor | Ulardan birortasini olib tashlash ham ularni joylashtirgan jarayonni qayta ishga tushirishga majbur qiladi |
| Xuddi shu 100 tadan | 7 tasi bog‘liqlik mexanizmidan foydalanadi | Qolganlari bir-biriga bog‘liq bo‘lmay, qattiq belgilangan host nuqtalariga ulanadi |
Shutdown funksiyasi bor — lekin u faqat butun jarayon tugaganda ishlaydi. Va u tozalashi kerak bo‘lgan narsa yaratilgan joydan uzoqda yozilgan, shuning uchun tozalikni tekshirish qiyin. Extension’lar o‘zaro muloqot qilganda, qabul qilgan narsalari tipsiz (untyped) keladi.
Nega bu muammoga kam e’tibor berilgan?
Maqola bu savolga ham javob beradi — va javob ishonarli: chunki yetarli darajada ishlaydigan o‘rinbosar allaqachon bor.
| O‘rinbosar | Nimani hal qiladi | Qanday |
|---|---|---|
| Operatsion tizim | Temporal o‘lchamni | Jarayon darajasida — ya’ni restart orqali |
| Orkestrator | Spatial o‘lchamni | Servis darajasida |
Bu o‘rinbosarning narxi — argumentning o‘zi:
- Har bir restart to‘plangan holatni (state) tashlab yuboradi. Uni qayta qurish soniyalardan daqiqalargacha vaqt oladi — shuning uchun servisni uzluksiz qilish uchun zaxira nusxalar (spare replicas) kerak bo‘ladi.
- Orkestrator bir jarayon ichidagi qismlar o‘rtasidagi bog‘liqlikni ifodalay olmaydi. Va mahalliy chaqiruvlarni tarmoq chaqiruvlariga aylantirishdan qochib qutula olmaydi.
Ikkala mexanizm ham process va container chegarasida ishlaydi. Zamonaviy dasturiy ta’minot esa ancha mayda donada kompozitsiya qiladi — bitta jarayon ichida minglab kichik qismlar. Aynan shu nomuvofiqlik maqola to‘ldirmoqchi bo‘lgan bo‘shliq.
Xulosa
- Dinamik kompozitsiya — ishlayotgan tizimga qismlarni qo‘shish va olib tashlash. Uning formal asosi amaliy ahamiyatidan ancha orqada.
- Ikki mustaqil o‘lcham: temporal (bekor qilish) va spatial (bog‘liqlik va reaksiya).
- VS Code misoli: 100 ta eng mashhur extension’dan 87 tasi olib tashlanganda jarayonni restart qilishni talab qiladi.
- Mavjud o‘rinbosarlar — OS va orkestrator — jarayon/container darajasida ishlaydi va mayda donali kompozitsiya uchun yetarli emas.
Keyingi darsda temporal o‘lchamning yechimini ko‘ramiz: qaytariladigan effektlar.