Մատրյոշկա Ք. Շերտավոր ծրագրի լեզվական համակարգ

Փորձենք պատկերացնել քիմիան առանց Մենդելեևի Պարբերական աղյուսակի (1869 թ.): Քանի՞ տարր պետք էր հիշել, և ոչ մի առանձնահատուկ հերթականությամբ... (Հետո՝ 60։)

Դա անելու համար պարզապես մտածեք միանգամից մեկ կամ մի քանի ծրագրավորման լեզուների մասին: Նույն զգացմունքները, նույն ստեղծագործական քաոսը։

Եվ հիմա մենք կարող ենք վերապրել XNUMX-րդ դարի քիմիկոսների զգացմունքները, երբ նրանց առաջարկվել է ամբողջ գիտելիքները, և մի փոքր ավելին, մեկ Պարբերական աղյուսակում:

Մատրյոշկա Ք. Շերտավոր ծրագրի լեզվական համակարգ


Գիրքը «Matryoshka C. Ծրագրային լեզվի շերտավոր համակարգը» մեկ հայացքով ներկայացնում է C լեզվի բոլոր միավորները։ Սա թույլ է տալիս կազմակերպել դրանք, ուղղել հնացած տեղեկատվությունը և նույնիսկ հստակեցնել ծրագրի բուն հայեցակարգը:

Այսօր ծրագրավորման տեղեկատվությունը համակարգման կարիք ունի նույնիսկ ավելի շատ, քան քիմիական տարրերը 150 տարի առաջ:

Առաջին անհրաժեշտությունը ուսուցումն է. Մենդելեևը սկսեց ստեղծել իր համակարգը, երբ բախվեց այն հարցին, թե որ տարրի հետ պետք է սկսել դասախոսություններ՝ O, H, N, He, Au... Միևնույն ժամանակ, նրա համար ավելի հեշտ էր. նա քիմիա էր սովորեցնում լավագույններին՝ ուսանողներին: Սանկտ Պետերբուրգի համալսարան. Իսկ ծրագրավորումն արդեն դասավանդվում է դպրոցում և շուտով կսկսվի մանկապարտեզում:

Երկրորդ անհրաժեշտությունը գիտական ​​մոտեցումն է։ Պարբերական աղյուսակի օգնությամբ հայտնաբերվեցին նոր տարրեր, շտկվեցին հների մասին տեղեկությունները։ Նա օգնեց ստեղծել ատոմի մոդելը (1911): Եվ այսպես շարունակ։

Երրորդ անհրաժեշտությունը ծրագրի հայեցակարգի հստակեցումն է։

Ժամանակակից ծրագրավորումը մեկ ոտք ունի 50-րդ դարի XNUMX-ականներին: Այն ժամանակ ծրագրերը պարզ էին, բայց մեքենաներն ու մեքենայական լեզուները բարդ էին, ուստի ամեն ինչ պտտվում էր մեքենաների և լեզուների շուրջ:

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

Ինչը մեզ հետ է բերում Պրիվատդոզենտ Մենդելեևի առաջին դասախոսությանը։ Ի՞նչ ասել առաջին կուրսեցիներին. Որտե՞ղ է ճշմարտությունը: Հարցը դա է։

Այս հարցին իր պատասխանն է տալիս «Մատրյոշկա C» գիրքը։ Ծրագրային լեզվի շերտավոր համակարգ»: Ընդ որում, այն ուղղված է ոչ միայն ուսանողներին, այլև պատրաստված ծրագրավորողներին, քանի որ հենց նրանք, այսինքն՝ մենք պետք է փնտրենք ճշմարտությունը և փոխենք աշխարհայացքը։

Հետևյալը գրքի ամփոփումն է:

1. Ներածություն

1969 թվականին ստեղծվեց C լեզուն, որը դարձավ հիմնական ծրագրավորման լեզուն և այդպես մնաց 50 տարի։ Ինչո՞ւ է սա այդպես։ Նախ, քանի որ C-ն է կիրառվում է լեզուն, որը տվել է ծրագիրը մարդասիրական փոխարենը դիտել մեքենա. Այս նվաճումն ապահովվել է C ընտանիքի լեզուներով՝ C++, JavaScript, PHP, Java, C# և այլն: Երկրորդ՝ կարճ ու գեղեցիկ լեզու է։

Այնուամենայնիվ, C լեզուն ինքնին սովորաբար խառնվում է մեքենա assembler-ի հետ, դրանով իսկ բարդացնելով և խեղաթյուրելով նրա ընկալումը: Մյուս ծայրահեղությունը լեզվին որոշակի «փիլիսոփայության» պարտադրումն է՝ ընթացակարգային, առարկայական, գործառական, կազմված, մեկնաբանված, տպագրված և այլն։ Սա ավելացնում է զգացմունքները, բայց չի օգնում ավելի լավ նկարագրել լեզուն:

