Blogs / Ծրագրավորումը խորությամբ| Կոմպիլացիա և ինտերպրետացիա| Binary Code
None | March 26, 2020, 11:19 p.m. | 0
Այս բլոգի ընթացքում մենք կխոսենք հետևյալ թեմաների մասին․
- Ինչի՞ համար են ստեղծված ծրագրավորման լեզուները, որո՞նք են high և low level ծրագրավորման լեզուների տարբերությունները
- Ի՞նչ է կոմպիլացիան (compilation) և ինտերպրետացիան (interpretation) և որո՞նք են նրանց տարբերությունները, առավելություններն ու թերությունները
- Ինչպե՞ս են համակարգիչները կարդում զրոներն ու մեկերը, այսինքն՝ binary code-ը
1․ Ինչի՞ համար են ստեղծված ծրագրավորման լեզուները, որո՞նք են high և low level ծրագրավորման լեզուների տարբերությունները
Ծրագրավորման լեզուները ստեղծվել են, որպեսզի մարդը կարողանա համակարգչին ինչ-որ ինստրուկցիաներ տալ կատարելու համար։ Ծրագրավորման լեզուների օրինակներ են C#-ը, Python-ը, C++-ը, PHP-ն և այլն։
Իրականում մեր կողմից գրված կոդերը համակարգիչների համար անհասկանալի են, այսինքն՝ համակարգիչները չեն հասկանում մեր կողմից գրված if, else statement-ները, ֆունկցիաները, ցիկլերը և այլն։ Այս ծրագրավորման լեզուները կոչվում են high level ծրագրավորման լեզուներ, այսինքն՝ դրանք ավելի հասկանալի են մարդու համար, քան՝ համակարգչի։ Համակարգիչները միայն հասկանում են machine code-ը, այսինքն՝ զրոները և մեկերը։ Low level ծրագրավորման լեզուները ավելի մոտ են machine code-ին և ավելի քիչ հասկանալի են մարդու համար։ Այսպիսի ծրագրավորման լեզուները հաճախ անվանում են նաև assembly լեզուներ։
2․ Ի՞նչ է կոմպիլացին և ինտերպրետացիան, որո՞նք են նրանց տարբերությունները, առավելություններն ու թերությունները
Որպեսզի համակարգիչը կարողանա հասկանալ մեր կողմից գրված կոդը, այն նախ պետք է թարգմանվի զրոների և մեկերի, որի համար էլ մենք պետք է օգտագործենք կոմպիլացիան և ինտերպրետացիան։
Ի՞նչ է կոմպիլացիան
Կոմպիլյատորը ծրագիր է, որը high level ծրագրավորման լեզվով գրված ձեր կոդը ամբողջությամբ վերածում է machine code-ի, այսինքն՝ կոդի առաջին տողից մինչև վերջին տողը վերածվում է զրոների և մեկերի, նոր միայն այն աշխատացնում է։
Ի՞նչ է ինտերպրետացիան
Ի տարբերություն կոմպիլացիայի՝ ինտերպրետացիան դա անում է տող առ տող, այն ձեր ամբողջ կոդը չի ձևափոխում զրոների և մեկերի, այնուհետև run անում, այլ այն անում է դա տող առ տող։ Այսինքն՝ վերցնում է առաջին տողը, վերածում զրոների և մեկերի և աշխատացնում, այնուհետև դա անում է երկրորդ տողի, երրորդ տողի համար և այսպես շարունակ։ Եվ սա էլ հիմնական տարբերությունն է ինտերպրետատորի և կոմպիլյատորի միջև։
Ցանկանում ենք նշել, որ ցանկացած ծրագրավորման լեզու հիմնականում կարող է և՛ ինտերպրետացվել և՛ կոմպիլացվել։ Այսինքն՝ դա չի նշանակում, որ C++-ը միայն պետք է կոմպիլացվի, իսկ Python-ը պետք է ինտերպրետատորով աշխատի։ Python-ն էլ կարող է կոմպիլացվել, նոր run անել, C++-ն էլ, ուղղակի կան հիմնական մեթոդներ, որոնք մենք օգտագործում ենք, օրինակ՝ C++ լեզվի համար մենք հիմնականում այն կոմպիլացնում ենք, իսկ Python-ի համար՝ հիմնականում ինտերպրետացնում։
Որո՞նք են կոմպիլացիայի և ինտերպրետացիայի առավելություններն ու թերությունները
Հիմա եկեք ծանոթանանք կոմպիլացիայի և ինտերպրետացիայի առավելություններին և թերություններին։ Սկսենք կոմպիլացիայից։ Օրինակ՝ եթե մենք կոմպիլացնում ենք մեր կողմից գրված կոդը, նախ մենք պետք է որոշակի ժամանակ ծախսենք՝ այդ կոդն ամբողջությամբ զրոների և մեկերի վերածելու, նոր այն աշխատացնենք։ Այսինքն՝ մենք դրա վրա նախ ժամանակ ենք ծախսում։ Իսկ ինտերպրետացիան այն անում է տող առ տող, այսինքն՝ այն շատ երկար ժամանակ չի ծախսում նախ կոմպիլացնելու, այնուհետև աշխատացնելու վրա։ Development-ի տեսանկյունից ինտերպրետացիան ավելի արագ է, քան կոմպիլացիան։ Իսկ եթե մենք նայենք աշխատացնելու արագության տեսանկյունից, ապա կոմպիլացված կոդը շատ ավելի արագ կաշխատի, քանի որ մենք այն արդեն ամբողջությամբ կոմպիլացրել, նոր ենք աշխատացրել, իսկ ինտերպրետացված կոդն աշխատացնելու համար ամեն անգամ այն պետք է ժամանակ ծախսի այդ տողը կոմպիլացնելու վրա և նոր միայն աշխատացնի։ Եվս մեկ տարբերություն, որը կա ինտերպրետացված և կոմպիլացված կոդի միջև՝ open source լինելն է։ Ինտերպրետացված կոդը միշտ մնում է open source, իսկ կոմպիլացված կոդն այլևս open source չէ, այսինքն՝ ուրիշ մարդիկ այլևս չեն կարողնա ձեր կողմից գրված կոդը կարդալ։ Ինտերպրետացված կոդն ունի այլ առավելություն ևս․ այն cross platform է, այսինքն՝ մենք կարող ենք օրինակ ինստալացիա անել Python-ի ինտերպրետատորը Linux-ի, Windows-ի վրա և դրա միջոցով միշտ կարող ենք run անել մեր կողմից գրված կոդը։ Իսկ կոմպիլացված կոդի դեպքում մենք պետք է այն առանձին-առանձին նախ կոմպիալցի անենք Windows machine-ների համար, այնուհետև Linux machine-ների համար և այնուհետև MacOs machine-ների համար։
3․ Ինչպե՞ս են համակարգիչները կարդում զրոներն ու մեկերը, այսինքն՝ binary code-ը
Մենք տեսանք, թե ինչպես մեր կողմից գրված կոդը ինտերպրետացիայի և կոմպիլացիայի միջոցով կարող ենք վերածել զրոների և մեկերի, այսինքն՝ binary code-ի:
Սակայն ինչպե՞ս են համակարգիչները կարողանում կարդալ զրոներն ու մեկերը։ Սա ունի պարզ բացատրություն․ մեր համակարգչում գտնվող ցանկացած տառ, ցանկացած գույն, ցանկացած ձայն կարող է ձևափոխվել զրոների և մեկերի։ Օրինակ՝ A տառն ունի իր binary code-ը, կարմիր գույնն ունի իր binary code-ը և այլն։ Իհարկե A տառը միանգամից չի ձևափոխվում binary code-ի։ Այն ունի միջանկյալ արժեք, որը կոչվում է դեցիմալ, գույները նույնպես ունեն իրենց միջանկյալ արժեքը, որոնք կոչվում են հեքսա դեցիմալ, որից հետո էլ նրանք ձևափոխվում են binary code-ի՝ զրոների և մեկերի։ Հարց է առաջանում, թե ինչու՞ հենց զրոներ և մեկեր։ Այն ամենը, ինչը մենք անում ենք մեր համակարգիչներում, արվում է շատ փոքր տրանզիստորների միջոցով, և այդ տրանզիստորները կարող են ունենալ ընդհամենը երկու արժեք՝ զրո կամ մեկ։ Զրո նշանակում է, որ այդ տրանզիստորը անջատված է, իսկ մեկ նշանակում է, որ այդ տրանզիստորն այս պահին միացած է։
Հիմա եկենք նայենք A տառի binary code-ին՝
Կարող ենք օգտագործել տրանզիստորները, որպեսզի ցույց տանք այս տառի արժեքը։ Այսինքն՝ առաջին տրանզիստորը կլինի անջատված, քանի որ այն զրո է, երկրորդը կլինի միացված, քանի որ այն մեկ է, այնուհետև անջատված տրանզիստորներ և վերջում մի հատ միացված տրանզիստոր։ Քանի որ մեր համակարգչում կան հազարավոր այսպիսի փոքր տրանզիստորներ, ապա դրանց միջոցով մենք կարող ենք ցույց տալ տառերը, թվերը, գույները, ձայները և մնացած բոլոր երևույթները, որոնք մենք կարողանում ենք կատարել մեր համակարգիչների միջոցով։
Այս բլոգի ընթացքում մենք խոսեցինք այն մասին, թե ինչի համար են ստեղծված ծրագրավորման լեզուները, որոնք են տարբերությունները high և low level ծրագրավորման լեզուների միջև։ Մենք իմացանք, թե ինչ է կոմպիլացին և ինտերպրետացիան։ Եվ վերջում մենք հասկացանք, որ մեր համակարգչում յուրաքանչյուր օբյեկտ կարող է վերածվել զրոների և մեկերի, այսինքն՝ binary code-ի։
Նյութի հեղինակ՝ Արման Ավետիսյան