«Ծրագրավորման լեզու»–ի խմբագրումների տարբերություն

Content deleted Content added
No edit summary
Տող 69.
* «դերիվացիոն» իմաստաբանությունը նկարագրում է տրամաբանության լեզվի ու նախա- և ետպայմաններ առաջադրելու օգնությամբ լեզվի կառուցվածքների կատարման հետևանքները։
* «դենոտացիոն» իմաստաբանությունը կատարում է այնպիսի պատկերացումներով գործողություններ, որոնք բնորոշ են մաթեմատիկային՝ բազմություններ, համապատասխանություններ, նաև՝ դատողություններ, պնդումներ և այլն։
 
<br />
 
=== Առաջին և բարձր կարգի լեզուներ ===
 
==== Նախնական տեղեկություններ ====
Այս տերմինաբանությունը(առաջին և բարձր կարգի լեզուներ), բնականաբար, ժառանգվում է համակարգչային գիտության կողմից ՝ ձևավորելով համապատասխան իմաստաբանություն ՝ առաջին և ավելի բարձր կարգի:Առաջին կարգի լեզուները թույլ են տալիս սահմանել միայն առաջին կարգի հարաբերությունները քանակների միջև:Բարձր կարգի լեզուները թույլ են տալիս սահմանել կախվածությունը կախվածության միջև:Ավելին, շատ դեպքերում նրանք ասում են, որ նման լեզուն կախվածությունը (գործառույթները) համարում է առաջին դասի օբյեկտներ, այլ կերպ ասած, ընդունում է առաջին կարգի գործառույթները:Բարձր կարգի լեզուները պարունակում են գրեթե բոլոր ֆունկցիոնալ լեզուները:
<br />
 
==== Արտահայտիչություն ====
Առաջին կարգի լեզուները թույլ են տալիս իրականացնել ալգորիթմներ որպես կոդ, բայց ոչ ծրագրային ճարտարապետություն:Ըստ Ստրեյչիի, այս սահմանափակումն ալգոլյան լեզվով է ժառանգել դասական մաթեմատիկայից, որտեղ օգտագործվում են միայն մշտական գործողություններ և գործառույթներ, որոնք համատեքստից դուրս եզակի ճանաչելի են, և գործառույթներով կամայական աշխատանքի համար համակարգային նշում չկա:Առաջին կարգի լեզուներով ծրագրերի համար բաղադրիչների (պրոցեդուրաների, գործառույթների, օբյեկտների, գործընթացների և այլն) փոխգործակցության սխեմաները կարող են գոյություն ունենալ միայն պայմանական մակարդակի վրա, ինքնուրույն ծրագրերից դուրս:Ժամանակի ընթացքում հայտնաբերվեցին բազմակի կրկնվող նմանատիպ նախշեր, որոնց արդյունքում դրանց շուրջ կառուցվեց անկախ մեթոդաբանություն ՝ ձևավորման ձևեր:Արդյունքում ՝ որոշումներ, որոնք առաջին կարգի լեզուներով կարող են ներկայացվել ծրագրերի բեկորներով (երբեմն բավականին բարդ և ծանրաբեռնված), բարձր կարգի լեզուներով կարելի է կրճատել մեկ հրամանի կամ նույնիսկ ինքնուրույն լեզվական իմաստային տարրի օգտագործումը, որը չունի շարահյուս արտահայտություն:Օրինակ ՝ «Հրամանի» օրինակը, որը հաճախ օգտագործվում է առաջին կարգի լեզուներով, ուղղակիորեն համարժեք է առաջին կարգի գործառույթի գաղափարին:Նույնը վերաբերում է լեզուների ավելի բարձր շերտերին:Այնուամենայնիվ, տարբեր բնույթի որոշ լեզուներ նաև ապահովում են ավելի բարձրակարգ ծրագրավորման հնարավորություններ:
<br />
 
