«Ինտերպրետատոր»–ի խմբագրումների տարբերություն
Content deleted Content added
չ չտողադարձվող բացատը (։Դ Non-breaking space) փոխարինում եմ սովորականով։ oգտվելով ԱՎԲ |
|||
Տող 1.
{{Ծրագրի իրականացում}}
Ինտերպրետատորը ծրագիր է, որը ուղղակիորեն [[Ծրագրի կատարում|կատարում]] է,[[Ծրագրավորման լեզու|ծրագրավորման]] կամ սկրիպտավորման լեզուներով գրված հրամաններ, առանց դրանք նախապես [[Կոմպիլայացիա|կոմպիլյացնոլով]] մեքենայական լեզվի ծրագրի։ ինտերպրետատորը ծրագրի կատարման համար
#վերլուծել ({{lang-en|parse}}) [[Ելակետային կոդ|սկզբանկան կոդը]]
#թարգմանել [[Ելակետային կոդ|սկզբանկան կոդը]], ինչ որ միջանկյալ տեսքի և իրականցնել այն։
#Հստակ իրականցնել պահպանված նախակոմպիլյացված({{lang-en| precompiled}}) կոդը՝ կոմպիլյատորի կողմից կազմված, որը հանդիսանում է ինտերպրետատորի համակարգի մի մաս։
Սկզբնական ծրագրերը կոմպիլյացվում են նախապես և մեքենայում պահվում որպես անկախ կոդ, որը հետո [[Կապերի խմբագրիչ|կապվում]]
Չնայած ինտերպրետացիան և կոմպիլյացիան համարվում են երկու հիմանական միջոց ծրագրավորման լեզուների իրականցման համար, դրանք չեն հակասում միմյանց, որովհետև ինտերպրետացվող համկարգերի մեծ մասը կատարում է նաև թարգմանչական աշխատանք, ինչպես կոմպիլյատորը։
== Կոմպիլյատորների և ինտերպրետատորների համեմատումը
[[Պատկեր:Linker.svg|thumb|Կապերի խմբագրիչի
Բարձր մակարդակի լեզուներով գրված ծրագրերը,
Չնայած կոմպիլյատորների հիմանկան արդյունքը հարդվերի կողմից գործարկվող մեքենայական կոդն է, դրանց արդյունքը հաճախ կարող է ընդունել միջանկյալ տեսք՝ [[Object code|օբյեկտային կոդ]]({{lang-en| object code }}) անվանմամբ։ Կոմպիլյացվող ծրագիրը սովորաբար օգտագործում է կառուցվող բլոկներ (ֆունկցիաներ) գրադարանում պահված այդպիսի օբյեկտային կոդի մոդուլներ. [[Կապերի խմբագրիչ]]ը ({{lang-en| linker }})օգտագործում է գրադարանային ֆայլերը օբյեկտային ֆայլերի հետ միավորելու համար
Երկուսն էլ՝ կոմպիլյատորները և ինտերպրետատորները հիմնականում սկզբնական կոդը վերածում են թոքենների ({{lang-en| token}}), երկուսն էլ կարող են գեներացնել վերլուծության ծառ({{lang-en| parse tree}}),և երկուսն էլ կարող են գեներացնել անմիջական հրահանգներ (ստեկային մեքենայի համար, կամ այլ
[[Պատկեր:kaantotulkkaus.png|thumb|upright=1.87 | Կոմպիլյացում և ինտերպրետացում]]
Կոմպիլյատորը փոխակերպում
Մեկ անգամ կոմպիլյացնել և
Կոմպիլյաորը չի թույլատրում գործարկել ծրագիրը, քանի դեռ այն լիովին անսխալ է։ Ինտերպրետատորը [[Ծրագրի կատարում|կատարում]]
=== Մշակման ցիկլ ===
Ծրագրային ապահովման մշակման ցիկլում, ծրագրավորողները սկզբնկան կոդում հաճախակի փոփոխություններ են կատարում։ Կոմպիլյատորի օգտագործման դեպքում, ամեն անգամ երբ սկզբնական կոդը փոխվում է, դրանք պետք է սպասեն կոմպիլյատորին, որպիսի թարգմանի
=== Բաշխման սկզբունք ===
Տող 33.
Կոմպիլյատորը սկզբնական կոդը փոխակերպում է բինար ինստրուկցիաների, հատուկ պրոցեսսորի համար, դարձնելով այն ավելի քիչ դյուրակիր({{lang-en| portable}})։ Այդ փոխակերպումը տեղի է ունենում միայն մեկ անգամ և դրանից հետո նույն բինար ինստրուկցիաները տեղաբաշխում են օգտագործողի մեքենայում, որտեղ այն կարողանում է կատարվել առանց հետգա թարգմանությունների։ [[Խաչաձև կազմարկիչ|Կրոսս կոմպիլյատորներ]]ը կարողանում են գեներացնել բինար կոդ օգտագործողի մեքենայի համար, անգամ եթե այն ունի այլ պրոցոսսոր քան մեքենան, որտեղ կոդը կոմպիլյացվում է։
Ինտերպրետացվող ծրագրերը կարող են բաշխվել սկզբնական կոդի տեսքով։ Այն պետք է թարգմանված լինի յուրաքանչյուր վերջնական մեքենայում, որը շատ ժամանկակ է տևում, բայց ծրագիրը տեղաբաշխում է անկախ մեքենայի ճարտարապետությունից։
=== Էֆեկտիվություն ===
Հիմանականում ինտերպրետատորի թերությունը հանդիսանում է այն, որ ինտերպրետատորը ծրագիրը կատարում է
Մշակման արագության(երբ օգտագործում են ինտերպրետատոր) և կատարման արագության (երբ օգտագործում են կոմպիլյատորներ)
{| class="wikitable collapsed" "
Տող 96.
=== Ռեգրեսիա ===
[[Ծրագրի կատարում|Ծրագրի կատարման]] համար ինտերպրետացիան չի կարող օգտագործվել միակ մեթոդ՝
== Վարիացիաներ ==
===
{{main|Բայթկոդ}}
Ինտերպրետացիայի և կոմպիլյացիայի միջև կան հնարավորությունների ամբողջ սպեկտոր, կախված կատարված վերլուծությունների քանակից՝ մինչև ծրագրի կատարումը։ Օրինակ
===
Ինտերպրետացիայի և կոմպիլյացիայի միջև, այլ
Սակայն, ինտերպրետատորների համար աբստրակտ շարահյուսության ծառը ({{lang-en|AST }}) դառնում է պատճառ ավելի շատ վերադիր ծախսերի ({{lang-en|overhead }}), քան բայթկոդ ինտերպրետատորի դեպքում։
Տող 114.
{{main|JIT կոմպիլյացիան}}
JIT կոմպիլյացիան տեխնալոգիա է,
=== Self-ինտերպրետատոր (Self-interpreter) ===
Self-ինտերպրետատորը ծրագրավորման լեզվի ինտերպրետատոր է, գրված ծրագրավորման լեզվով, որը կարող է ինտերպրետացնել ինքն իրեն, օրինակ BASIC ինտերպրետատորը գրված
Եթե լեզվի համար գոյություն չունի կոմպիլյատոր պետք է ինտերպրետացնել,
Համակարգչային լեզվի սահմանումը, որպես կանոն իրականցվում է աբստրակտ մեքենայով ({{lang-en | operational semantics }}) կամ մաթեմատիկակն ֆունկցիաներով({{lang-en| denotational semantics}})։ Լեզուները կարող են սահմնավել ինտերպրետատորով, որում բազային լեզվի ({{lang-en| host language }}) սեմանտիկան տրված է։ Self-ինտերպրետատորվ սահմանված լեզուները հիմնավորված չեն (չեն կարող սահմանել լեզուներ), բայց Self-ինտերպրետատորը ընթերցողին ներկայացնում է լեզվի արտայհայտչությունը և էլեգանտությունը։ Դա նաև թույլ է տալիս թարգմանչին ինտերպրետացնել իր սկզբնական կոդը, առաջին քայլը ուղվելով ինտերպրետացիայի արտացոլմանը։
Տող 133.
{{Արտաքին հղումներ}}
* [http://www.columbia.edu/acis/history/interpreter.html IBM Card Interpreters] page at Columbia University
* [http://www.archive.org/download/TheoreticalFoundationsForPracticaltotallyFunctionalProgramming/33429551_PHD_totalthesis.pdf Theoretical Foundations For Practical 'Totally Functional Programming']
* [https://www.youtube.com/watch?v=_C5AHaS1mOA Short animation]
* http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-004-computation-structures-spring-2009/lecture-notes/MIT6_004s09_lec11.pdf</nowiki>
* https://q3k.org/gentoomen/Programming/Pragmatic%20Programmers/Language%20Implementation%20Patterns.pdf</nowiki>
|