1.2-мысал
Мысалы, класстың бір осындай ұсынылуы төмендегідей көрсетілген:
constclass_size = 20;
struct student {string student-id;
string student-name;
charletter-grade;
}
student class[class_size];
Басқару абстракциясы жалпы қасиеттеріне қарай бағдарламалық
құрылымдардың түрлі типтерін әр түрлі топтарға жіктейді. Мысалы,
мақұлдау (түр операторы), блок операторлары, таңдап алу конструк-
14
циялары, соның ішінде шартты операторлар (if-then-else конструк-
циясы) немесе көп мәнді таңдау операторлары (case конструкциясы),
анықталмаған итерация – конструкция реттілігінің шартты қайтала-
нуы, анықталған итерация – алдын ала анықталған итерациялардың
нақты саны, рәсімді бастау және функцияны бастау – бұл басқарудың
түрлі абстракциялары. Абстракциялардың басты артықшылығы оңай
өзгертілетін және сақталатын жоғарғы деңгей бағдарламасының кон-
струкцияларын сипаттау болып табылады.
Басқару абстракциясы ақпараттық диаграммаларды басқарумен бай-
ланысты. Мысалы, егер (<предикат>) кейін немесе
- бұл<предикат>ақиқаттығының мәніне негізделе
отырып, немесетаңдайтын басқару
абстракциясы.Егер біз предикатты бағалауды ромб пішініндегі блок-сы-
зба ретінде, ал операторларды тік төртбұрыш ретінде елестетсек, шарт-
ты операторлар 1.2а-суретте көрсетілгендей беріледі. Осыған ұқсас,
Evaluate condition – Бағалау шарты, True – Рас, False – Жалған, then-
statement – онда-пікір, else-statement –басқа-пікір, if-then-else – егер-
онда-басқа, index=index + step size – көрсеткіш=көрсеткіш + қадам өл-
шемі, Initialize index –Көрсеткіштің бастапқы мәнін белгілеу, for-loop
– for-циклі, Exit – Шығу
1.2-сурет Шартты оператор (if-then-else сызбалары) мен анықталған
итерацияның орындалу тәртібі.
15
Осы секілді біз операторлар блогының қайталануын анықталған ите-
рация, анықталаған итерация немесе деректер арқылы анықтала-
тын итерация, яғни итерациялар саны деректер элементтері арқылы
анықталған итерация, ретінде жасай аламыз.
Анықталған итерация индекс айнымалысы тәсілін, төменгі шекті,
жоғарғы шекті және қадамның белгіленген өлшемін қолдана отырып,
операторлар блогын белгіленген рет қайталайды. Индекстік айнымалы
бастапқы мәнді немесе төменгі (не жоғарғы) шекті қабылдап, әр қадам-
нан басқа қадамға қарай, төменгі шек≤индекс айнымалысы≤төменгі
шек шегінен шыққанша өте береді.
Бұл анықталған итерация деп аталады, себебі саны оператор блогы
арқылы белгіленген түрде анықталады. Бұл үдеріс үш мәнге негізделеді:
төменгі шек, жоғарғы шек және қадам өлшемі.
Бұл мәндер белгілі бір итерация ішінде операторлар блогының щең-
берінде өзгертіле алмайды. "FOR" циклі үшін орындаудың жалпыланған
блок-сызбасы 1.2b-суретте көрсетілген. Орындалу қалпын бағалау ромб
пішініндегі блок-сызбада беріледі. Операторлар блогы тік төртбұрыш
ішінде бейнеленген, ал үзік-үзік сызықтар жиегі индекстің орнатылған
үстелуін білдіреді.
Анықталмаған итерацияның құрылымы келесі итерация циклін орын-
дау үшін деректердің логикалық типін (буль типі) бағалайды, ал преди-
катты құрайтын компоненттер құрылым ішінде операторлар блогының
тұлғасында өзгертіле алады. Осы қасиеттің себебінен анықталмаған
итерацияда анықталмаған кідірістің пайда болуы мүмкіндігі туындай-
ды.
Зерттелеген және опреторлар блогына ілесетін бірнеше шартты опе-
раторлар блогтарын қамтитын бірқатар циклдар типтері болуы мүм-
кін. Алайда, барлық түрлі циклдар типтерінің функционалдық күші
анықталмаған екі итерацияның көмегімен енгізілгені дәләлденген:
"WHILE" және "DO WHILE" циклдары. "WHILE" және "DO WHILE"
циклдарының бір-ақ кіру және шығу нүктелері бар және циклдан тыс
жерге шығуға жол берілмейді. Бұдан басқа олардың жалғыз ғана шарт-
ты опреторы бар. Бұл оператор итерацияның келесі циклына өту-өтпеу
жағдайын немесе циклдан шығу қажеттігін анықтайды. "WHILE" және
"DO WHILE" циклдары үшін орындаудың жалпыланған блок-сызбасы
1.3-суретте көрсетілген.
"WHILE" циклы блок-сызбаны құрудың алдында деректердің логика-
лық типіне сәйкестілігін тексереді. Pascal секілді тілдерде "REPEAT-
UNTIL" деп аталатын "DO WHILE" циклы алдымен операторлар блогын
орындайдын, содан кейін қалпын тексереді.
16
Evaluate condition – Бағалау шарты, True – Рас, False – Жалған, Then-
statement block – Онда-пікір блогі, Statement block – Пікір блогі, While-
loop – «While» циклі, Do-while loop – «Do-while» циклі, Exit – Шығу
1.3-сурет Анықталмаған итерация үшін орындалу тәртібінің жалпы-
ланған блок-сызбасы.
Бұл екі конструкциялардың арасындағы айырмашылық "DO WHILE"
циклы операторлар блогын кемінде бір рет орындайды, ал "WHILE" ци-
клы оператор блогын мүлдем қолданбауы мүмкін
Деректер қорларының көмегімен басқарылатын итерациялар, яғни ите-
раторлар, әдетте мультисеттер мен мультисеттерді үлгілеудің жүйелі
тізімдері секілді деректер элементтерінің көрсеткіштерін жалпыланды-
ратын деректер абстракциясында қолданылады. Массивтерді қолдана-
тын итерациялардың классикалық сызбасынан өзгеше деректердің ішкі
құрылымы бағдарламашыға жасырын болып келеді. Бұл итераторлар
әр элемент үшін жалпы деректер блогын орындайды. Итераторлар бұл
қызықты абстракциялар, себебі итерациялар саны деректер өлшеміне
байланысты және олар тізімдегі элементтерден автоматты түрде аттап
өтеді. Lisp және Java-да осындай құрылым "FOREACH" циклы болып
табылады. Ол итерацияны тізімдегі әр элемент сайын орындайды. Ите-
рацияға арналған жалпы конструкция төменде көрсетілген::
foreachelement in <multiset>{
<block of statements>;}
17
<мульти-жиынтықтағы> {<элементтер блогіндегі>} әр элемент үшін
Қарапайым мысалдарға жүгіне отырып, блок-сызба мен тіркелеген
блок-сызбаларды талдайық. 1.3 мысалынан тіркелген шартты опера-
торлар үшін орындалу тәртібінің блок-сызбасын көруге болады. 1.4
мысалы анықталмаған итерацияға тіркелген анықталған итерация үшін
орындалу тәртібінің блок-сызбасын көрсетеді. Сызбаның әдісі жоғарғы
деңгей конструкциясын аударып, содан кейін біртіндеп конструкция-
лардың келесі деңгейлерін аудару болып табылады.
1.3-мысал
Бұл мысалда біз алдымен сыртқы шартты оператор үшін блок-сызбаны
әзірлейміз; сыртқы блок-сызбаға арналған блок-сызбаны әзірлеу кезінде
толық шартты оператор, оператор блогының бірі ретінде қарастырыла-
ды. Екінші қадам барысында біз шартты оператордың тіркелген ішкі
блогын кеңейтеміз. Нәтиже 1.4-суретте көрсетілген.
if (1
>) – егер (<шарт
1
>), if (2
>) – егер (<шарт
2
>), else (2
>)
– басқа (<блок
2
>), else (3
>) – басқа (<блок
3
>), 1
> – <блок
1
>
1
> – <шарт
1
>, True – Рас, False – Жалған, 2
> – <шарт
2
>,
2
> – <блок
2
>, 3
> – <блок
3
>
1.4-сурет Тіркелген шартты операторлар үшін жалпыланған блок-сызба.
18
while (1
>) – while (<шарт
1
>), if (2
>) – егер (<шарт
2
>), 1
>
– <блок
1
>, else (2
>) – басқа (<блок
2
>), 1
> – <шарт
1
>, 2
>
– <блок
2
>, 2
> – <шарт
2
>, 4
> – <блок
4
>, True – Рас, False –
Жалған, Exit – Шығу
1.5-сурет. Тіркелген операторлар үшін блок-сызба.
1.4-мысал
Бұл мысал "WHILE" тіркелген циклына арналған блок-сызбаның да-
муын көрсетеді. Алдымен "WHILE" сыртқы циклына арналған блок-сы-
зба "WHILE"сыртқы циклының щеңберіндегі операторларда секілді
ішкі шартты операторды өңдеу арқылы әзірленеді. Бұдан кейін енгізіл-
ген шартты оператор үшін блок-сызба жасалады. Дайын блок-сызба
1.5-суретте бейнеленген.
1.4.2 Қолсараптамасы (бағдарламаны түсіну) және Ауысулар
Бағдарламалық қамтамасыз ету циклына қатысты маңызды мәселе-
лердің бірі бағдарламалық қамтамасыз етуді сүйемелдеу болып табы-
лады, себебі
(1) даму мүмкіндігі бар, (2) бағдарламашылар өз білімдерін ары қа-
рай жетілдіреді, (3) бағдарламашылар белгілі бір уақыт аралығында өз
тәсілдерін ұмытады және (4) сәулет пен технологиялар айтарлықтай
өзгереді. Бағдарламалық қамтамасыз етуді сүйемелдеу қол сараптама-
сына тікелей қатысты: егер басқару элементі күрделі болса, оны түсіну
19
қиынға соғады және бағдарламалық қамтамасыз етуді өзгерту әрекет-
тері қателіктерге әкеліп соғады. Бағдарламалауды түсіну мен стандарт-
тарын қолдайтын қажетті тілдік функциялардың болмауының әсерінен
БҚ пайдасыз болып қалады немесе ұйымдар бағдарламалық қамтама-
сыз етуді сүйемелдеу үшін едәуір уақыт пен ресурстарды қажет ететін
болады.
Бағдарламашылар бөлімдерді белгілі абстрактілі конструкциялар, (2)
абстрактылы аймақтарда орындалу тәртібін түсіну, (3) түрлі бағдарла-
малық бөлімшелер арасында ақпараттық ағымдарды үлгілеу және (4)
бағдарламаны орындамай тұрып, жекелеген конструкцияларды ойша
құрғаннан кейін біртіндеп болжамдау арқылы соңғы шартты болжамдау
көмегімен түсінеді.
Бағдарламаның адамға түсінікті болуының көптеген факторлары бар.
Кодты түсіну үшін бағдарламалау саласында білімнің болуы қажет, бірақ
басқа адам арқылы жазылған кодты түсіну үшін бұл жеткіліксіз. Әзір-
ленген кодты түсінуге әсер ететін бірнеше факторлар бар: (1) бағдарла-
малау тіліндегі абстракция деңгейі, (2) логиканы кодқа айналдыруға қа-
жетті абстракцияның қарапайымдылығы, (3) кодтан шамадан тыс бақы-
лауды жою және (4) басқалар түсіне алатын айнамалылар, блок, модуль
және алгоритм деңгейлерінде айтарлықтай түсініктеме беру.
Бұдан басқа көптеген ұйымдар бағдарламалаудың белгілі бір стилі мен
ең қолайлы тілді қолданады.
Адамдар құрылылмдалған, түсінікті түрде сыныпталған, модульдері
функционалды және орындау тәртібіне сәйкес бағдарламаларды оңай
түсінеді. Себебі модульде тармақатар саны ұлғайған сайын адамдарға
модульдің жалпы функционалдығын түсініп, сыныптау қиынға соға-
ды. Бұдан басқа ауысулардың тым көп болуы бағдарлама жұмысының
құрылымдану деңгейін төмендетіп, адамдар бағдарламаны орындау ба-
рысында оның қылығын көзге елестете алмайды.
Шартсыз ауысулардың (ауысу операторы) функционалдық күші мак-
сималды екені дәлелденген болатын. Шартсыз ауысулар (1) таңдау:
шартты оператор немесе таңдау операторы және (2) итерация: "WHILE
DO"циклі, "DO WHILE" циклі, "FOR" циклі, сондай-ақ процедураларды
шақыру мен функцияларды шақыру секілді басқару абстракцияларын
жүзеге асыруда қолданылады. Модульде ауысуларда (1) бірнеше нұсқа-
уларды қашықтықтан жергілікті түрде тасымалдау және (2) операторлар
блогынан шығу секілді ауысулар қолданылады. 1970 жылдары компью-
тер саласындағы ғалымдар арасында қол сараптамасы мен ауысуларды
қолдану жөнінде ашық дискуссия өткізілді. Шартсыз ауысулар мен қол
сараптамасын қолдану бір-біріне кері пропорционал болып табыла-
20
ды. Адамдар ауысуларды бірнеше нұсқаулар үшін қашықтықта тікелей
бағытта өңдей алады. Алайда артқа қарай ауысу, үлкен қашықтықтағы
ауысу және жалпы тым көп ауысулар бағдарламаны сараптау үдерісін
едәуір қысқартады. Бағдарламаны блоктарға, ішкі бағдарламаларға,
"WHILE DO" және "DO WHILE" циклдары секілді анық функциялары
бар объектілер мен абстракцияларға құрылымдау бағдарламаны сарап-
тау үдерісін жақсартады.
1.6а және b-суреттері екі бірдей бағдарламаларды орындау тәртібін
көрсетеді. 1.6а-суретіндегі бағдарлама бір нұсқауды бір бағытта бір рет
ауыстырылып отырса, 1.6b –суретінде көптеген ауысулар тік және кері
ауысулармен қатар қолданылады, ал операторлар тіркелеген ауысу опе-
раторларымен араласып кетеді ("GOTO" операторлары).
S1 мен S'1 S'300 –ге ілесе отырып, баламалы, S2 мен S'300кері бағытта
S'2 –ге баламалы, S3 пен S'2, S300 эквивалентна S'301-ге кері ауыса оты-
рып баламалы және S4-тен S299-ге дейінгі барлық операторлар сәйкес
S'3 -тен S'298-ге дейінгі операторлармен баламалы деп көзге елестетей-
ік. Егер біз функционалдық баламалылыққа, яғни бірдей тапсырманы
орындау мүмкіндігіне, көз жүгіртсек, екі бағдарламаның функционал-
дығы баламалы екеніне көз жеткіземіз. Алайда құрылымданған бағдар-
ламаны 1.6а-суретінен түсіну оңайырақ.
Ауысудың шартсыз операторларын еркін қолданудың себебінен туын-
даған түсінбеушілік түрлі басқару абстракцияларының жасалуына
әкеліп соқты. Ауысу операторларын қолдану абстракцияларды бақылау
мен тіркелген блоктардан шығумен шектеледі.
Structured program – Құрылымданған бағдарлама, Program with jumps –
Қарғулары бар бағдарлама
1.6-сурет Ауысулары бар спагетти кодымен салыстырғандағы
құрылымданған бағдарламаның блок-сызбасы
21
Бұл сурет аусу операторларын қолданатын бағдарламалар бульдік айны-
малылар амалдары мен (IF-THEN-ELSE) шартты операторы, "WHILE"
немесе "DO WHILE" циклдары секілді басқару абстракцияларын қол-
дану арқылы функционалдығы жағынан баламалы құрылымданған
бағдарламаға аударылу мүмкіндігін дәлелдейді.
1.4.3 Бағдарламалардың орындалуы
Бағдарламаның дыбыстық орындалуының негізгі белгілері:
1. Бағдарламалау тілінің тілдік конструкциялары нақты түрде анықта-
луы қажет.
2. Әрбір тілдік конструкция үшін бірегей мән болуы қажет, себебі ком-
пьютерлер екі мәнді сұранымдарды өңдей алмайды.
3. Әрбір жоғарғы деңгейдегі конструкция компьютерде әрдайым бірдей
іс-ірекеттерді орындайтын төменгі деңгей конструкциясының жүйесіне
аударылуы тиіс
4. Компьютер бірдей ақырғы нәтижені шығаратын төменгі деңгейдегі
конструкциялардың іс-әрекеттер тәртібін орындауы қажет.
1.7-суретте көрсетілгендей бағдарламалау тілі қабатына дейін бағдар-
ламаны сүйемелдеудің бірнеше қабаты бар. Ең төменгі деңгейде «бос»
(БҚ жоқ) машина және машиналық код орналасады. Келесі деңгей – бұл
операциялық жүйе, жүйелік утилит және тілдік аудармашылар. Сыртқы
қабат – бұл жоғарғы деңгейдегі бағдарламалау және қолданбалы дең-
гейдің хаттамасы. Жоғарғы деңгейдегі бағдарлама төменгі деңгейдегі
нұсқауларға аударылып, бағдарламаны орындауға қажетті компьютерлік
жүйелік ресурстар мен утилиттреді пайдалану үшін, аралық қабаттың
бірнеше интерфейсін қолданады.
Жоғарғы деңгей нұсқауларын төменгі деңгей нұсқауларына аударудың
үш тәсілі бар: (1) бағдарламаны қолданар алдында нұсқауларды ком-
пиляциялау; (2) орнатылған абстрактілі машинаны қолдана отырып,
жоғарғы деңгей бағдарламасын түсіндіру; және (3) жартылай компи-
ляцияланған код пен жартылай түсіндірілген код нәтижесін көрсететін
жоғарғы деңгей тілінің мерзімді компиляциялануы.
1.8-суретте көрсетілгендей компиляциялау үдерісі бағдарламаны орын-
дамас бұрын жоғарғы деңгей нұсқауларын төменгі деңгей нұсқауларына
аударады. Екінші жағынан, аудармашылар бұл нұсқауды бірден ауда-
рып, орындайды. Компиляцияланған кодпен салыстырғанда түсіндіріл-
ген код оператор үшін аудару және орындау циклдарынан өтеді.
22
Application layer developed in high-level languages – Жоғары деңгейлі тіл-
дерде әзірленген қосымша қабаты
System software – Жүйелердің бағдарламалық жасақтамасы
Low-level machine executing machine code – Машиналық тілді орындай-
тый төмен деңгейлі машина
1.7-сурет. Компьютердегі бағдарламалық қамтамасыз етудің түрлі қа-
баттары.
High-level program – Жоғары деңгейлі бағдарлама, Compiler translates all
high level statements at once – Құрастырушы бағдарлама барлық жоғары
деңгейлі пікірлерді бір уақытта аударады, Low-level instructions – Төмен-
гі деңгейлі нұсқаулар, Execute – Орындау, Interpreter repeatedly translates
one high level statement and executes corresponding instructions at run time
– Аудармашы бір жоғарғы деңгейлі пікірді бірнеше рет аударады және
орындау кезінде тиісті нұсқауларды орындайды, Go back to interpret next
statement – Келесі пікірді аударуға кері қайту
1.8-сурет. Компиляциялау мен түсіндіруді салыстыру. (a) схемалық ком-
пиляция (b) схемалық түсіндіру.
23
Компиляцияланған кодтың артықшылығы бағдарламаны орындау бары-
сында ешбір қосымша шығындардың жоқтығы болып табылады. Ком-
пиляторларды қолданудың тағы басқа артықшылығы – бұл бағдарлама
орындалмас бұрын, бағдарламалық қателіктердің көп пайызы анықта-
лып, жадының таралуы оңтайландырылады.
Түсіндірілген кодтың тиімділігі компиляциялаумен салыстырғанда әл-
деқайда төменірек, себебі аудару үдерісі орындау үдерісімен сапырылы-
сып кетеді. Түсіндірудің тағы бір кемшілігі – бағдарламаны орындау-
дың алдында барлық қателіктер анықталмайды, сондай-ақ бағдарлама-
ны түсіндіру көптеген нұсқауларды орындаудан кейін жаңылыс беруі
мүмкін. Бұл аса маңызды бағдарламалар үшін қауіп төндіреді. Алайда
аудармашыларды әзірлеу оңай және олар компиляциялау әдістері дамы-
маған тілдер үшін қолданылған болатын.
Ресми түрдегі бағдарламадағы бағдарламаны дерек ретінде жетілдіріп,
кейін орындау барысында оларды бағдарламаға айналдыра алатын тіл-
дер үшін аудармашылар таңдалған болатын. Аудармашылар айнымалы-
лардың барлық мәндерін көрсете отырып, нұсқаулар деңгейінде ретке
келтірудің одан да интерактивті мүмкіндіктердің пайда болуына се-
бепші болады. Аудармашылар айнымалы орындау барысында кез келген
деректер объектісімен байланыса алтын динамикалық түрде типтелген
тілдердің орындалуын сүйемелдейді. Бұдан басқа аудармашылар маши-
налық тәуелсіз бағдарламаларды сүйемелдейді, себебі бағдарламалар
аудармашының щеңберінде орындалады, ал бағдарлама түрлі машина-
ларға тасымалданбауы тиіс.
Ғаламтор технологияларына негізделген тілдерде код белгілі бір опера-
циялық жүйеге арналып орнатылған абстрактілі машинаны қабылдай
алмайтын клиенттік компьютерлерге ағын ретінде беріледі. Абстрак-
тілі машина – бұл операциялық жүйе мен компьютер сәулетіне тәуелсіз
нұсқауларды орындайтын және осы машинада жұмыс істейтін бағдар-
лама. Java тілдерінің виртуалды машинасы (JVM) – бұл Java бағдарла-
маларын бірнеше платформаларда орындайтын абстрактілі машиналар-
дың бірі. Нұсқауларды JVM арқылы орындау машиналық командалар-
ды өз машиналарында орындауға қарағанда әлдеқайда баяу, себебі JVM
бірегей сәйкестілік үшін нөлдік дербестендіруді қолданады, ал қазіргі
компьютерлер екі немесе үш дербестігі бар нұсқаулар жиынтығын қол-
данады.
2.1-тарауда сипатталғандай дербестігі үлкен машиналарда кодты орын-
дау нөлдік дербестігі бар машиналарға қарағанда әлдеқайда тезірек жү-
зеге асырылады.
Аса жоғары дербес машиналарында орындауды жеделдету үшін, JIT
24
компиляторлары Java машинасында баламалы нұсқауларды орындаудан
әлдеқайда жылдам туған операциялық жүйенің командаларын қолдана
отырып, орындалып отырған тәсілдердің қорын сақтайды. Қауіпсіздікті
тексергеннен кейін аралық код үзінділері аралық код басталғаннан кейін
машиналық кодқа аударылып, кітапханада алдағы іздеу үшін кэштеледі.
Келесі үзінді басталған кезде, орындалатын машиналық код ізделіп,
орындалады. Осыған ұқсас, егер жоғары деңгейлі Java тәсілі өз кітапха-
насында компиляцияланған кодқа ие болса, ол шығарылып, орындала-
ды. Егер екілік код түсініксіз немесе үзінді шынайы уақыт аралығында
компиляцияланбайтын болса, бұл жағдайда жоғарғы деңгей коды нұсқа-
уларға сәйкес Java машинасына ауларылып, орындалады. JIT компиля-
циялары үшін жалпы сызба 1.9-суретте көрсетілген.
Кодтық үзінділер алғаш рет компиляцияға ұшыраған кезде аударудың
қосымша шығындары пайда болады. Алайда келесі үзінділерде аудару-
дың ешбір қосымша шығындары пайда болмайды. JIT компиляциясы-
ның көмегімен кодтың орындалуының тиімділігі түсіндірілетін код пен
компиляцияланған кодтың орындалу тиімділігінің арасында жатыр.
Microsoft тәрізді кейбір өндірушілердің Жалпы Аралық Тіл (CIL) деп
аталатын өз аралық тілдері бар. Жалпы аралық тілдің артықшылығы
жоғарғы деңгейдің түрлі тілдерінің арасында сәйкестілікті қамьамасыз
ету болып табылады. 1.10-суретте көрсетілгендей жоғарғы деңгей тілі
алдымен жалпы аралық тілге аударылады, кейін Ғаламтор арқылы тасы-
малданып, JIT компиляциясының көмегімен түрлі сәулеттерде компи-
ляцияға ұшырайды. C#, visual C++, F# және Visual Basic секілді тілдер
жалпы аралық тілге аударылады.
25
Intermediate code in Internet language – Ғаламтор тіліндегі аралы код, Code
archival/retrieval – Кодты мұрахаттандыру/мұрағаттан шығару, Security
checker – Қауіпсіздікті тексеруші, Native binary code library – Екілік ма-
шиналық кодтың кітапханасы, Retrieve binary code and execute – Екілік
кодты мұрахаттан шығару және орындау, Method present… – Екілік код
кітапханасында /құрастырылған фрагменттің кэшінде бар тәсіл, Method
contains compatible fragment – Тәсілде бірлескен фрагмент бар, Execute
using implemented… – Енгізілген.
1.9-сурет Схемалық JIT компиляциясы.
Қазіргі заманғы компиляторлар жоғарғы деңгей бағдарламаларын түрлі
сәулеттерде орындау мақсатында аударудың екі сатылық нұсқасын қол-
данады. Әр түрлі компиляторлардың түрлі құрастыру тілдері болады,
сондықтан бірнеше сәулеттер үшін бірыңғай компиляторды жазу мүм-
кін емес. Оның орнына бағдарламалау тілдеріне арналған аралық код
жетілдірілді. Бірінші сатыда компилятор жоғарғы деңгей бағдарламала-
рын компьютерлік сәулеттерге тәуелсіз аралық деңгей кодына аударады.
Екінші сатыда аралық код төменгі деңгейдегі машиналық кодқа аудары-
лады.
1.11-суретте көрсетілгендей аударудың бірінші сатысы (1) лексикалық
сараптама, (2) синтаксистық сараптама, (3) семантикалық сарапта-
ма және код генерациясынан тұрады.
26
C# to CIL compiler – C# CIL компиляциясына; Base class libraries and
user libraries - Негізгі класс кітапханалар мен пайдаланушы кітапхана-
лары; CIL code – CIL коды; Class loader->JIT compiler->Platform-specific
instructions – Класс жүктеуі->JIT компиляциясы-> Платформа-нақты
тапсырмалар; Executable code - Орындалатын код
1.10-сурет C# үшін JIT компиляциясы
High level program - Жоғары деңгейдегі бағдарлама; Lexical analysis -
Лексикалық талдау; Parsing – Талдау;
Достарыңызбен бөлісу: |