==== Ուսումնասիրություն ====
Ներկայացնելով «առաջին և երկրորդ կարգի սուբյեկտների» տերմինաբանությունը ՝ Ստրեյշին անմիջապես ուշադրություն հրավիրեց այն փաստի վրա, որ շատ մարդկանց հետ անձնական փորձից և քննարկումներից համոզվել է, որ անհավատալիորեն դժվար է դադարեցնել մտածելը գործառույթների մասին ՝ որպես երկրորդ կարգի օբյեկտներ,այսինքն ՝ լեզվի կարգը ունի արտահայտված հոգեբանական ազդեցություն:Բարձր մակարդակի լեզուների տիրապետումը կօգնի ծրագրավորողին մտածել ավելի բարձր մակարդակի աբստրակցիաների առումով:Ցածր մակարդակի լեզուները կարող են պարտադրել հակառակը, որի կապակցությամբ լայնորեն հայտնի է հետևյալ հայտարարությունը:
 
Գործնականորեն անհնար է սովորեցնել լավ ծրագրավորում այն ուսանողներին, ովքեր ունեն BASIC- ի փորձառություն. Որպես հավանական ծրագրավորողներ, նրանք հոգեկան աղավաղված են `առանց վերականգնման հույս ունենալու:
 
 
Սա նշանակում է, որ ավելի բարձր կարգի լեզվի օգտագործումն ինքնին չի նշանակում ճարտարապետության փոփոխություն և վերօգտագործման գործոնի ավելացում. Որոշիչ գործոնը որոշակի մշակողի ՝ համապատասխան ապուշների օգտագործման ունակությունն է:Հասկանալով բարձր մակարդակի կոնստրուկցիաների հնարավորություններն ու սահմանափակումները, դրանց իրականացման հիմնական սկզբունքները ոչ միայն ծրագրավորողին հնարավորություն են տալիս առավել արդյունավետ օգտագործել իր սովորած լեզուն, այլև թույլ է տալիս Ձեզ ստեղծել և օգտագործել նմանատիպ մեխանիզմներ զարգացման դեպքում `այնպիսի լեզվով, որտեղ դրանք չեն իրականացվում:Ավելի հեշտ կլինի ծրագրավորողի համար, ով գիտի ծրագրավորման լեզուների լայն տեսականի, ընտրել դրանց շարքում այն գործիքը, որն առավելագույնս հարմար է իր խնդիրը լուծելու համար, անհրաժեշտության դեպքում, ուսումնասիրել նոր լեզու կամ իրականացնել տիրույթի հատուկ լեզու, օրինակ, կարող է ներառել բավականին բարդ ծրագրի հրամանի տողի միջերեսը:
<br />
 