Ճշմարտությունը մեջտեղում է, իսկ C լեզվի համար այն խստորեն մեջտեղում է փիլիսոփայական և մեքենայական ընկալման միջև։

C լեզուն անկախ չէ, այն ենթարկվում է սովորական գրավոր լեզվին և միևնույն ժամանակ ինքն է վերահսկում անսամբլի լեզուն։ Այս դիրքորոշումը նկարագրում է Ծրագրի խոսքի մոդել, ըստ որի ծրագիրը բաժանվում է երեք ստորադաս տիպի՝ խոսք, ծածկագիր, հրաման։ C լեզուն պատասխանատու է երկրորդ՝ ծածկագրի տեսակի համար։

Որոշելով լեզվի տեղը ծրագրում, կարող եք կազմակերպել տեղեկատվություն դրա մասին, ինչը կազմում է Շերտավոր ծրագրի լեզվական համակարգ, C լեզուն ներկայացնելով պարբերական համակարգի ոգով - մեկ էջում։

Համակարգը կառուցված է հաշվի առնելով կիրառական լեզուների համայնքներ, իրենց խոսքի ենթակայությունից բխող. Matryoshka C միավորների մեկ հավաքածուն թույլ է տալիս նկարագրել և համեմատել տարբեր լեզուներ՝ ստեղծելով Matryoshka-ների շարք՝ C++, PHP, JavaScript, C#, MySQL, Python և այլն: Արժանի և ճիշտ է, որ տարբեր լեզուներ նկարագրվում են հիմնական լեզվի միավորներով:

2. ԳԼՈՒԽ 1. Ծրագրի խոսքի մոդել. Մաքրել C

Առաջին գլխում ներկայացված է ծրագրի խոսքի մոդելը, արտացոլելով կիրառական մոտեցում։ Նրա խոսքով, ծրագիրն ունի երեք ակնհայտ հաջորդական տեսակ.

  1. ելույթ - խնդիրը լուծող ծրագրավորողի անմիջական խոսք,
  2. կոդավորված - լուծումների կոդավորումը մաթեմատիկական ձևով C լեզվով (կամ որևէ այլ)
  3. և հրաման - մեքենայի ուղղակի հրամաններ:

Խոսքի մոդելը բացատրում է, թե ինչու է C-ն պարզ և հասկանալի լեզու: Xi-ն կառուցված է մեզ ծանոթ մարդկային խոսքի պատկերով և նմանությամբ:

Ծրագրի առաջին տեսակը ծրագրավորողի ուղիղ խոսքն է։ Խոսքը համապատասխանում է մարդու մտածողությանը։ Սկսնակ ծրագրավորողները ծրագրեր են գրում խոսքի միջոցով՝ սկզբում ռուսերենով, այնուհետև քայլ առ քայլ գործողությունները թարգմանելով կոդային լեզվով: Եվ հենց այս մոդելի վրա է ստեղծվել C լեզուն։

Ծրագրավորողի եզրակացությունները՝ արտահայտված խոսքում, վերածվում են կոդավորված թվային ձևի։ Այս փոխակերպումը պետք է անվանել արտացոլումը, քանի որ խոսքը և ծածկագիրը նույն բնույթն ունեն (արտացոլում - ծնունդ - սեռ): Սա միանգամայն ակնհայտ է, եթե համեմատենք ծրագրի ելույթը (ձախ կողմում) և ծածկագիրը (աջ կողմում):

Մատրյոշկա Ք. Շերտավոր ծրագրի լեզվական համակարգ

Հետաքրքիր է, որ արտացոլումը տեղի է ունենում շատ պարզ՝ միայն երկու տեսակի արտահայտություններով:

Այնուամենայնիվ, C լեզվի ժամանակակից նկարագրությունը (1978 թվականից) չի պարունակում անունների բավարար ցուցակ, որը նկարագրում է լեզուն ընդհանրապես, կամ մասնավորապես արտացոլման առաջադրանքը: Ուստի մենք ստիպված ենք ստեղծագործել և ներկայացնել այս անունները։

Բառերի ընտրությունը պետք է լինի ճշգրիտ և հստակ: Սա պահանջում էր հատուկ մոտեցում, որը հակիրճ արտահայտվում էր այսպես՝ մայրենի լեզվի խստագույն օգտագործում։ Անգլիացիների համար դա անգլերեն կլիներ, բայց մենք անգլիացի չենք: Այսպիսով, մենք կօգտագործենք այն, ինչ ունենք և կփորձենք խոսել ռուսերեն:

