Boshqalar

Dasturlash tili vaqt boʻylab sayohatni taʼminlay oladimi?

Kompyuter ilmi (informatika) parallelizm (konkurentlik) bilan ishlaydi, lekin bir vaqtdagi harakat borasida nima deya olamiz?

Vaqt boʻylab sayohat ilmiy fantastikada shu qadar keng tarqalgan holatki, agar vaqt boʻylab ortga qaytib, oʻtmishni oʻzgartirsangiz nimalar yuz berishi haqida turli nazariyalar mavjud. Vaqtga sayohat turli koʻngilochar film va kitoblarning yuzaga kelishiga sabab boʻlgan boʻlsa-da, real hayotda katta muvaffaqiyatga erisholmadi. 2005-yil Massachusets texnologiya institutining voleybol maydonchasida oʻtkazilgan vaqt boʻylab sayohatchilar konvensiyasi birorta ham vaqt sayohatchisini jalb qilmagandi.

Hozirga kelib esa Mariposa nomli oʻyinchoq dasturlash tili vaqt boʻylab sayohat uning xususiyatlari sirasiga kirishini taʼkidlab chiqmoqda. Oʻyinchoq tillar odatdagi tartibdan boshqacharoq tarzda foydalanish, aniqroq aytganda, vaqt boʻylab sayohat kabi yangicha yoki oʻzgacha funksiyalar bilan oʻynash usuli sifatida yaratiladi.

Dasturlash atamasi sifatida esa vaqt boʻylab sayohat real toʻrt oʻlchamli fazo vaqtini manipulyatsiya qilish emas, balki kod boʻylab orqaga-oldinga harakatlanish yoki oldingi versiyalarni olishni bildiradi. Biz hali bunday kelajakda emasmiz (yoki shundaymi?). Kompyuter ilmi esa parallelizm va real vaqtda xabar almashishga boʻlgan doimiy qiziqish tufayli ancha vaqtdan beri elektron tizimlardagi vaqt masalasida bosh qotirmoqda.

Bu maqolada Mariposaʼning (va boshqa tillarning) vaqt boʻylab sayohat imkoniyatini koʻrib chiqamiz va temporal mantiqdan foydalanadigan boshqa dasturlash paradigmalarining oʻtmishi hamda kelajagi bilan boʻlishamiz.

Travel.BackTo(time.Future)  Sayohat.Orqaga(Vaqt.Kelajak)

Mariposa momentni oʻzgaruvchiga bogʻlash, keyin shu namuna kontekstini oʻrnatish orqali bizga bajarish tartibini boshqarish imkonini beradi. Quyida Mariposa readme faylidan olingan sodda misolni keltiramiz:

x = 1
t = now()
print(x)
at t:
  x = 2"

Operatsiyalarning odatiy tartibida bu kod “1” natijasini chiqarib berishi kerak. Ammo t ikkinchi qatordagi namunaga bogʻlangani uchun at t: blokida koʻrsatilgan har qanday oʻzgarish oʻsha zahotiyoq qabul qilinadi va kod “2” natijani chiqarib beradi. Til bitta namunaga ikki marta murojaat qilish imkoniyatini cheklaydi hamda “ota-ona” freymlaridagi qiymatlarni oʻqish va yozish imkonini beradi.

Baʼzi zanjir va at t: blok tarkibidagi t = $(now()) sozlash yordamida, yaʼni vaqt boʻylab sayohat kontekstidagi joriy namunani oʻzgartirish bilan kutilmagan holatlarni yuzaga keltirishingiz mumkin. Bunday holatlar kompyuter muammolarini yechishda foydali ekani bahs-munozara mavzusi boʻlishda davom etmoqda – muallif ular tilni “tadqiqot oʻyini” sifatida yaratganini aytmoqda. Albatta, vaqt asosiga qurilgan istalgan ilova foyda keltirishi mumkin, ammo buning uchun tarixiy qiymatlarni faqatgina qayd etish emas, balki vaqt oʻlchovlari bilan boshqarish imkoni boʻlishi zarur.