=== Ծրագրավորման պարադիգմ ===
Լեզուներին պարադիգմներին վերագրելը կարող է իրականացվել մի քանի հիմքերով, որոնցից մի քանիսը համապատասխանում են լեզուների հատուկ տեխնիկական բնութագրերին, իսկ մյուսները շատ կամայական են:Տեխնիկապես, լեզուները բաժանվում են, օրինակ, կողմնակի էֆեկտների և կապի թափանցիկության:Երկրորդ դեպքում ասում են, որ լեզուն պատկանում է «զուտ ֆունկցիոնալ պարադիգմին»:Տիպային համակարգի որոշակի հատկություններ և լեզու հաշվարկելու ռազմավարություններ երբեմն համարվում են որպես պարադիգմ, օրինակ ՝ պարամետրային բազմամորֆ տիպային համակարգերի համար, նրանք հաճախ խոսում են ընդհանուր ծրագրավորման պարադիգմի իրականացման մասին:Մեկ այլ օրինակ `համասեռականության հատկությունն է, որը բացում է մետրոպոգրամանման սորտերի մի ամբողջ սպեկտր:Կան բազմաթիվ «լեզուներ, որոնք ժառանգվել են մաթեմատիկայից», որոնցից շատերը կազմում են եզակի պարադիգմներ:Ավելի պայմանականորեն լեզուները բաժանվում են սերունդների:Առաջին երկու սերունդը ցածր մակարդակի վրա է, այսինքն, կենտրոնացած են հատուկ ապարատների առանձնահատկությունների վրա, և սկզբունքորեն դրանք չեն համապատասխանում որևէ պարադիգմի:Երրորդ սերնդի հետ միասին նրանք ձևավորում են հրամայական ծրագրավորման պարադիգմ, իսկ հաջորդ սերունդները ՝ դեկլարատիվ:Շատ դեկլարատիվ լեզուներ ներառում են որոշակի հրամայական հնարավորություններ, երբեմն էլ հակառակը:Ծրագրերի չափի և բարդության բարձրացմամբ, երկրորդ սերնդի լեզուները օգտագործելիս սկսեց ձևավորվել ընթացակարգային ծրագրավորման պարադիգմը,պահանջելով մեծ ընթացակարգերի տարանջատում հիերարխիկորեն կապված փոքր ավելի փոքր շղթաների մեջ:Միևնույն ժամանակ, հայտնվեցին առաջին երրորդ սերնդի լեզուները, և կառուցվածքային ծրագրավորումն առաջին հերթին ձևավորվեց ՝ որպես ընթացակարգային, իսկ հետո ՝ մոդուլային ուղիղ զարգացում:Ժամանակի ընթացքում հայտնվեցին հսկայական թվով տարբեր եղանակներ ՝ լուծելու հիմնահարցը զարգացող ծրագրային համակարգերը ինտեգրելու սկզբնական հրամայական մոտեցումը:Որոշ դեպքերում ձեռք է բերվել էական ազդեցություն զարգացման արագության և որակի ցուցանիշների վրա, բայց ընդհանուր առմամբ, ինչպես նշվեց վերևում, երրորդ սերնդի լեզուները վերացական են մեքենայական տրամաբանությունից միայն որոշակի մակարդակի վրա և մի փոքր ենթակա են համարժեք վերափոխումների:Մինչ օրս լեզուների երրորդ սերունդը ներկայացված է բազմազան պարադիգմների առավել լայն շրջանակով:Ֆունկցիոնալ լեզուները վերաբերում են չորրորդ սերնդին, որից առանձնանում են «զուտ ֆունկցիոնալ», իսկ մնացածները կոչվում են «ոչ զուտ ֆունկցիոնալ»:Հինգերորդ սերունդը ներառում է տրամաբանական ծրագրավորման լեզուներ, որոնցում, բացի ավանդականից, առանձնանում են մի քանի հատուկ ձևեր, օրինակ ՝ ծրագրավորումն ըստ սահմանափակումների:Փաստորեն, հինգերորդ սերնդի լեզուները չորրորդ սերնդի լեզուներն են ՝ լրացված գիտելիքների բազայով, հետևաբար այս կատեգորիան, ինչպես արդեն նշվեց վերևում, ընդհանուր առմամբ ընդունված չէ:Բազմաթիվ պարադիգմներ պայմանականորեն հռչակված մեթոդներ են ՝ ծրագրի կառուցվածքը կազմակերպելու համար և կիրառելի են մեծ թվով լեզուների համար:Լայն ընդգրկումը կառուցվածքային և մոդուլային է. Դրանք օգտագործվում են ինչպես հրամայական, այնպես էլ դեկլարատիվ լեզուներով:Այլ պարադիգմները սերտորեն կապված են տեխնիկական հատկությունների հետ: Օրինակ, C ++ լեզվի ենթաբազմությունը `կաղապարներ - կարող է պաշտոնապես համարվել որպես Turing- ի ամբողջական զուտ ֆունկցիոնալ լեզու, բայց C ++- ը չունի հատկություններ, որոնք բնորոշ են ֆունկցիոնալ լեզուներին:Արդյունքում, ֆունկցիոնալ լեզուների կազմման մեջ օգտագործված ալգորիթմները չեն կարող կիրառվել C ++- ի համար, ուստի ֆունկցիոնալ պարադիգմի առաջատար հետազոտողները շատ թերահավատորեն են վերաբերվում C ++- ին:
<br />
 