Արտացոլումն իրականացվում է երկու տեսակի արտահայտություններով.

  1. հաշվարկ (HF) - արտացոլում է օբյեկտի հատկությունների փոփոխությունը: Օբյեկտի հատկությունն արտահայտվում է թվով, այնուհետև հատկության վրա գործողությունը գործողություն է թվի վրա՝ գործողություն։
  2. ենթակայություն (Pch) - արտացոլում է գործողությունների հերթականության փոփոխություն: Pch-ի նախատիպը խոսքային բարդ նախադասություն է, հետևաբար Pch-ի տեսակների մեծ մասը սկսվում է «եթե», «հակառակ դեպքում», «մինչդեռ», «համար» ստորադասական շաղկապներով: Այլ տեսակի ԱՀ-ները լրացնում են դրանք:

Ի դեպ, կարո՞ղ եք հավատալ, որ C նկարագրության մեջ հաշվարկային արտահայտությունների անուն չկա, դրանք պարզապես կոչվում են «արտահայտություններ»: Սրանից հետո այլևս զարմանալի չի լինի, որ ստորադասության տեսակի համար չկա անուն և ասոցիացիա, իսկ ընդհանրապես անունների, սահմանումների և ընդհանրացումների սակավություն։ Դա պայմանավորված է նրանով, որ հայտնի K/R-ը (“The C Language”, Kernighan/Ritchie, 1978) ոչ թե նկարագրություն է, այլ լեզվի օգտագործման ուղեցույց:

Այնուամենայնիվ, ես դեռ կցանկանայի ունենալ լեզվի նկարագրություն։ Ուստի նրան առաջարկվում է Շերտավոր ծրագրի լեզվական համակարգ.

3. ԳԼՈՒԽ 2. Շերտերային համակարգ. Համառոտ Գ

Ցանկացած նկարագրություն պետք է լինի ճշգրիտ և չափազանց հակիրճ: Ծրագրային լեզվի դեպքում ճակատային նկարագրությունը դժվար է։

Այստեղ մենք ունենք ծրագիր. Այն բաղկացած է մոդուլներից: Մոդուլները բաղկացած են ենթածրագրերից և հավաքածուներից (կառուցվածքից): Ենթածրագրերը բաղկացած են առանձին արտահայտություններից՝ հայտարարություններ, հաշվարկներ, ենթակայություն։ Կան տասը տեսակի ենթակայություն։ Ենթակայությունը կապում է ենթամակարդակներն ու ենթածրագրերը: Կան նաև մի քանի գովազդներ։ Այնուամենայնիվ, հայտարարագրերը ներառված են ոչ միայն ենթածրագրերում և ենթամակարդակներում, այլև մոդուլներում և հավաքածուներում: Եվ արտահայտությունների մեծ մասը բաղկացած է բառերից, որոնք այնքան դժվար է նկարագրել, որ դրանք սովորաբար տրվում են երկու ցուցակով՝ բնօրինակ և ածանցյալ բառեր, որոնց դուք կծանոթանաք լեզվի ուսուցման և օգտագործման ընթացքում: Սրան ավելացնենք կետադրական նշաններ և մի շարք այլ արտահայտություններ։

Նման ներկայացման դեպքում հեշտ չէ հասկանալ, թե ով ում վրա է կանգնել։

Լեզուն նկարագրելու ուղղակի հիերարխիկ մոտեցումը չափազանց բարդ կլինի: Շրջանաձև որոնումը հանգեցնում է լեզվի նկարագրության՝ հիմնվելով նրա խոսքի բնույթի և հրահանգների վրա: Այսպիսով, ծնվեց Շերտային համակարգը, որը մասամբ համընկավ Մենդելեևի պարբերական համակարգի հետ, որը նույնպես շերտավորել. Ինչպես պարզվեց դրա հրապարակումից 42 տարի անց (1869 թ.), համակարգի պարբերականությունը կապված է էլեկտրոնային շերտերը (1911, Բոր-Ռադերֆորդի ատոմի մոդելը): Նաև Շերտավոր և Պարբերական համակարգերը նման են բոլոր միավորների աղյուսակային դասավորությանը մեկ էջի վրա:

Լեզվական միավորների նկարագրությունը հակիրճ է՝ ընդամենը 10 տեսակի արտահայտություններ և 8 տեսակի այլ միավորներ, ինչպես նաև իմաստալից և տեսողական։ Թեեւ անսովոր առաջին ծանոթության համար։

