Modula-2

ծրագրավորման լեզու

Modula­2֊ը ծրագրավորման լեզու է, որը 1977­-1985 թթ. նախագծվել և իրակկանացվել է Նիկլաուս Վիրտի կողմից՝ Շվեյցարիայի դաշնային տեխնոլոգիական ինստիտուտում (Ցյուրիխ)։ Modula-2 լեզուն պետք է կօգտագործվեր որպես Լիլիթ ԷՀՄ֊ի Օպերացիոն համակարգի և ծրագրային ապահովան ստեղծման միակ ծրագրավորման լեզու։ Լեզուն ի սկզբանե նախագծվել է որպես համակարգային ծրագրավորման միջոց, որը թույլ կտար գրել ապահով, հասկանալի և հարմար ծրագրեր։ Միևնույն ժամանակ այն պետք է մնար խիստ տիպիզացված բարձր կարգի լեզու, ապահով ծրագրավորման բոլոր միջոցների աջակցությամբ, թույլ տար անմիջականորեն դիմել սարքավորումներին, ստեղծել համակարգային ծրագյաին ապահովում, ինչպիսին օրինակ ընդհատումներ մշակող ծրագրերն են։ Այն Պասկալ և Մոդուլա ծրագրավորման լեզուների զարգացումն է։

Modula-2
Տեսակծրագրավորման լեզու, իմպերատիվ ծրագրավորման լեզու և systems programming language?
Սեմանտիկամոդուլային
Կատարման ձևկոմպիլյացիա
Առաջացել է1977 թ․
ՍտեղծողՆիկլաուս Վիրտ
ՆախագծողՆիկլաուս Վիրտ
Տիպիզացիաստատիկ
Հիմքի վրա էModula?
Ներշնչվել էModula
Ներշնչել էOberon

Ըստ Վիրտի, լեզվի ստեղծման վրա նաև իր ազդեցությունն է ունեցել Mesa լեզուն, որը ստեղծվել է Xerox PARC֊ում։

Ընդհանուր բնութագիր

խմբագրել

Մոդուլա-2-ը ստրուկտուրային, մոդուլյար ծրագրավորման լեզու է, որը շարահյուսորեն շատ նման է Պասկալին, սակայն զգալիորեն բարելավված և մշակված է։

Հինական գաղափարներ՝

  • ծրագիրը իրենից ներկայացնում է առանձին մոդուլների հավաքածու, որոնք կարող են կոմպիլացվել իրարից անկախ։ Ընդ որում ծրագրային մոդուլը կարող է (պարտադիր չէ) բաղկացած լինել երկու մասից՝ սահմանման մոդուլ և իրականացման մոդուլ։ Սահմանման մոդուլը դա մոդուլի արտաքին ինտերֆեյսն է՝ արտաքին մոդուլներին հասանելի հաստատունների, փոփոխականների անուններ, ֆունկցիաների և պրոցեդուրաների վերնագրեր։ Իրականացման մոդուլը պարունակում է ծրագրային կոդ, այսինքն սահմանումների մոդուլում նկարագրված ինտերֆեյսի իրականացումները։ Օրինակ որևէ տիպ սահմանելու համար անհրաժեշտ է սահմանումների մոդուլում նկարագրել միայն անունը, իսկ իրականացման մոդուլում՝ ամբողջ ստրուկտուրան։ Այդ դեպքում արտաքին մոդուլները կարող են ստեղծել նշված տիպի արժեքներ, կանչել այդ արժեքի հետ աշխատող ֆունկցիաներ և պրոցեդուրաներ՝ չունենալով ուղղակի հասանելիություն ամբողջ ստրուկտուրային, քանի որ այդ ստրուկտուրան գրված չէ սահմանման մոդուլում։ Հետևաբար, եթե հենց այդ նույն ստրուկտուրան նկարագրվի սահմանումենրի մոդուլում, ապա այն հասանելի կդառնա արտաքին մոդուլներին։
  • Այլ մոդուլներում նկարագրված սահմանումների կցագրումը ամբողջությամբ ղեկավարվում է․ կարելի է կցել մոդուլի սահմանումը ամբողջությամբ, բայց լեզվի շարահյուսությունը թույլ է տալիս զգալիորեն կոնկրետացնել կցվող ցուցակը։ Օրինակ մոդուլից կցել միայն կոնկրետ անհրաժեշտ հաստատուններ, պրոցեդուրաներ կամ ֆունկցիաներ։
  • Բոլոր մուտքի և ելքի միջոցները հանված են լեզվից։ Դրա փոխարեն կարելի է օգտածործել գրադարանային մոդուլներ, որոնց վրա էլ դրված է մուտքի/ ելքի խնդիրների կատարումը կոնկրետ համակարգերի համար։ Սակայն գոյություն ունեն ստանդարտացված մուտքի/ելքի գրադարաններ, որոնք տրամադրում են մուտքի/ելքի ֆունկցիաներ ստանդարտ տիպերի համար (մուտքագրել տարրական տիպի տվյալներ տեքստային տերմինալներից, ինչպես նաև ֆայլային մուտք/ելք)։
  • ծրագրում ավելացված են մինիմալ հասկացություններ բազմահոսք ծրագրավորման համար։ Ինչպես նաև ստանդարտ գրադարան, որը տալիս է զուգահեռ ծրագրավորման հնարավորություն։
  • Ներդրված է անմիջական հասանելիություն համակարգչի սարքերին, մասնավորապես կարելի է անմիջապես հասցեով դիմել հիշողությանը։