Oxirgi vaqtlarda Mariposa oʻziga anchagina diqqat tortgan boʻlsa-da, bu dasturlashda tatbiq etilgan ilk vaqt boʻylab sayohat emas. Tardis deb nomlangan Haskell paketida ikki holatdagi transformerlar yaratiladi: ulardan biri vaqt boʻylab oldinga, ikkinchisi esa ortga harakatlanadi. Hujjatda keltirilishicha, “Buni tushuntirishning eng qisqa usuli: getPast oxirgi sendFutureʼdagi qiymatni qabul qiladi, getFuture esa navbatdagi sendPastʼdan qiymat qabul qiladi”. Bir funksiyaning oʻtmishi keyingisining kelajagi boʻladi.

Qiymatlarni dasturiy boshqarish qiziqarli mantiqni amalga oshirish imkonini beradi yoki yangilikka aylanishi mumkin. Ammo kodni debugging qilishda vaqt boʻylab sayohat real foyda beradi, buning tarixi eng kamida Smalltalkʼga borib taqaladi. Vaqt boʻylab sayohatda xatoliklarni topadigan joriy platformalar sirasiga funksional dasturlashga asoslangan Elm frontend tizimi, vaqtning istalgan lahzasini qayta tiklash uchun qaydlardan foydalanadigan, JavaScript ilovalari uchun holat konteyneri boʻlgan Redux kiradi. Bu tuzatuvchi platformalarning turli operatsion tizimlar uchun koʻplab variantlari, jumladan, WinDbg (Windows), rr (Linux) va Undo (Linux) kabilar mavjud. 

Vaqt boʻylab sayohat qiladigan dasturlash tillari oʻzgaruvchilar qiymatini avvalgi yoki keyingi holatlarini oʻzgartiradi. Agar siz katta hajmdagi qiymat bilan ishlasangiz, xotiradagi qiymatlardan koʻra maʼlumotlar omboridan foydalansangiz kerak. Vaqtinchalik maʼlumotlar omborida tranzaksiyalar hech qachon qayd qilinmaydi, faqat vaqt oʻlchoviga ega boʻladi. Koʻplab maʼlumotlar ombori PostrgreSQL, IBM Db2 va Snowflake kabi vaqtinchalik funksiyalarni oʻz ichiga oladi.

Hozirdan yaxshiroq vaqt yoʻq

Yuqoridagi tillar, debugger va maʼlumotlar ombori vaqt boʻylab holatni boshqarishga urinayotgan bir vaqtda, kompyuter ilmi va dasturlash vaqtni formal mantiqqa modellashtirishga harakat qilmoqda. Bunda vaqtni shunchaki DateTime bilan belgilab qoʻymasdan, koʻproq determenistik tarzda foydalansa boʻladi. Parallelizm asosan parallelizm tizimlarining umumiy oʻzgaruvchilar bilan tekshiruvi anchadan buyon dasturiy taʼminot ishlab chiqishdagi muammo sanaladi. Hatto bu mavzuga har yili oʻtkaziluvchi konferensiya ham bagʻishlangan.

Formal mantiq avvaliga texnik taʼminotni aniqlash va tekshirish uchun ishlab chiqilgan interval vaqtinchalik mantiqni (ITL) ham tarkibiga olgan holda, vaqt boʻyicha mulohazalar uchun tizim ishlab chiqdi.  U yakuniy davomiylikdan foydalanadi va chiziqli vaqtni taxmin qila oladi, shu bilan koʻp oqimlilikning texnik mantigʻini tekshirishda foydali boʻladi. Umuman olganda esa ITL e apparatni tekshirish tiliga kiritilgan edi.

ITL Tempuraʼdan foydalanadigan ilk tillardan biri hozirda (Ana) Tempura tarzida ishlab chiqilgan. Tempura aslida Rojer Heyl tomonidan yaratilgan, ammo uni hozirda Antonio Kau va Ben Moshkovski boshqaradi. Oxirgi reliz esa 2023-yil sentyabr oyida chiqdi. Uning tarkibida ovozni IP yordamida uzatish ilovasi, bajarish vaqtini monitoring qilish va sunʼiy intellekt mavjud. U toʻlaqonli til darajasiga chiqqan boʻlsa-da, sayt uni “tizim ITLʼda ifodalangan  sinxronizatsiya xususiyatlari, xavfsizlik va himoyani taʼminlash”ni tekshirish usuli sifatida qabul qiladi. Tasdiq nuqtalari esa tizimning manba kodiga qoʻshiladi va tizim ishlab turgan holatda oʻzgaruvchilar qiymati hamda qiymat oʻzgarishining vaqt qaydlari kabi maʼlumot davomiyligi (tizim holati) ni hosil qiladi.