Լեզվական միավորները բաժանված են 6 մակարդակի.

  1. միավորներ - աղյուսակի տողեր
  2. բաժիններ - սեռերի հատուկ խմբեր (առաջին տողի մասեր)
  3. սեռ - բջիջներ (բաժանման հիմնական մակարդակ)
  4. գերտեսակներ - տեսակների բաժանիչներ (հազվադեպ մակարդակ)
  5. տեսակներ - միավորի բանաձևեր բջիջի ներքևում կամ առանձին
  6. նախշեր - միավորներն իրենք (միայն բառերի համար)

Նմուշ բառերը նկարագրում են բառարան - առանձին ենթահամակարգ, որը կազմված է նույն վեց մակարդակներից:

C լեզվի խոսքային բաղադրիչը բավականին ակնհայտ է, թեև այն դեռ արժանի է նկարագրության։ Բայց լեզվի հրամանային մասը հենց կապված է կոմպիլյացիայի կառավարման հետ, որի ընթացքում ստեղծվում է ծրագրի երրորդ տեսակը՝ հրամանը։ Այստեղ մենք հասնում ենք C լեզվի ամենահետաքրքիր կողմին՝ գեղեցկությանը:

4. ՀԵՏԵՎՅԱԼ ԳԼՈՒԽՆԵՐԸ. Գեղեցիկ Սի

C լեզուն ժամանակակից ծրագրավորման հիմքն է։ Ինչո՞ւ։ Նախ՝ խոսքին ամենամեծ համապատասխանության շնորհիվ։ Երկրորդ, քանի որ այն գեղեցիկ կերպով շրջանցել է մեքենայի համարների մշակման սահմանափակումները։

Կոնկրետ ի՞նչ է առաջարկել Սին։ Պատկեր և շերտ:

«Պատկեր» բառը անգլերեն «տիպ» բառի թարգմանությունն է, որը գալիս է հունարեն «նախատիպ» - «տիպ» բառից: Ռուսերենում «տեսակ» բառը չի փոխանցում արտահայտվող հասկացության հիմնաքարը, ավելին, այն շփոթված է «տեսակ» օժանդակ նշանակության հետ։

Սկզբում պատկերը լուծեց զուտ մեքենայական հաշվարկի խնդիր, այնուհետև դարձավ թռիչքուղի օբյեկտների լեզուների ծննդյան համար:

Շերտը անմիջապես լուծեց մի քանի խնդիր՝ և՛ մեքենայի, և՛ կիրառական: Հետևաբար, քննարկումը կսկսվի մեկ առաջադրանքով պատկերով և կանցնի բազմաբնույթ առաջադրանքների շերտին:

Պատմական ծրագրավորման տհաճ առանձնահատկություններից մեկն այն է, որ հասկացությունների մեծ մասը, ներառյալ հիմնականները, տրվում են առանց սահմանումների: «Ծրագրավորման լեզուն (գետերի անվանումը) ունի ամբողջ թվային և լողացող թվերի տեսակներ...», և նրանք ավելի քերծվեցին: Պետք չէ սահմանել, թե ինչ է «տեսակը» (պատկերը), քանի որ հեղինակներն իրենք դա լիովին չեն հասկանում և «հստակության համար» լռում են: Եթե ​​դրանք ամրացվեն պատին, ապա անորոշ ու անօգուտ սահմանում կտան։ Դա շատ է օգնում թաքնվել օտար բառերի հետևում. ռուս հեղինակների համար՝ անգլերենի հետևում (տեսակ), անգլիացիների համար՝ ֆրանսերենի (ենթածրագրի), հունարենի (պոլիմորֆիզմի), լատիներենի (կապսուլյացիա) կամ դրանց համակցությունների հետևում (ad-hoc polymorphism):

Բայց սա մեր ճակատագիրը չէ։ Մեր ընտրությունը պարզ ռուսերենով բարձրացված երեսկալով սահմանումներ են։

Պատկեր

Պատկեր մեծության նախադրյալ անվանումն է, որը սահմանում է 1) քանակի ներքին հատկությունները և 2) քանակի համար գործողությունների ընտրությունը։

«Տեսակ» (տեսակ) բառը համապատասխանում է սահմանման առաջին մասին՝ «մեծության ներքին հատկությունները»։ Բայց պատկերի հիմնական իմաստը երկրորդ մասում է՝ «գործողությունների ընտրություն քանակներին»։

C-ում պատկեր ներմուծելու մեկնարկային կետը սովորական հաշվարկն է, ինչպիսին է գումարման գործողությունը։