Լեզուն ունի համեմատաբար պարզ կառուցվածք։ Այն ունի 40 բանալի բառեր (Ada֊ում՝ 60)։ Լեզվի մասին պաշտոնական զեկույցը կազմում է ընդամենը 40 էջ (PL/I ծրագրավորման լեզվի զեկույցի կարճ տարբերակը 200 էջ է, իսկ ADA֊ինը՝ 400)։

Շարահյուսական առանձնահատկություններ

խմբագրել

Մոդուլա֊2֊ի շարահյուսական առանձնահատկությունները նկարագրելու լավագույն եղանակը պասկալի հետ համեմատելն է։ Գլխավոր տարբերություններ՝

  • տառաշարազգայուն է – իդենտիֆիկատորներում մեծատառ և փոքրատառ նիշերը տարբերվում են։ Բանալի բառերը գրվում են մեծատառով։
  • շարահյուսությունը ավելի հեշտացված է։ Բոլոր շարահյուսական կառուցվածքները, բացի REPEAT֊UNTIL ցիկլից, կազմված են հետևյալ սկզբունքով՝ բանալի բառով սկսվող կառուցվածքը ավարտվում է բանալի բառով։ Օրինակ, պայմանի օպերատորը ունի հետևյալ տեսքը՝
IF պայման THEN
  օպերատորներ
ELSIF պայման THEN
  օպերատորներ
ELSIF պայման THEN
  օպերատորներ

ELSE
  օպերատորներ
END
  • Դրա շնորհիվ վերանում է BEGIN֊END օպերանդների օգտագործման կարիքը։
  • WHILE և FOR ցիկլերը նույնպես ենթադրում են օպերանդների բլոկ և ավարտվում են END բառով։
  • Ավելացված է առանց պայմանի ցիկլ՝ LOOP-END
  • և՛ պրոցեդուրաները, և՛ ֆունկցիաները հայտարարվում են PROCEDURE բանալի բառով։
  • Ավելացված է BITSET բիթային բառ տիպը
  • Լեզվից հանվել է GOTO օպերատորը

Առավելություններ և թերություններ

խմբագրել

