ββπ₯ "self-hosting" kompilyatorlar π
G'alati ammo deyarli barcha duch kelgan mavzu.
Cpython(yoki python)ning 65%i python'da yozilgan ekan. Typescript'ning github sahifasiga kirib ko'rsangiz, yanada g'alati holatga duch kelasiz "typescript, 100% typescript'da yozilgan" (wasssup!) Tushunganingizdek post shu jarayonni to'liq yoritishga harakat qiladi.
Mantiqan imkonsiz, X paydo bo'lmasidan avval, yangi X'ni qanday qilib X'da yozilishi mumkin? Tovuq va tuxum bekorga emasda! Lekin miyani shishirib o'ylasa buning iloji bor, misol uchun siz birinchi robot "yasovchi" robotni ishlab chiqasiz. Keyin esa u ham o'ziga o'xshagan robot "yasovchi" robotlarni ishlab chiqaveradi. Bundan esa "robot yasovchi robot, robot yasovchi robot tomonidan yasaladi" degan falsafa paydo bo'ladiβ οΈ Vs-Code'ning yangi talqinini, eski talqinida kod yozib ishlab chiqish mumkin-ku! Birinchi qadam muhim, birinchi robotni aynan siz yasaysiz va eski || kuchsiz narsadan foydalanib kuchliroqini ishlab chiqish mumkin. O'zini-o'zi "yoza" oladigan ya'ni "self-hosting" kompilyatorlarda ham shu holat.
Ushbu bosh og'riq uchun boshida albatta bir til kerak bo'ladi. Tasavvur qiling, shunaqangi tosh davrida yashayapsizki sizda assemblerda yozishdan boshqa chora yo'q (xuddi GM'dek). Biror loyihani 0 dan assemblerda terib chiqish, umringizni qisqartirishdan boshqasiga yaramaydi. Keyin odam bolasi ishlata oladigan til ishlab chiqmoqchi bo'lasiz. "Ojayib", lekin birozdan so'ng yeb qo'yganingizni tushunasiz. Yangi til ishlab chiqmoqchi bo'lsangiz uni yana oxirigacha assemblerda terib chiqishingizga to'gri keladi (2 15 1 30). Sizda yangi "genialniy" g'oya bor. Umringizni 5-10 yilga qisqartirib, 1-2 oy ichida tilingizni (xlang deylik) 1- talqin(=versiya) kompilyatorini assemblerda yozib chiqasiz. Bu talqin juda sodda va keyingilari uchun asos vazifasini o'tab, tilning asosiy xususiyatlari, operatsion tizim va xotira bilan ishlash ko'nikmalarini ham qanchadur miqdorda o'z ichiga olgan bo'ladi. Demak xlang-1 tayyor unda kod yozish mumkin. Endi esa xlang-1 va qisman assemblerdan foydalanib yangi xlang-2 hisoblanmish yanada kuchliroq kompilyatorni ishlab chiqasiz. Har safar avvalgi kompilyatordan foydalanganingiz sari tilingizda assemblerning ulushini 0%ga intiladi, qaysidur talqinda tilingizni 100% o'z-o'zida yozib qo'yasiz π Post boshida keltirilgan TypeScript ham avval JavaScriptda ishlab chiqilgan edi. Yuqorida izohlab o'tilgan yangi kompilyatorni, eski talqinida yozish kabi jarayonlarning barchasi bootstraping deb nomlanadi.
Shaxsan, bu texnikani ko'pchilik bilgan ikki soqolli "brat"lar ko'proq qo'llagan deb bilaman. Ken Thompson bir kun B tilini ishlab chiqgan. Sintaksis biroz sodda, hisob-kitoblarga yaraydigan yaxshi til bo'lgan. Ammo Dennis Ritchie "brat"iga qarab UNIXni oxirigacha assemblerda terib chiqsang soqoling ichkariga qarab o'sadi, kel undan ko'ra xotira & "temir mashina" bilan ishlay oladigan til ishlab chiqaylik degan (sarkazm). So'ng, B'dan foydalanib C'ni yaratib qo'yishgan. Ammo C'ning o'rtada kichkina relizi bo'lganki aynan o'sha kompilyatordan foydalanib, ushbu ketma-ketlik asosida yangi kompilyatorlar yozilib borgan. Ushbu texnika odamzotni qanday muammolardan saqlab qolganini shunchaki tasavvur qilib ko'ring.
Sizda savol paydo bo'lishi mumkin, python C'ga, C esa self-hosting yoki boshqa balo-battarlarga, hammasi esa assemblerga asoslangan bo'lsin ammo assemblerning o'zichi ?! Javob: assembler 0 va 1 larga asoslangan. Ha, siz u vaqtda yuqoridagidek "xitrilik"(bootstraping, self hosting ...) qila olmas edingiz va MASHINA KODIdaπ₯ yozishga shunchaki majbur bo'lgansiz. Ammo keyingi versiyalarida "xitrilik" ishlatilgan ya'ni assembler-2 uchun, assembler-1dan foydalanishgan ... Savolni 0 va 1 larga nisbatan qo'llaydigan bo'lsak, 0 va 1 larning kelib chiqishi elektronika va mikroprotsessorlarga borib taqaladi.
Mavzu juda keng, keyinroq albatta T-diagrammalarini o'rganing(shu yordamida tushunganman). Asosiy savolingizga javob topgan bo'lsangiz xursandman.
Foydali deb bilsangiz yaqinlaringizga ulashing.
@AbduazizPy
Post #314
746