Modula-2
Այս հոդվածն աղբյուրների կարիք ունի։ Դուք կարող եք բարելավել հոդվածը՝ գտնելով բերված տեղեկությունների հաստատումը վստահելի աղբյուրներում և ավելացնելով դրանց հղումները հոդվածին։ Անհիմն հղումները ենթակա են հեռացման։ |
Modula2֊ը ծրագրավորման լեզու է, որը 1977-1985 թթ. նախագծվել և իրակկանացվել է Նիկլաուս Վիրտի կողմից՝ Շվեյցարիայի դաշնային տեխնոլոգիական ինստիտուտում (Ցյուրիխ)։ 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֊ում հրաժարվել են առանձին սահմանման եւ իրականացման մուդուլներից՝ իրականացման մուդուլում հրապարակային տվյալները նշվում են աստղանիշով, իսկ սահմանման մոդուլի փոխարեն կոմպիլյատորը գեներացնում է սիմվոլային նիշք՝ կոմպիլյատորի համար հեշտ ընթերնելի ինտերֆեյսի ինդեքս։
Հետևյալ հնարավորությունները լեզվի ստեղծման պահին շատ հայտնի էին, բայց չեն ընդգրկվել լեզվի մեջ։ Սրանք կարելի դիտարկել և՛ որպես թերություն, և՛ որպես առավելություն․
- Բացակայում են դինամիկ զանգվածները և փոփոխական չափով տողերը։
- Չկան ներդրված բացառությունների մշակման միջոցներ։