=== Ծրագրավորման լեզուները փոքր և մեծ մասշտաբներով ===
Ծրագրերը կարող են լուծել տարբեր չափերի խնդիրներ,մի ծրագիր է ստեղծում ժամանակացույցը տվյալ գործառույթի համար, իսկ մյուսը ղեկավարում է խոշոր ձեռնարկության աշխատանքային հոսքը:Ծրագրավորման տարբեր լեզուներ նախատեսված են խնդրի տարբեր սկզբնական մասշտաբի համար և, որ ավելի կարևոր է, տարբեր կերպ են գործ ունենում ծրագրային համակարգերի աճող բարդության հետ:Լեզուի հիմնական որակը, որը որոշում է, թե ինչպես զարգանում է զարգացման բարդությունը, քանի որ համակարգը մեծանում է, աբստրակցիան է, այսինքն ՝ համակարգի բաղադրիչի իմաստը (պահվածքը) առանձնացնելու ունակությունը դրա իրականացման եղանակից:Սկզբնաղբյուրի համար որակական չափիչները, ինչպիսիք են ստուգելիությունը և փոփոխելիությունը, ակնհայտորեն որոշվում են վերօգտագործման գործոնով:Սա կարող է նշանակել միևնույն բաղադրիչի վրա տարբեր գործառույթներ կիրառելը, ինչպես նաև նույն գործառույթը տարբեր բաղադրիչներին կիրառելու ունակությունը:Պարամետրային բազմամորֆային (հատկապես արտանետվող) և դինամիկ տիպի համակարգերը զգալիորեն բարձրացնում են վերօգտագործման գործակիցը.Օրինակ, մի գործառույթ, որը հաշվարկում է զանգվածի երկարությունը, կկիրառվի զանգվածի տիպերի անսահման թվով:Բարձր կարգի լեզուները թույլ են տալիս տարբերակել գործառույթների փոխգործակցության սխեմաները բազմիցս կոչված կոդ բլոկի մեջ, և վերօգտագործումը հասնում է իր բարձրագույն արժեքների ՝ ավելի բարձր մակարդակի լեզու տեղափոխվելիս - անհրաժեշտության դեպքում, հատուկ մշակված այս առաջադրանքի համար - տվյալ դեպքում լեզուն վերաօգտագործվում է ոչ միայն մեկ ֆունկցիա, այլև զարգացումը:Լեզուն կարող է պահպանվել կազմողի բաղադրիչների ինտենսիվ վերաօգտագործմամբ:Լեզուների զարգացման հետ մեկտեղ հայտնվեցին հատուկ (բացառապես ծրագրավորման բնութագրիչ, որը նախկինում չի պահանջվում մաթեմատիկայում) բաղադրիչների և կախվածության կարգեր.մոնադներ, տիպի դասեր, պոլիմորֆային ճյուղեր, ասպեկտներ և այլն, դրանց օգտագործումը թույլ է տալիս ավելի մեծ ֆունկցիոնալություն արտահայտել նույն քանակի կոդով ՝ դրանով իսկ լայնածավալ ծրագրավորումը փոքր մասշտաբով թարգմանելով:Այլ հիմնական հիմնախնդիրները, որոնք կապված են խոշոր համակարգերի բարդության հետ, բխում են հենց ծրագրերից դուրս:Լեզվաբանական իմաստաբանության հատկություններից բացի, վերաօգտագործումը հնարավոր է հասնել համակարգչային համակարգի կամ բարդույթի մոդուլային կառուցվածքի միջոցով:Ավելին, անկախ նրանից, թե որքան ճկուն է լեզուն, աշխատելով հսկայական ծածկագրերով, հատկապես շատ մարդկանց, պահանջում է դրանց տարրալուծումը մոդուլների այս կամ այն ձևով:Մոդուլային կառուցվածքը ենթադրում է ոչ միայն ծրագրի մոնոլիտ աղբյուրի կոդը տրոհել շատ տեքստային ֆայլերի, այլև ավելի մեծ մասշտաբի վերացում, այսինքն ՝ ցանկացած տրամաբանորեն ամբողջական հատվածի համար ինտերֆեյսի սահմանում և թաքցնել դրա իրականացման մանրամասները:Կախված լեզվից կիրառվող շրջանակի կանոններից, լեզուն կարող է կամ չի կարող թույլ տալ ավտոմատ կախվածության հայտնաբերում:Եթե, ըստ կանոնների, հնարավոր է անվանման կոնֆլիկտ, ապա կախվածության ինքնագլխումն անհնար է, և այդ դեպքում մոդուլի վերնագրում դուք պետք է բացահայտորեն նշեք այն մոդուլների անունները, որոնց բաղադրիչները օգտագործվում են դրանում:Որոշ լեզուներ կենտրոնացած են բացառապես փոքր, կառուցվածքայինորեն պարզ ծրագրերի մշակման վրա:Դրանք չեն ապահովում ոչ մոդուլների մշակված համակարգ, ոչ էլ հատուկ բեկորների ճկունություն:C լեզուն ստեղծվեց որպես «բարձր մակարդակի հավաքույթ», որն ինքնին չի ենթադրում բարդությունների որոշակի շեմից վերև գտնվող համակարգերի զարգացում, հետևաբար, դրանում ներառված չէր նաև լայնածավալ ծրագրավորմանն աջակցելը:Բարձր և գերհզոր մակարդակի որոշ լեզուներ (Erlang, Smalltalk, Prolog) հասկացությունները տրամադրում են որպես հիմնական պարզունակ տարրեր, որոնք այլ լեզուներում, կարծես, կառուցողական և ալգորիթմիկ բարդ են (գործընթացներ, դասեր, գիտելիքների հիմքեր) - նման են մի շարք մաթեմատիկական հաշվարկների:Հետևաբար, նման լեզուները հաճախ դիտարկվում են որպես առարկայական:Այնուամենայնիվ, այս լեզուներում այլ ասպեկտների ֆունկցիոնալության ընդլայնումը կարող է դժվար լինել:Ժամանակի ընթացքում կառուցվել են տարբերակներ ՝ դրանք միասին միավորելու համար:Շատ այլ լեզուներ պարունակում են նաև մոդուլային համակարգեր, բայց դրանց մեծ մասը առաջին կարգի մոդուլի լեզուներ են:Lisp- ի և չորրորդ լեզուները թույլ են տալիս ձեզ ստեղծել կամայականորեն և անսահմանափակ համակարգեր, ներառյալ թույլ տալով, որ դուք ինքներդ ձեր մեջ ստեղծեք ներկառուցված առարկայի հատուկ լեզուներ, հետևաբար դրանք հաճախ կոչվում են մետաղալեզու:Այսօր բարդության հիմնախնդրի լուծման ամենատարածված մոտեցումը օբյեկտիվ ուղղվածություն ունեցող ծրագրավորումն է, չնայած դրա կիրառման հաջողությունն իր գոյության տասնամյակների ընթացքում մի քանի անգամ ենթարկվել է թերահավատության, և դեռևս չկա հուսալի ապացույց, որ այն բերում է օգուտներ `համեմատած այլ մոտեցումների հետ:Այն ուղեկցվում է բաղադրիչների միջև կախվածությունը կարգավորելու տարբեր տեխնոլոգիաներով ՝ մետաքսազերծում, պայմանագրեր, նախատիպեր, կեղտազերծում, տեսակներ և այլն:Metaprogramming- ի տարբեր ձևերի, այսինքն ՝ զարգացման գործընթացի ավտոմատացումը տարբեր մակարդակներով օգտագործումը պատմականորեն համարվել է առավել հզոր մոտեցում:Սկզբունքորեն տարբերվող մետրոպոգրաֆիկացումը լեզվից դուրս և ինքնին մատչելի լեզվով:Առաջին կարգի լեզուներ օգտագործելիս ՝ աճող ծրագրային համակարգերի բարդությունը արագորեն գերազանցում է մարդու կողմից տեղեկատվության ընկալման և մշակման ունակության շեմը, հետևաբար, նախնական տեսողական ձևավորման արտաքին միջոցներն օգտագործվում են բարդ սխեմաները պարզեցված ձևով և իջեցված մասշտաբով դիտելու համար, այնուհետև ինքնաբերաբար առաջացնում են ծածկագրի շրջանակ:Բարձր կարգի լեզուներ օգտագործող մշակողների համայնքներում գերակշռում է ճիշտ հակառակ մոտեցումը `կանխել բարդության հնարավորությունը վերահսկողությունից դուրս գալը` տեղեկատվական մոդելները անկախ բաղադրիչներին բաժանելով և միջոցներ մշակելով որոշ մոդելներ մյուսներին ինքնաբերաբար վերածելու համար:
 
=== Ֆորմալ փոխակերպում և օպտիմիզացում ===
В. Ф. Турчин- ը նշում է, որ ցանկացած ֆորմալացված լեզվի առավելությունները որոշվում են ոչ միայն այն բանի կողմից, թե որքանով է դա հարմար անձի կողմից ուղղակի օգտագործման համար, այլ նաև այն աստիճանի, թե որքանով են այս լեզվով տեքստերը պարտադրում իրենց ձևական վերափոխումները:Օրինակ, տեղեկատուի թափանցիկությունը նշանակում է, որ զանգից առաջ գործառույթների պարամետրերը չեն պահանջվում գնահատել, փոխարենը, իրականում փոխանցված արտահայտությունը կարող է ամբողջությամբ փոխարինվել գործառույթի փոփոխականին, և գործառույթի պահվածքը չի փոխվի:Սա բացում է գրեթե կամայական ավտոմատ ծրագրի փոխարկումների հնարավորությունը:Հնարավոր է վերացնել տվյալների անհարկի միջանկյալ ներկայացուցչությունները, հաշվարկների բարդ շղթաները կարող են կրճատվել, կարող են ընտրվել զուգահեռ գործընթացների օպտիմալ քանակը, հնարավոր է մտցնել հուշագրումը և այլն:Մյուս կողմից, սա նշանակում է կողմնակի էֆեկտների լիակատար բացակայություն, և սա ստիպում է որոշ ալգորիթմների իրականացումն ակնհայտորեն ավելի քիչ արդյունավետ, քան փոխադարձ վիճակը օգտագործելիս:Փոքր և պարզ ծրագրերի համար բարձր մակարդակի լեզուները առաջացնում են ավելի մեծ մեքենայի կոդ և կատարում են ավելի դանդաղ:Այնուամենայնիվ, ալգորիթմական և կառուցվածքային բարդ ծրագրերի համար առավելությունը կարող է լինել որոշ բարձր մակարդակի լեզուների կողքին, քանի որ մարդը ֆիզիկապես ի վիճակի չէ արտահայտելու բարդ հասկացություններ ՝ հաշվի առնելով դրանց արդյունավետ կատարումը մեքենայական լեզվով:
 
Կան բազմաթիվ առանձնահատուկ պատճառներ, թե ինչու է ավտոմատ օպտիմալացումը բարձր մակարդակի լեզուների թարգմանության ընթացքում, սկզբունքորեն, ավելի մեծ կատարման արագություն է տալիս, քան ցածր մակարդակի լեզուներով իրականացման մեթոդի գիտակցված հսկողություն:Օրինակ, առկա են հուսալի ապացույցներ այն մասին, որ հիշողության ավտոմատ կառավարումը ավելի արդյունավետ է, քան ձեռնարկը, միայն դինամիկ մեթոդը օգտագործելիս կա, և կա հավանականորեն ավելի արդյունավետ ստատիկ մեթոդ:Բացի այդ, յուրաքանչյուր միկրոհամակարգի համար անհրաժեշտ է բաժանել գրանցամատյանները ՝ հաշվի առնելով հիշողությունը հասանելիության նվազագույնի հասցնելու համար, և դա պահանջում է լուծել գծապատկերի գունավորման խնդիրը:Մեքենայական տրամաբանության այդպիսի շատ առանձնահատկություններ կան, ուստի տեղեկատվության ընդհանուր բարդությունը յուրաքանչյուր «աստիճանաբար» գնալով աճում է, և բարձր մակարդակի լեզու կազմելը կարող է ներառել տասնյակ նման քայլեր:Կան բազմաթիվ ավտոմատ օպտիմիզացման ռազմավարություններ:Ոմանք համընդհանուր են, մյուսները կարող են կիրառվել միայն որոշակի բնույթի լեզուների վրա, իսկ ոմանք էլ կախված են լեզուն գործածելու եղանակից:Սխեմաների լեզվի ստանդարտը պահանջում է յուրաքանչյուր գործողություն `դա երաշխավորելու համար:Բազմաթիվ ֆունկցիոնալ լեզուների համար այն սկզբունքորեն կիրառելի է, բայց դա անում են միայն օպտիմալացնող բաղադրիչները: C կամ C ++ նման լեզուներով, դա կարող է իրականացվել միայն որոշակի դեպքերում և միայն գլոբալ հսկողության հոսքի վերլուծություն օգտագործելիս:Բարձր կարգի լեզուները շատ դեպքերում ստիպված են լինում ավելի դանդաղ գործադրել, քան առաջին կարգի լեզուները:Պատճառները կայանում են ինչպես գծային կոդը շղթայի մեջ, այնպես էլ գործառույթների և տվյալների ցածր մակարդակի ներկայացման արդյունքում:Այնուամենայնիվ, կան ծրագրերի ագրեսիվ օպտիմիզացման տեխնիկա, որոնք թույլ են տալիս նվազեցնել բարձրակարգ լեզուները առաջին կարգի լեզուներին:
<br />
 
