Talim

Muammo: dinamik kompozitsiya

Dastur ishlayotgan paytda uning qismlarini qo‘shish va olib tashlash — dinamik kompozitsiya — nima uchun statikdan qiyinroq ekanini tushunamiz.

8 daqiqa o‘qish · O‘rta → Ilg‘or

Dinamik kompozitsiyaning ikki o‘lchami

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.

Bu dars foydali bo‘ldimi?