3-mavzu: Dasturiy ta’miynot sathi. Mashina kodi, mnemakod va
dasturlash tillari
REJA:
3.1.
Dasturiy ta’miynot sathi
3.2.
Mashina kodi, mnemakod va avtokod
3.3.
Quyi va yuqori darajadagi dasturlash tillari
Biz allaqachon kompyuterda faqat kompyuter buyruqlarida yozilgan
dasturlarni bajarishga qodir ekanini aytdik. Biroq, mashina buyruqlar dasturiy juda
qiyin. Avvalo, buyruqlar tuzilmasi ko'pincha foydalanuvchi o'z muammolarini hal
qilish uchun algoritmlarni tasvirlashni rejalashtirayotgan ishlarning tuzilishiga
o'xshamaydi. Agar biz mashina buyruqlarida dastur tuzsak, foydalanuvchimiz
muayyan buyruqlar ketma-ketligi bilan har bir harakatini modellashtirishga majbur
bo'ladi. Ammo dasturlashning bunday usuli shubhasiz afzalliklarga ega: bu sizga
eng samarali dasturlarni yaratishga imkon beradi. Buning sababi shundaki, bu holda
kompyuter va vazifaning o'ziga xos xususiyatlarini birgalikda hisobga olish
mumkin.
Oddiy foydalanuvchi mashinaning buyruqlar dasturiga ega emas. Samarali
dasturlarni yaratish kerak bo'lgan mutaxassislar uchun bunday ehtiyoj tug'ilishi
mumkin. Masalan, ko'pincha keng maqsadli standart dasturlarning kutubxonalarini
ishlab chiquvchilaridan kelib chiqadi. Bunday mutaxassilarning ishini muayyan
darajaga ko'tara olish uchun ular avtomatik kod deb nomlangan ramziy kodlashning
ma'lum bir tizimida dasturlashishlari kerak. Aslida, bu mashina buyruqlar tizimi,
lekin yanada qulay ramziy tuzilishi. Bundan tashqari, avtotovodga mashina
yo'riqnomasining oddiy va eng keng tarqalgan kombinatsiyalarini simulyatsiya
qiluvchi qo'shimcha ko'rsatmalar kiritilishi mumkin. Albatta, avtomatik kodda
yozilgan dasturlarni kompyuter kodiga tarjima qiladigan kompyuterda kompilyator
bor.
Autocode oddiy dasturlash tilidir yoki aksincha, eng past darajadagi til deb
ataladi. Bu faqat birinchi kompyuterlarda keng dasturlashtirilgan edi. Avtoto'ldagi
ommaviy dasturiy quyidagi sabablarga ko'ra to'xtatildi. Yuqorida ta'kidlanganidek,
dasturlash juda ko'p vaqt talab qiladi. Shu sababli, yuqori darajadagi tillar deb
ataladigan turli xil til qo'shimchalari otokode ustida yaratilgan. Ushbu tillarning
asosiy
vazifasi
avtomatik
kodning
tushunilmaydigan
yo'riqnomalarini
foydalanuvchiga yaqinroq bo'lgan boshqa yo'riqnomalar bilan almashtirish orqali
dasturiy jarayonni osonlashtirishdir. Yuqori darajadagi tillarning yuqori qismiga
muammoli bo'lgan tillar kiradi. Ularning ko'rsatmalari foydalanuvchilarga ma'lum
mavzudagi sohalarda professional tarzda yozishni ta'minlaydi. Har bir kompyuterda
autokod odatda bitta. Yuqori darajadagi tillar, xususan, muammoni hal qiluvchi
yo'nalishdagi ko'plab tillar mavjud. Ulardan kompilyatorlar kompleks ierarxik
dasturiy tizimga aylandi. Dasturlash tillarini soddalashtirishning salbiy tomoni
dasturlarni kompyuter kodiga aylantirish uchun algoritmlarning murakkabligi va
natijada dasturchi tomonidan yaratilgan dasturlarning samaradorligini nazorat qilish
imkoniyatini yo'qotadi. Bu juda muhim ahamiyatga ega va biz katta muammolarni
hal qilishga qaratilgan e'tiborni inobatga olgan holda, unga qayta-qayta qaytib
boramiz.
Foydalanuvchilarning nuqtai nazari bo'yicha, avtokode bo'yicha dasturni ishlab
chiqish qiyin emas, balki u o'ziga xos kompyuterga yo'naltirilgani yoki boshqa
turdagi kompyuterlarga qaram bo'lib qolganligi sababli amaliy emas.
Kompyuterning turli xil modellarida autokodlar farq qiladi. Dasturni bitta avtomatik
koddan boshqasiga tarjima qiladigan universal tarjimon yo'q. Shuning uchun,
kompyuterning bir turidan ikkinchisiga o'tish foydalanuvchi avtomatik kodda
yozilgan barcha dasturlarni qayta yozishi kerak. Bu jarayon nafaqat super kompleks
emas, balki juda qimmat. Natijada yuqori darajadagi dasturlash tillarini ishlab
chiquvchilar oldida turgan muhim vazifalardan biri ma'lum kompyuterlarning
xususiyatlaridan qat'iy nazar tillarni yaratish edi. Bunday tillar juda ko'p sonda
paydo bo'lgan. Bunga Algol, Fortran, C va boshqalar kiradi, ular mashinadan
mustaqil, deyiladi, ular kompyuterlarning mustaqilligini ta'kidlaydi. Ularni universal
deb ham atashadi, bu esa juda keng algoritmlarni ifodalash qobiliyatini ko'rsatadi.
Mashinadan mustaqil dasturlash tillarini yaratish o'tgan asrning 50-60-yillari
davrida o'z go'zalligida ajoyib g'oyalar paydo bo'lishiga olib keldi. Kitoblarda
algoritmlarning an'anaviy ta'riflari oldindan izlanmagan holda biron bir kompyuter
tiliga o'tkazilishi mumkin emas. Odatda, ular noaniq bo'lib, ko'plab kamchiliklarni
o'z ichiga oladi, sharhning noaniqligi va boshqalarni kiritish mumkin. Xususan,
assotsiativlikning taxminiy xususiyatlari, komutativlik va raqamlar bo'yicha
operatsiyalarning taqsimlanishi tufayli, formuladagi ko'p formulalar yo'q bo'lib,
operatsiyalar tartibini belgilaydi. Shuning uchun, aslida, kitobning tavsiflari alohida
xususiyatlarning tarqalishi juda katta bo'lishi mumkin bo'lgan turli xil algoritmlarni
o'z ichiga oladi.
Dasturda har qanday algoritm har doim aniq ta'riflanadi. Uning rivojlanishiga
ko'plab tadqiqotlar olib borilmoqda. Boshqa mutaxassislarni uni takrorlash
zarurligini saqlash uchun bu ishni saqlab qolish kerak. Yuqori darajali
kompyuterdan mustaqil tillarda dastur saqlash funktsiyalarini bajarish uchun
qulaydir. Ideal rivojlangan algoritmlar va dasturlarning bagajlarini bunday tillarda
to'plash g'oyasi va har bir kompyuterda dasturlarni ushbu tillardan dasturiy kodga
aylantiradigan kompilyatorlar bo'lishi kerak edi. Bunday holda, bir vaqtning o'zida
ikkita muhim muammolarni hal qilish mumkin. Birinchidan, dasturlashdagi ortiqcha
narsa kamaydi. Ikkinchidan, dasturlarning buzilmasligi, ya'ni bitta binoning
kompyuteridan boshqa binoning kompyuteriga o'tkazilishi haqidagi savol avtomatik
ravishda hal qilindi. Kompyuterlar juda tez-tez o'z strukturasini sezilarli darajada
o'zgartirganligi sababli, juda muhim bo'lgan savol bo'lib qoldi. Ushbu g'oyani
amalga oshirishda kompilyatorlar dasturlarni o'ziga xos kompyuterlarning o'ziga xos
xususiyatlariga moslashtirish funktsiyalarini o'z zimmalariga oldi. Natijada,
foydalanuvchi kompyuterlar va kompilyatorlarning ishlash tamoyillari va
tamoyillarini bilib olishdan ozod etildi.
Dastlabki yillarda g'oya juda tez ishlab chiqilgan va amalga oshirilgan. Ko'p
turli sohalardagi yaxshi rivojlangan algoritmlar va dasturlar to'plamlari nashr etildi.
Ularning keng miqyosda almashinuvi, shu jumladan, xalqaro miqyosda amalga
oshirildi. Dasturlar, albatta, bir kompyuterdan boshqasiga osongina ko'chib keldi.
Asta-sekin foydalanuvchilar yuqori darajadagi kompyuterdan mustaqil tillardagi
dasturlarni ishlab chiqish bilan cheklangan kompyuterlar va kompilyatorlarning
batafsil o'rganishidan uzoqlashdilar. Biroq, yaqinda muhokama qilinayotgan g'oyani
hayotga tadbiq etishdan uzoq muddatli ta'sirga ega bo'lgan yorqin umidlar pasayib
ketdi.
Buning sababi sodda bo'lib chiqdi va ko'plab kompilyatorlarning ishi
noma'lumligi bilan bog'liq edi. Albatta, biz bu noto'g'ri kodlarni yaratganlik haqida
gapirmayapmiz, garchi bu ham ro'y beradi. Boshqa tomondan - kompilyatorlarning
hech biri natijada olingan kodlarning samaradorligini kafolatlaydi. Kichkina
muammolarni hal qilishda samaradorlik kamdan-kam hollarda yuzaga keladi.
Bunday vazifalar juda tez amalga oshiriladi, foydalanuvchi ko'p muammolarni
sezmaydi. Dasturlarning samaradorligini turli jihatlari, birinchi navbatda, ularni
amalga oshirish tezligi va olingan echimlarning aniqligi kompyuterda katta va
ayniqsa juda katta vazifalar qo'yilsa juda dolzarb bo'lib qoladi.
Ajoyib holat yuz berdi. Foydalanuvchilar o'zlarining muammolarini
kompyuterda hal qilish samaradorligi bilan to'g'ridan-to'g'ri qiziqishmoqda. U
samaradorligini oshirish uchun u katta harakatlarni amalga oshiradi: u matematik
modellarni o'zgartiradi, yangi soni usullarni ishlab chiqadi, dasturlarni qayta yozadi
va hokazo. Lekin foydalanuvchi kompyuterni dasturiy muhiti orqali, birinchi
navbatda, kompilyator va operatsion tizim orqali ko'rib chiqadi. Mashina kodlarini
yaratish va bajarish ushbu komponentlar foydalanuvchi dasturlarini amalga oshirish
samaradorligiga katta ta'sir ko'rsatadi. Biroq, ularning yordami bilan, yaratilgan
kompyuter kodlarining to'siqlarini qaerda ekanligini va samaradorligini oshirish
uchun yuqori darajadagi tilda ma'lum bir dasturda qanday o'zgarishlar bo'lishi
kerakligini tushunish qiyin yoki oddiygina mumkin emas. Dasturdan so'ng
kompilyatordan va operatsion tizimdan olinishi mumkin bo'lgan haqiqiy ma'lumot
ko'pincha dasturning o'zi va uning amalga oshiradigan algoritmlarini yangilash
yo'llarini tanlashda kamdan-kam hollarda qo'llanilishi mumkinligini anglash qiyin
va qiyin.
Foydalanuvchilar uchun eng samarali dasturlarni yaratish yo'llarini topish
uchun kompyuter bilan aloqa qilish masalasi o'ta dolzarbdir. Ammo uning qarori
deyarli butunlay foydalanuvchining elkasiga o'tadi. Kompyuter dasturiy muhiti hech
qanday xato tuzatuvchi dasturlarni, dasturlarning tuzilishini tahlil qilish uchun
tizimlarni va hokazolarni o'z ichiga olmaydi. Kompilyatorlarning tavsiflaridan hatto
eng kerakli yuqori darajali til konstruktsiyasining mashinalar kodida ishlash
samaradorligi kabi zarur ma'lumotlarni ham topish qiyin. Algoritm va dasturlarni
ishlab chiquvchilarning manfaatlariga etarlicha e'tibor bermaslik uchun tilni
yaratuvchilarni, kompilyatorlarni va operatsion tizimlarni tanqid qilishning ko'pgina
sabablari mavjud. Bu haqoratda haqiqat donasi bor, chunki foydalanuvchilarning
manfaatlari tizim dasturchilarining ko'pgina boshqa qiziqishlari orasida yo'qolib
ketgan va dominant bo'lishni to'xtatgan. Shu bilan birga, foydalanuvchilarning
muammolari juda qiyin bo'lganini bilish ham kerak.
Hisoblash jarayonlarining eng muhim xususiyatlaridan biri olingan
natijalarning aniqligi. Uzoq vaqt davomida ma'lum bo'lganidek, jarayonlarning
umumiy tavsifidan tashqari, raqamlarning vakillik shakli va yaxlitlash jarayonini
bajarish usuli ta'sir ko'rsatadi. Bu omillar mashinaga bog'liq. Ular haqida ma'lumot
oliy darajadagi tillar tomonidan algılanmıyor. Shuning uchun, albatta, bunday tillar,
hatto shu sababli ham, mustaqil ravishda mashinani mustaqil deb hisoblanmaydi,
chunki turli xil kompyuterlar raqamlarning turli ko'rinishlarini va yaxlitlashni
amalga oshirishning turli yo'llarini berishi mumkin. Uzoq muddatda bu natijaga olib
kelishi mumkin va amalda ham xuddi shu dasturni amalga oshirish natijalari juda
katta o'zgarishlarga olib keladi.
Nazorat savollari
1. Dunyodagi ilk dasturlar shoir J.Bironning qizi, grafin A. Lovelace qizi
ekanligi va u S.Babbage mashinasi uchun qilganini bildingizmi?
2. Fortran, birinchi yuqori darajadagi dasturlash tillaridan biri 1957 yilda
amalga oshirilgan va hozirgi kunga qadar faol ishlatilganini bilarmidingiz?
3. Fortran tili boshqa dasturiy tillarni ishlab chiquvchilar tomonidan muntazam
ravishda qattiq tanqidlarga uchraganligini bilasizmi? Shunga qaramay, ilmiy va
|