=== Լեզուների հանրաճանաչությունը ===
Դժվար է որոշել, թե որ ծրագրավորման լեզուն է ամենատարածվածը, քանի որ «հանրաճանաչություն» բառի իմաստը կախված է ենթատեքստից:Մեկ լեզու կարող է տևել առավելագույնը մարդկային ժամեր, մյուսը ՝ ամենամեծ թվով կոդերի տողեր, երրորդը ՝ առավելագույն պրոցեսորային ժամանակ, իսկ չորրորդը ՝ առավել հաճախ, ծառայում է որպես հետազոտական հիմք ակադեմիայում:Որոշ լեզուներ շատ տարածված են հատուկ առաջադրանքների համար:
 
Այլ լեզուներ պարբերաբար օգտագործվում են լայն կիրառական ծրագրերի ստեղծման համար:
 
Լեզուների ժողովրդականությունը չափելու համար կան տարբեր չափումներ, որոնցից յուրաքանչյուրը մշակվում է հանրաճանաչության հայեցակարգի որոշակի նշանակության հակումով:
 
* հաշվել լեզուն հիշատակող թափուր աշխատատեղերի քանակը.
* վաճառված գրքերի քանակը (դասագրքեր կամ տեղեկատու գրքեր).
* լեզվով գրված կոդերի տողերի քանակի գինը (որը հաշվի չի առնում լեզուների օգտագործման հազվադեպ հրապարակված դեպքերը).
* հաշվում են լեզվային տեղեկանքները որոնիչի հարցումներում:
 
Հարկ է նշել, որ այս ցուցանիշների վրա բարձր գնահատականները ոչ միայն չեն նշում լեզուն բարձր տեխնիկական մակարդակ և / կամ ծախսերի օպտիմիզացում այն օգտագործելիս, այլ, ընդհակառակը, երբեմն նրանք կարող են այլ կերպ ասել:Արդյունքում, կարճաժամկետ հեռանկարում «Քոբոլ» -ին աջակցող ծրագրերը շատ ավելի թանկ են, քան ժամանակակից լեզուների մեծ մասի ծրագրերը, բայց դրանք զրոյից վերաշարադրելը կպահանջի նշանակալից միանգամյա ներդրումներ, և դրանք կարելի է համեմատել միայն երկարաժամկետ ծախսերի հետ:Կոբոլի տեխնիկական անկատարությունը պայմանավորված է նրանով, որ այն մշակվել է առանց համակարգչային գիտության ոլորտում փորձագետների ներգրավման:
 
== Տես նաև ==
 
* [[Ծրագրավորման լեզուների ցանկ]]