Կարելի է հստակ ասել, որ Modula-2֊ը, պահպանելով Պասկալի դրական հատկանիշները, ունի մի շարք առանձնահատկություններ, որոնք լեզուն դարձնում են ավելի հզոր, հարմարված ինչպես համակարգային, այնպես էլ կիրառական ծրագրավորման համար։ Modula֊2֊ի հիմնական առավելությունները ժամանակակից լեզուների նկատմամբ հետևյալն են՝

  • Լեզվի սահմանման պարզությունն ու լակոնիկությունը։ Լեզվի ամբողջական EBNF ներկայացումը 13 էջ է, իսկ շարահյուսական գծագրերը՝ 12 էջ։
  • Պարզ, տրամաբանական և միատարր կազմվածք։ Լեզուն մաքրված է ավելորդ կառուցվածքներից և էլեմենտներից, որոնք կարող են բերել սխալների։ Modula֊2֊ը առաջին իմպերատիվ լեզուն է, որտեղ չկա GOTO հրամանը։
  • Լավ մշակված ծրագրի բաժանման մեխանիզմ՝ ակնհայտ նկարագրվող ինտրեֆեյսով և ամբողջությամբ ղեկավարվող կցման մեխանիզմով։
  • Մուտքի/Ելքի ստանդարտ ֆունկցիաների հեռացումը լեզվից և նրանց՝ գրադարններ տեղափոխումը։ Դա պարզեցնում է լեզուն և կոմպիլյատորը, ինչպես նաև ծրագրավորողին տալիս է մուտք/ելքի գրադարանի ազատ ընտրության հնարավորություն։
  • Ցածր մակարդակի ծրագրավորման մեխանիզմ։ Այդ թվում՝ չտիպիզացված տվյալների և ցուցիչի հիշողության հետ աշխատելու անուղղակի մեխանիզմ։ Դա թույլ է տալիս բարձր կարգի լեզվով գրել ցածր մակարդակի ծրագրեր, ինչպիսիք են ընդհատում մշակող ծրագրերը և շարժարկիչները։
  • Զուգահեռ ծրագրավորման համար անհրաժեշտ մինիմալ գործիքները, որոնք հնարավորություն են տալիս ծրագրավորել ինչպես բազմապրոցեսորային, այպես էլ ժամանակի բաժանումով հարթակների համար։

Թերություններ՝

  • Զուգահեռ ծրագրավորման մեխանիզմի թուլություն, մասնավորապես՝ զուգահեռ պրոցեսների համագործակցության կազմակերպման մեջ։ Այդ միջոցների իրականացումը դրված է համակարգային գրադարանների վրա, ընդ որում ստանդարտ գրադարանում կան միայն զուգահեռացման ղեկավարման պարզագույն միջոցներ։
  • Ներդրված մոդուլների աջակցումը չարդարացված դժվարացնում է կոմպիլյատորը։ Այդ մոդուլների օգտագործման պատճառ են հանդիսանում սահմանափակ տեսանելիության տիրույթը և բարձր առաջնայնուըյուն ունեցող ծրագրի կտորների առանձնացումը՝ զուգահեռ ծրագրավորման ժամանակ սինխրոնիզացիա ապահովելու նպատակով։ Սակայն դա կարելի էր իրականացնել ավելի պարզ միջոցներով։
  • Սահմանման և իրականացման մոդուլների բացահայտ առանձնացումը վիճարկելի լուծում է լեզվի համար։ Այն դժվարացնում է կոմպիլյատորի աշխատանքը և ստիպում է ծրագրավորողին համապատասխանեցնել փոփոխությունները երկու ֆայլում։ Հարկ է նշել նաև, որ Modula֊2 լեզվի հետնորդ Oberon֊ում հրաժարվել են առանձին սահմանման եւ իրականացման մուդուլներից՝ իրականացման մուդուլում հրապարակային տվյալները նշվում են աստղանիշով, իսկ սահմանման մոդուլի փոխարեն կոմպիլյատորը գեներացնում է սիմվոլային նիշք՝ կոմպիլյատորի համար հեշտ ընթերնելի ինտերֆեյսի ինդեքս։

Հետևյալ հնարավորությունները լեզվի ստեղծման պահին շատ հայտնի էին, բայց չեն ընդգրկվել լեզվի մեջ։ Սրանք կարելի դիտարկել և՛ որպես թերություն, և՛ որպես առավելություն․

  • Բացակայում են դինամիկ զանգվածները և փոփոխական չափով տողերը։
  • Չկան ներդրված բացառությունների մշակման միջոցներ։

Արտաքին հղումներ

խմբագրել