Թուղթ Մաթեմատիկան, լինի դա ձեռքով գրված, թե տպագիր, առանձնապես տարբերություն չի դնում թվերի տեսակների միջև՝ սովորաբար ենթադրելով, որ դրանք իրական են: Հետեւաբար, դրանց մշակման գործառնությունները միանշանակ են:

Մեքենա Մաթեմատիկան թվերը խստորեն բաժանում է ամբողջ թվերի և կոտորակների։ Տարբեր տեսակի թվեր պահվում են հիշողության մեջ և մշակվում տարբեր պրոցեսորի հրահանգներով: Օրինակ, ամբողջ թվեր և կոտորակներ ավելացնելու հրահանգները երկու տարբեր հրահանգներ են, որոնք համապատասխանում են երկու տարբեր պրոցեսորային հանգույցներին: Բայց ամբողջ և կոտորակային արգումենտներ ավելացնելու հրաման չկա։

Կիրառվել է մաթեմատիկան, այսինքն՝ C լեզուն, առանձնացնում է թվերի տեսակները, բայց միավորում է գործողությունները՝ ամբողջ թվերի և/կամ կոտորակների գումարումը գրվում է մեկ գործողության նշանով։

Հայեցակարգի պատկերի հստակ սահմանումը մեզ թույլ է տալիս անպայման խոսել երկու այլ հասկացությունների մասին. արժեքը и գործողությունը.

Մեծությունը և գործողությունը

Արժեք - մշակվող համարը:

Գործողություն - նախնական արժեքների (փաստարկների) արժեքների մշակում վերջնական թիվը (ընդհանուր) ստանալու համար:

Մեծությունը և գործառնությունը փոխկապակցված են: Յուրաքանչյուր գործողություն մեծություն է, քանի որ այն ունի թվային արդյունք: Եվ յուրաքանչյուր արժեք պրոցեսորի ռեգիստրից արժեք փոխանցելու արդյունք է, այսինքն՝ գործողության արդյունք։ Չնայած այս հարաբերություններին, գլխավորը դրանց առանձին նկարագրության հնարավորությունն է, թեկուզ բառարանի տարբեր բաժիններում մեկ բառի կրկնությամբ, ինչը տեղի է ունենում MA3-ում։

Մեքենայի մոտեցումը բաժանեց ծրագրավորողի օգտագործած բոլոր թվերը թիմերը и տվյալներ. Նախկինում երկուսն էլ թվեր էին, օրինակ՝ հրամանները գրվում էին թվային կոդերով։ Սակայն կիրառական լեզուներում հրամանները դադարեցին թվեր լինել և դարձան բառերով и գործողության նշաններ. Որպես թվեր մնում են միայն «տվյալները», բայց անհեթեթ է շարունակել դրանք այդպես անվանել, քանի որ մեքենայից մաթեմատիկական տեսակետից անցում կատարելիս թվերը մեծություններ են, որոնք բաժանվում են բնօրինակի (տվյալներ) և վերջնական (պահանջվում է) «Անհայտ տվյալը» հիմարություն կհնչի:

Թիմերը նույնպես բաժանվել են երկու տեսակի գործողությունների՝ մաթեմատիկական և ծառայողական։ Մաթեմատիկական գործողություններ - գործողություններ. Պաշտոնական նյութերին ավելի ուշ կանդրադառնանք:

C լեզուներում սովորական թղթի և մեքենայի միանշանակ կամ առանձին մաթեմատիկական գործողությունները գրեթե համընդհանուր բազմակի են դառնում:

Բազմաթիվ գործողությունները նույն անունով մի քանի գործողություններ են՝ տարբեր տեսակի փաստարկներով և տարբեր, իմաստով նման գործողություններ:

Ամբողջական արգումենտները համապատասխանում են մի ամբողջ գործողության, իսկ կոտորակային արգումենտները՝ կոտորակային գործողության։ Այս տարբերությունը հատկապես ակնհայտ է բաժանման գործողության ժամանակ, երբ 1/2 արտահայտությունը տալիս է ընդհանուր 0, ոչ թե 0,5։ Նման նշումը չի համապատասխանում թղթային մաթեմատիկայի կանոններին, բայց C լեզուն չի ձգտում համապատասխանել դրանց (ի տարբերություն Fortran-ի), այն խաղում է ըստ իր սեփականի: դիմել է կանոնները։

Ամբողջ թվերի և կոտորակների խառնման դեպքում ընդգրկվում է միակ ճիշտը փաստարկների արժեքների ձևավորում - արժեքի ընտրովի փոխակերպում մեկ պատկերից մյուսը: Իրոք, ամբողջ թիվ և կոտորակային թիվ գումարելիս արդյունքը կոտորակային է, ուստի գործողության պատկերը. բարձրացնել ամբողջ թվային արգումենտը կոտորակային արժեքի վերածելու գործողությունը:

Մնացել են մի շարք գործողություններ հոգնակիԻսկ միայնակ. Նման գործողությունները սահմանվում են միայն մեկ տեսակի արգումենտների համար՝ բաժանման մնացորդ - ամբողջ թվային արգումենտներ, stacking (bitwise գործողություններ) - բնական ամբողջ թվեր։ Ma3-ը ցույց է տալիս գործողությունների բազմակիությունը (#^) նշաններով, որոնք ցույց են տալիս այն պատկերները, որոնց համար սահմանված է գործողությունը: Սա յուրաքանչյուր գործողության կարևոր, բայց նախկինում անտեսված հատկությունն է:

Բոլոր գործառույթները կամայական միավորի գործողություններ են: Բացառություն են կազմում օպերատորները. ոչ փակագծային գործառույթներ, ներկառուցված լեզվի մեջ (բնօրինակ գործողություններ):

Աջակցություն

Աջակցություն - գործողությունը ուղեկցող գործողություն.

Եթե ​​վիրահատությունը դիտարկենք որպես հիմնական գործողություն, ապա կարող ենք առանձնացնել վիրահատությունն ապահովող և դրանից տարբերվող երկու ուղեկցող։ Դրանք են՝ 1) փոփոխական վերահսկողությունը և 2) ենթակայությունը։ Այս գործողությունը կոչվում է օգնություն.

Այստեղ պետք է շեղվել ու առանձին ասել ծրագրավորման դասագրքերի ռուսերեն թարգմանությունների մասին։ Կ/Ռ-ի տեքստում նոր բառ է մտցվել՝ գործողությունները գրանցելու համար հայտարարություն (արտահայտություն), որը փորձեց մեքենայական հրամանի հասկացությունները բաժանել տարբեր գործողությունների. Այս փորձը թաղվել է ռուս թարգմանիչների կողմից՝ «արտահայտությունը» փոխարինելով «օպերատոր» բառով, որը.

  1. դարձել է «հրաման» մեքենայական բառի հոմանիշը.
  2. պարզվեց, որ հոմանիշ է «գործողության նշան» արտահայտության հետ.
  3. և նաև ստացել է անսահմանափակ թվով լրացուցիչ արժեքներ: Այսինքն՝ վերածվել է անգլերեն հոդվածի նման մի բանի՝ «ուհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհհ

Հաշվի առեք ուղեկցող գործողությունները, կամ օգնություն.

Փոփոխական հսկողություն

Փոփոխական հսկողություն (UP) - փոփոխական բջիջների ստեղծում/ջնջում:
UE-ն անուղղակիորեն առաջանում է փոփոխական հայտարարելիս, որն արդեն գրված է մեկ այլ պատճառով՝ արժեքի պատկերը նշելու համար: Միայն մեկ դիտում է բացահայտորեն կառավարվում լրացուցիչ փոփոխականներ օգտագործելով malloc() և free() ֆունկցիաները:

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

ենթակայություն

ենթակայություն — միացնել/անջատել շերտի հատվածները:

C լեզուն առաջարկում էր գործողությունների հերթականությունը վերահսկելու կիրառական մեթոդ, որը տարբերվում էր assembler-ից՝ ենթակայությունից։ Այն արտացոլում և մշակում է խոսքային բարդ նախադասություն՝ հստակ բաժանումով հիմնական մասի (ենթակայական դրույթ) և ստորադասական մասի (ենթամակարդակ/ենթակարգ բաժիններ)։

Ե՛վ հայտարարագիրը, և՛ ներկայացումը հիմնված են հայեցակարգի վրա շերտ.

Շերտ

Շերտ սահմանափակ մեկ մակարդակի ընտրովի արտահայտությունների շարք է:

Շերտը բացահայտ և անուղղակիորեն ստանձնեց միանգամից մի քանի առաջադրանք.

  1. ծրագրի կազմակերպումը
  2. սահմանափակելով անունների տեսանելիությունը (ուղղակիորեն),
  3. փոփոխականների (հիշողության բջիջների) կառավարում (ներածական),
  4. ստորադասական դրույթների սահմանում,
  5. գործառույթների և ընտրության սահմանումներ և այլն:

Մեքենայի լեզուներում շերտ հասկացություն չկար, ուստի այն K/R-ում չէր հայտնվում, և եթե ինչ-որ բան չկար, ապա հաջորդ գրքերում այն ​​ներմուծելը հերետիկոսություն և ազատ մտածողություն կլիներ: Հետևաբար, շերտ հասկացությունն ընդհանրապես չի առաջացել, թեև այն չափազանց օգտակար է և բավականին ակնհայտ։