Bir qator qoʻshimcha, ehtimol, mavjud boʻlmagan dasturlash tillari dasturiy va texnik mantiqni tekshirish uchun temporal mantiqning turli xususiyatlaridan foydalangan. Tokio ITLʼdan, Templog va Chronolog chiziqli vaqt mantigʻidan foydalangan boʻlsa, Temporal Prolog chiziqli va tarmoqli vaqt mantigʻiga asoslangan. Ularning barchasi mantiqiy dasturlar uchun moʻljallangan Prolog dasturlash tilidan oʻsib chiqqan. Doktor Kauning soʻzlariga qaraganda, bu oʻsha tillar va Tempura orasidagi asosiy farqlardan biri: “Prolog interpretatori ortga qaytish mexanizmiga ega, shuning uchun u nodetermenistik xususiyatlarni ham qayta ishlay oladi. Tempura interpretatorida esa ortga qaytish mexanizmi mavjud emas”.

Bu tillar bilan ishlash juda ajoyib oʻrganish bosqichini ortda qoldirganingiz va mazkur tillar foydalanadigan temporal mantiq tizimining istalgan konsepsiya va  qaydlarini tushunishingizni bildiradi. 2014-yilda ITLʼga bagʻishlangan “Matematika va sunʼiy intellekt annallari” jurnali maxsus sonining soʻzboshisida muharrirlar: “ITL koʻpincha amaliy qoʻllash uchun oʻta konsepsional yoki hisoblash borasida oʻta murakkab sanaladi” deya qayd etdi. Shu tariqa bizda temporal mantiqni tushunmasdan ham vaqt hamda holatni modellash, tahlil qilish va tekshirish imkonini beradigan bir qator tillar yoki modellash vositalari mavjud:

  • TLA+: matematikaga asoslangan, dastur va tizimlar, asosan distributiv tizimlar uchun yuqori darajadagi til.

  • Alloy: dasturlarni modellashtirish va dasturiy taʼminot loyihalari barqarorligini tekshirish uchun dasturiy taʼminot tili hamda analizatori. U Z xususiyatlar tili va Tarskining relyatsion hisoblashidan ilhomlanib, shuningdek, UML kabi modellashtirish tillari taʼsirida yaratilgan.

  • Promela va SPIN: parallel tizimlar uchun modellashtirish tili boʻlib, modellar xususiyatini tekshirish uchun SPIN model tekshirish vositasi bilan birgalikda ishlaydi.

  • UPPAAL: real vaqtdagi tizimlarni vaqtli avtomat tarmoqlari sifatida taqdim qilish orqali modellash, tasdiqlash va tekshirish vositasi. U dasturlash tili emas, koʻproq vizual modellash uskunasi sanaladi.

  • Event-B: tizim barqarorligini tekshirish uchun toʻplam nazariyasi va matematik dalillardan foydalanadigan tizim darajasidagi modellash hamda tahlil qilishning formal metodi.

  • Maude: parallel tizimlardagi holat oʻzgarishlari bilan ishlaydigan, tenglamalar va qayta yozish mantigʻidan foydalanadigan yuqori darajadagi til.


Bu temporal mantiq tillari va modellash tizimining koʻpchiligi butunlay joriy vaqtda ishlaydigan koʻp oqimli parallel tizimlardagi holatni oʻzgartirish uchun toʻgʻri vaqtni aniqlashga yoʻnaltirilgan. Keyingi boʻlimda biz haqiqiy oʻtmish va hozirgi holatni dastur joriy vaqtda foydalanishi mumkin boʻlgan resurs sifatida qaraydigan baʼzi nazariy fikrlarni koʻrib chiqamiz.

Kelajak – oʻzgaruvchan

