Python qanday ishlaydi?
14-09-2024
Python qanday ishlaydi?
Bu kichik postda Pythonda yozilgan kod qanday ishga tushishi va bajarilishini qisqacha muhokama qilib ko'ramiz.
Bu post juda mukammal yoritolmasligi mumkin, ammo asosiy tasavvur hosil qilishga yordam beroladi deb umid qilaman.
Ko'pchilik Pythonni Interpreter(tarjimon) dasturlash tili ekanini yaxshi bilishadi. Xo'sh bu o'zi nimani anglatadi? Buni tushinishim uchun Interpreter(tarjimon) va Kompilyator orasidagi farqni bilishimiz kerak. Chunki Python interpreter bo'lsa ham, interpretatsiyadan oldin bayt kodga kompilyatsiya qilinadi. Unda postimizda kompilyatorni tushunishdan boshlaymiz.
Kompilyator
Kompilyatorning maqsadi yozgan kodimizni to'laligicha ichida foydalanilgan kutibxonalari bilan bir butun yaxlit xolatga keltirishdan iborat.
Yana ham aniqroq qiladigan bo'lsak:
Dasturlash tillari inson o'qib tushuna oladigan ko'rinishda, dasturlar yozish uchun ishlab chiqilgan. Biroq, kompyuterlar odam o'qishi va yozishi qiyin bo'lgan mashina kodi bilan ishlaydi. Kompilyatorlar dasturlash tillarining manba kodini mashina kodiga tarjima qiladi.
Kompilyatsiya jarayoni bir nechta qadamlar bilan amalga oshiriladi.
Kompilatsion dasturlash tilida yozilgan dastur manba kodi kiritilganidan so'ng:
-
Leksik tahlil. Lexical Analysis. Kompilaytorga manbaa kodi berilganidan so'ng Lexical Analizerr tomonidan tokenlarga ya'ni bo'laklarga ajratib chiqiladi. Bunda token map ko'rinishga keltirilib, undagi barcha buyruqlar va dasturlash tiliga oid bo'lmagan so'zlar alohida qilib ajaratib olinadi.
-
Grammatik (Sintaktik) tekshiruv. Syntax Analysis. Bu bosqichda kod dasturlash tili gramatikasi bo'yicha tekshiriladi. Tekshiruvlar quyidagi tartibda amalga oshiriladi.
- Qavslarning to'g'ri ochilishi va yopilishi.
- Tilga tegishli bo'lgan yakunlash belgilari va operatorlarning to'g'ri ishlatilinishi.
Yangi o'rganuvchilar bu bosqichda eng ko'p muamolarga duch kelishadi.
-
Ma’noviy tekshiruv. Semantic Analysis. Bu bosqichda tekshiriladigan asosiy narsalar o'zgaruvchilar turlari ularga berilgan qiymatlarning to'gri ekani, ya'ni biz integer turiga string qiymat bergan bo'lsak kompilyator shu bosqichda bizga xatolik xabarini ko'rsatadi.
-
Oraliq ko’rinishga keltirish. Intermediate Representation (IR) Generation Bu bosqichda kod ortiqcha narsalardan tozlanadi.
- Izohlar
- Bo'sh qoldirilgan qatorlar.
- Optimallashtirish. Optimization. Bu bosqichda kod optimizatsiya qilinib soddalashtiriladi. Misol uchun
// Optimallashmagan kod
int sum () {
int a = 5, b = 6;
return a + b;
}
// Soddalashtirilgan kod
int sum () {
return 5 + 6;
}
- Kod generatsiyasi. Code Generation. Bu bosqichda bizning kodimiz kompyuter tushunadigan holatga keltiriladi, ya'ni manba kodimiz avval Assembler keyin esa mashina kodiga(machine code) ga o'giriladi. Menimcha kompilyatior haqida umumiy tasavurga ega bo'ldik. Endi esa Interpretator(Interpreter) haqida gaplashsak bo'ladi.
Interpretator
Interpretator — Bu ham manba kodini kompyuter tiliga o'zgartirib berish vazifasini bajaradi, faqatgina ishlash texnologiyasi boshqacharoq. Interpretator, dasturlash tilida yozilgan kodlarni ketma — ket o'qib, mashina tiliga o'zgartirib boradi. Xatolik paydo bo'lsa, o'sha zahoti dasturchiga ma'lum qiladi. Bu ketma — ketlikda o'zgartirish, kompilyatorga nisbatan sekinroq amalga oshiriladi(ba'zi holllarda kompilyatorga qaraganda 50 barobar sekin). Dastur natijasini ko'rish uchun, har safar kodlarni interpretatordan o'tkazish kerak bo'ladi(kompilyatorga o'xshab bir marotaba ob'yekt kod yaratib qo'yib, keyin har doim ishlatishning iloji yo'q). Bundan ko'rinib turibdiki, interpretator asosan saytlar, umumiy holda veb dasturlashda ishlatiladi. Biror saytning yuklanishi jarayoni uzunligi, interpretatorda o'zgartirish amalga oshirilishi bilan tushuntirilishi mumkin. Interpretator ishlatadigan dasturlash tillariga PHP, JavaScript misol bo'la oladi.
Python o'rganuvchilarining aksar qismi Pythonni Interpretatsion til deb o'rganadi bu bir tomonda to'g'ri. Ammo Python kodlarni kompilyatsiya qiladi va bayt kodga o'giradi. Biroq Pythonning kompilyatsiya jarayoni nisbatan sodda.
- Manba kodini tahlil(parse) qilish va daraxt(tree) ga ajratish.
- Tahlil qilingan(parsed) Daraxt(tree)ni Abstract Syntax Tree(AST) ga o'girish.
- Belgilar jadvalini yaratish(symbol table).
- ASTdan kod obyektini yaratish. Bu bosqich quyidagilarni o'z ichiga oladi.
- ASTni grafga aylantirish(flow control graph).
- Tayyor grafdan(flow control graph) kod obyektini chiqarish.
Manba kodini tahlil qilish daraxtiga ajratish va bunday tahlildan AST yaratish standart jarayon bo'lib Python hech qanday qo'shimchalar kiritmaydi.
Agar xato kamchiliklar ko'rgan bo'lsangiz [email protected]
manzilida o'z fikr va mulohazalaringizni qoldirishingiz mumkin.
© 2024 Farrux Elomonov