Առանց շերտի հնարավոր չէ հակիրճ և հստակ բացատրել ծրագրի բազմաթիվ գործողություններն ու կանոնները։ Օրինակ, ինչու է goto-ն երեք կոպեկի չափ վատ, իսկ խրթին ժամանակը՝ լավ: Դուք կարող եք միայն անօգնական երդվել, ինչպես դա արեց Դեյկստրան («ծրագրավորողների հմտությունը մի գործառույթ է, որը հակադարձորեն կախված է նրանց ծրագրերում goto-ի հայտարարությունների հաճախականությունից»: Մի խոսքով, goto-ն օգտագործում են միայն այծերը: Արդարացման մակարդակը Աստված է: Ճիշտ է, սա այնքան էլ սարսափելի չէ, եթե ձեր գրքերը մենք ընդհանրապես ոչինչ բացատրելու կարիք չունենք, բայց, ինչպես արդեն ասացինք, սա մեր ճակատագիրը չէ:

Ի դեպ, կարելի է ենթադրել, որ Դեն Ռիչին goto-ն թողել է հենց որպես ինչ-որ անանուն հայեցակարգ որոնելու բանալի, քանի որ goto արտահայտության մեջ կարիք ու գեղեցկություն չկար։ Բայց կարիք կար պարզ ու հասկանալի բացատրության լեզվի նոր սկզբունքների, որոնք ինքը Ռիչին չէր ցանկանում տալ, և որոնք հիմնված են հենց հայեցակարգի վրա. շերտ.

Շեղում

Շեղում — փոխելով նոր անվան սովորական հատկությունները:

Ամենակարևոր շեղումը կապված է ծրագրի շերտի հատկությունների հետ և նկարագրվում է մեկ «ստատիկ» բառով, որն ունի տարբեր նշանակություն յուրաքանչյուր տեսակի շերտում:

5. ՎԵՐՋԻՆ ԳԼՈՒԽԸ. Կիրառական լեզուների ընդհանրությունը

Կիրառական լեզուներն են փոխաբերական լեզուները (պատկեր ունեցող, «մուտքագրված»): Դրանք հիմնված են պատկերի բացահայտ կամ անուղղակի օգտագործման վրա: Ավելին, այստեղ կրկին հակասություն է ի հայտ գալիս՝ բացահայտ պատկերն ավելի հասկանալի է, բայց ավելի քիչ հարմար, և հակառակը։

Մատրյոշկա Ք. Շերտավոր ծրագրի լեզվական համակարգ

(Սեղանի դասավորությունը դեռ չի առաքվել, ուստի աղյուսակը ցուցադրված է նկարով):

C-ից հետո կիրառական լեզուների զարգացումը բռնեց դրանց փոխաբերականությունը մեծացնելու ուղին։ Բարձր պատկերները հասկանալու համար ամենակարևորը C-ի անմիջական ժառանգն է՝ C++ լեզուն: Նա զարգացնում է քանակների համար գործողությունների կամայական ընտրության գաղափարը և այն մարմնավորում է սինթետիկ արտահայտության ընտրության հիման վրա, որը ստանում է նոր անուն՝ օբյեկտ: Այնուամենայնիվ, C++-ը այնքան հակիրճ և արտահայտիչ չէ, որքան C-ն՝ նոր հավաքածուների տեսակների և դրանց հետ կապված կանոնների գերծանրաբեռնվածության պատճառով: Ի դեպ, խոսենք «գերբեռնվածության» մասին։

Գերբեռնվածություն և պոլիմորֆիզմ

«Գերբեռնվածություն» բառը ստեղծագործելու համար հնացած մեքենայական ուսուցման տերմին է բազմաթիվ գործողություններ.

Մեքենայի (համակարգի) ծրագրավորողներ բազմակարծություն Գործողությունները կարող են տհաճ լինել. «Ի՞նչ է նշանակում այս նշանը (+). Մեր ժամանակ այդպես չէին գրում»։ Այստեղից էլ ծագում է ընտրված բառի բացասական իմաստը («գերհոգնած», «հոգնած»): Կիրառական ծրագրավորողի համար բազմաթիվ գործողություններ C լեզվի հիմնաքարն են, հիմնական ձեռքբերումն ու ժառանգությունը, այնքան բնական, որ դրանք հաճախ չեն ճանաչվում:

C++ լեզվով բազմակարծություն տարածվել է ոչ միայն սկզբնական գործողությունների, այլև գործառույթների վրա՝ և՛ անհատական, և՛ դասերի մեջ համակցված մեթոդների վրա: Բազմաթիվ մեթոդներով առաջացավ դրանք ընդլայնված դասերում վերացնելու ունակությունը, որը անորոշորեն կոչվում էր «պոլիմորֆիզմ»: Բազմորֆիզմի և գերծանրաբեռնվածության համադրությունը պայթուցիկ խառնուրդ է ստեղծել, որը բաժանվել է երկու պոլիմորֆիզմի՝ «ճշմարիտ» և «ad-hoc»: Սա հնարավոր է հասկանալ միայն՝ չնայած նշանակված անուններին։ Գովազդի ճանապարհը հարթված է օտար անուններով։

«Գերբեռնվածություն» ձևի հայտարարությունն ավելի լավ է արտահայտվում բառով լրացուցիչ հայտարարություն — ավելացնելով նույնանուն ֆունկցիայի հռչակագիր այլ պատկերի արգումենտներով:

Ավելի լավ է անվանել «պոլիմորֆիզմ» ձևի հայտարարությունը վերահայտարարություն — համընկնող հայտարարություն համանուն ֆունկցիայի նոր ընդլայնման շերտում՝ նույն պատկերի արգումենտներով:

Այնուհետև հեշտ կլինի հասկանալ, որ տարբեր պատկերների (փաստարկների) նույն մեթոդները. լրացուցիչ հայտարարվածև մեկ պատկեր - կրկին հայտարարվել է.

Ռուսերեն բառերը որոշում են.

Թռիչքուղի

Բարձր փոխաբերական լեզուների հասկացությունների դիտարկումը հաստատում է հիմնարար հասկացությունների հստակ սահմանման կարևորությունը: C-ի ճիշտ նկարագրությամբ, բարձր փոխաբերական լեզուներ սովորելը հեշտ և հաճելի կլինի:

Սա հատկապես կարևոր է անուղղակի խիստ փոխաբերական լեզուներ (PHP, JavaScript): Նրանց համար օբյեկտների (կոմպոզիտային պատկերների) կարևորությունը դառնում է նույնիսկ ավելի բարձր, քան C++-ում, բայց պատկերի գաղափարը դառնում է անուղղակի և անհասկանալի: Հարմարավետության տեսակետից դրանք ավելի պարզ են դարձել, բայց հասկանալու տեսակետից՝ դժվարացել են։

Հետևաբար, դուք պետք է սկսեք ծրագրավորման լեզուներ սովորել C լեզվով և առաջ շարժվեք այն հաջորդականությամբ, որով հայտնվում են C ընտանիքի լեզուները:

Նույնը վերաբերում է լեզուների նկարագրությանը: Տարբեր լեզուներ ունեն նույն, կամ ավելի փոքր, միավոր սեռերի շարք, քան C լեզուն: Տեսակների և նմուշների քանակը կարող է տարբերվել երկու ուղղություններով. C++-ն ավելի շատ տեսակներ ունի, քան C-ն, մինչդեռ JavaScript-ը՝ ավելի քիչ:

Առանձնահատուկ հիշատակման է արժանի MySQL լեզուն: Թվում է, թե ընդհանուր ոչինչ չկա, բայց նա հիանալի նկարագրված է Մատրյոշկայի կողմից, և նրա հետ ծանոթանալը դառնում է ավելի արագ և հեշտ: Ինչը կարևոր է՝ հաշվի առնելով դրա կարևորությունը համացանցի համար՝ ժամանակակից ծրագրավորման ճաշի ճանապարհը: Իսկ որտեղ կա MySQL, այնտեղ կան այլ SQL-ներ: Դե, բոլոր տեսակի Fortran-Pascal-Pythons-ը նույնպես նկարագրված է Մատրյոշկայի կողմից, հենց որ ձեռքը ընկնի:

Այսպիսով, մեզ մեծ բաներ են սպասում՝ C լեզվի կիրառական նկարագրություն և դրան հաջորդող լեզուների միասնական նկարագրություն: «Մեր նպատակները պարզ են, մեր խնդիրները՝ սահմանված։ Գործի եկեք, ընկերնե՛ր։ (բուռն, տեւական ծափահարություններ, որոնք վերածվում են օվացիաների։ Բոլորը ոտքի են կանգնում։)»։

Ձեր կարծիքները կլսվեն մեծ ուշադրությամբ, ձեր օգնությունը բնադրող տիկնիկների կայքի ստեղծման գործում կընդունվի մեծ երախտագիտությամբ։ Գրքի մասին ավելի ամբողջական տեղեկատվություն կա կայքում՝ խելամտորեն թաքնված Matryoshka C-ում։

Source: www.habr.com

Добавить комментарий