Hozirgi paytda vaqt boʻylab sayohatning imkoni boʻlmasa-da, umumiy nisbiylik nazariyasi vaqt har ikki yoʻnalishda harakatlana olishi mumkin deb taxmin qiladi. Shuning uchun fiziklar buni amalga oshirish mumkin boʻlgan matematika bilan shugʻullanishga uringan. Yorugʻlik tezligining toʻrtdan bir qismida harakatlanadigan, cheksiz uzunlikka ega, oʻta zich obyektlardan tortib toʻlqinlarni vaqt boʻylab orqaga qaytaradigan koʻzgulargacha — eng noodatiy narsalar taklif qilib koʻrilgan.

Ana shu hisob-kitob va taxminlar tufayli fiziklar vaqt paradoksining bir turi boʻlgan “bobo paradoksi” (grandfather paradox) haqidagi bahslarni yotoqxonalardagi kechki suhbatlardan akademik jurnallargacha olib chiqqan. 1979-yildagi kitobda nazariyotchi astrofizik va kosmolog Igor Novikov “vaqtga oʻxshash yopiq egri chiziqlar” maʼlumotlar oʻsha egri chiziqlarda avvaldan mavjudligi yoki oʻtmish holati moslashtirilgani uchun barqarorlikni saqlab turguncha vaqt boʻylab sayohat qilishning imkoni bor deb taxmin qiladi. Novikovning bu barqarorlik prinsipini Larri Nivenning muxlislari tarixning saqlanish qonuni sifatida biladi.

Kompyuter ilmi olimi va futurolog Hans Moravek bundan xabar topgach, buni murakkab muammolarning tezkor yechimi sifatida qanday qoʻllash mumkinligini oʻylab qoldi. Vaqt zanjiri matigʻidan foydalangan Moravek manfiy vaqtni kechiktirish tizimidan foydalanib, asl vaqt va holatga qaytariladigan natijani hisoblab chiqish mumkin deb oʻylaydi. Novikov prinsipini buzmaslik uchun toʻgʻri javob oʻsha zahotiyoq paydo boʻlishi kerak boʻladi. Keyingi tadqiqotlarda koʻrsatilgandek, bu yerda gap koʻplab murakkab muammolar kompyuter oʻchiq yoki yoniq boʻlishi kabi vaziyat muammosini aniqlash zaruratiga borib taqalganida boʻladi. Siz eng yaxshi natijalarni hisoblab chiqib, uni oʻtmishga yuboradigan boʻlsangiz ham, kelajakda ham shunday hisob-kitobni amalga oshirishingizga toʻgʻri keladi. Buni “Bill va Tedning sarguzashtlari” deb atashingiz mumkin.

Agar sizga vaqt zanjirlari mantigʻining kod namunalari kerak boʻlsa, ularni “marak” nomi ostidagi kimdir yaratgan. Bu nazariy dastur parallel qayta ishlash imkoniga egaligi uchun Node.js orqali olinishi mumkin. Bu kompyuter toʻxtamasdan ishlay olganida istalgan shifrlash sxemasini buza oladigan, qoʻpol kuch bilan parol buzadigan xaker boʻladi. Kvant kompyuterlar yuzaga kelishi ehtimoli xavfsizlik tadqiqotchilarini yanada xavfsizroq algoritmlarni izlashga majbur qildi. Shu oʻrinda siz vaqt zanjirining qoʻpol kuchli buzilishi bilan yuzaga keladigan tartibsizlikni tasavvur qila olasizmi?

Yaxshiyamki, vaqt boʻylab sayohat masalasi hamon nazariya boʻlib qolmoqda. Siz maqolada tavsiflab bergan baʼzi tillardan dasturning chiziqli oqimini buzadigan yoki texnik va dasturiy holatning toʻrt oʻlchamli holati haqida tasavvur beradigan  dasturlashning turli qiziqarli konsepsiyalarini ishlatib koʻrish uchun foydalanishingiz mumkin. Ammo ertangi lotereya bileti raqamini ortga qaytarib yubora olmaysiz.

Hozircha.

 

Manba: Can a programming language implement time travel?

Mohirdev Telegram

Telegram kanalimizga obuna bo’lishni unutmang

Obuna bo'lish
Stack Overflow Blog

Stack Overflow Blog