Cи++ хэлний товч түүх

Програмчлалын хэлнүүд бие биетэйгээ маш нягт уялдаатай хөгжиж ирсэн учир нэг хэлний хөгжлийг бусдаас нь салангид авч үзэх боломжгүй юм. Хамгийн анхны дээд түвшний хэл болох Фортран нь бусад бүх дээд түвшний хэлнүүдийн хөгжилд их бага ямар нэг хэмжээгээр нөлөөлсөн байдаг. Фортран (FORTRAN – FORmula TRANslating system – томъёог орчуулагч систем) нь 1957 онд IBM компани дээр шинжлэх ухааны тооцоо хийхэд зориулан зохиогдсон. Санах ойн хэдэн байтыг хамтад нь хувьсагчийн нэрээр төлөөлүүлэн харьцдаг ба програмын бүх хувьсагчид юу хадгалж байгаагаа илтгэх төрөлд хуваагддаг. Тухайлбал, програмд INTEGER K REAL P гэж “зарлагдсан” бол K нь бүхэл, P нь бутархай утга авах хувьсагчид болох ба K+1 ба P+1 гэсэн үйлдлүүд хоорондоо үндсээрээ ялгаатай машины коммандуудад хөрвүүлэгдэнэ. Фон Нейманы компьютер ямар ч өгөгдлийг ямар нэг бүхэл тоогоор (ө.х. битүүдын дарааллаар) дүрслэхийг шаардах ба бүхэл болон бутархай тоог санах ойд хадгалах дүрслэлүүд нь хоорондоо ялгаатай учраас тэр. Хэрэв Фортранд төрөл байхгүй байсан бол програм зохиогч маань хувьсагчид дээр үйлдэл хийх агшинд уг хувьсагчид хадгалагдаж буй “бүхэл тоог” бүхэл гэж үзэх үү эсвэл бутархай гэж үзэх үү гэдгийг шийдэж зохих коммандыг бичих хэрэгтэй болно. Мөн жишээ нь, санах ойд бүхэл тоо 4 байт, бутархай тоо 8 байт зай эзэлдэг байж болно. Энэ үед хэрэв програм зохиогч хайхрамжгүйгээр “бүхэл байх ёстой” хувьсагч дээр бутархай тооны үйлдэл гүйцэтгэсэн бол уг бүхэл тоогоор зогсохгүй түүний дараачийн 4 байт мөн хайхрамжгүй үйлдлийн золиос болно. Гэвч аз болоход Фортран төрөлтэй учраас ийм буруу үйлдэл хийх болгонд компилятор алдааг олж илтгэдэг. Хувьсагчийн төрөл хэмээх ойлголтыг оруулж ирснээр програм зохиогчийн эрх чөлөөг хязгаарлаж байгаа биш, харин түүнийг алдаагүй програм бичих, алдаагаа хялбар олох боломжийг олгож байгаа хэрэг юм.

Фортран нь хэдийгээр тоонуудтай ажиллахдаа маш сайн байсан боловч оролт гаралттай ажиллахдаа тийм ч сайн биш, том програмыг уншиж ойлгоход хүндрэлтэй, програмын текстийг бичих хэт явцуу дүрэмтэй зэрэг дутагдлуудтай байсан. Ерөнхийдөө Фортран хэл нь зүгээр л ассемблер дээрх програмуудад маш олон тохиолддог нь ажиглагдсан хэсэг бүлэг коммандуудыг бүлэглэн авч шинэ нэрнүүд өгөх замаар програмыг товчилж бичсэнтэй ялгаагүй зүйл байсан юм. Түүнд өөрийн гэсэн маяг найруулга, дэгжин чамин шинж байхгүй гэж хэлж болно. Фортраны дараахан 1958 онд зохиогдсон Алгол хэл (ALGOL – ALGOrithmic Language – алгоритмчлалын хэл) нь энэ дутагдлуудыг арилгасан бөгөөд өөрийгөө дууддаг дэд програм гэх мэт хэд хэдэн шинэ боломжийг бүрдүүлж өгсөн. Алгол нь алгоритмуудыг маш ойлгомжтойгоор илэрхийлж чаддаг, математикийн үүднээс бол их “дэгжин чамин” хэл юм. Гэвч Алгол-68 хэмээх дараачийн хувилбар нь хэт нүсэр болсон тул Паскаль гэх мэт жижиг хэлнүүдэд зайгаа тавж өгөх хэрэгтэй болсон аж. 1968 онд Никлаус Вирт анх оюутнуудад програмчлал заахад зориулан Паскаль хэлийг зохиосон нь сүүлдээ хамгийн өргөн тархсан хэлнүүдийн нэг болсон юм. Паскаль хэл нь тухайн үед өргөн хэрэглэгддэг байсан Фортран, Алгол болон Кобол хэлнүүдийн сайн чанаруудыг шүүн авч, муу чанаруудыг цэвэрлэсэн нь олонд түгэхэд нөлөөлсөн хэрэг. Паскаль хэл нь “заагч” гэгдэх төрлийг анх түрүүнд хэрэгжүүлсэн нь бөгөөд Си хэлний бүтцэд маш ихээр нөлөөлсөн хэл юм.

Си хэлний өвөг эцэг гэж болохоор хэл бол БСиПЛ (BCPL – Basic Combined Programming Language – програмчлалын нэгтгэсэн хэл) мөн. 1960-аад оны дундуур Массачуссетийн Технологийн Институтэд (МТИ) Кэмбрижээс айлчилж байсан Мартин Ричардс БСиПЛ хэлийг зохиожээ. БСиПЛ хэлний хөрвүүлэгчийн жижиг цөм ассемблер дээр бичигдсэн ба энэ цөмийг л шинэ машинд тохируулан өөрчилчихвөл БСиПЛ хэлний (БСиПЛ хэл дээр бичигдсэн) үлдсэн хэсгийг энэ цөмөө ашиглан шууд хөрвүүлэх боломжтой байсан нь түүнийг олон шинэ машинууд дээр тархахад нөлөөлсөн байна. Энэ хэлийг МТИ, Женерал Электрик, ба Белл лабораторийн (Bell labs, одоогийн AT&T Labs) хамтарсан Мултикс (Multics – олон “икс”) хэмээх үйлдлийн систем зохиох төсөлд хэрэглэж эхэлсэн бөгөөд 1969 он гэхэд уг төсөл нь хэрэгжүүлэхэд хэцүү хэтэрхий их зүйл амласан, зөвхөн хугацаа ихээр оройтож өндөр үнээр дуусах төсөл болох нь тодорхой болсон. Ингээд Белл лабораторийн Кен Томпсоноор удирдуулсан бүлэг судлаачид Мултиксаас хялбар бөгөөд хямд хувилбар хайж эхэлжээ. Энэ оролдлого эцэстээ Юникс (Unix – нэг “икс”) үйлдлийн системийг бий болгосон ба уг үйлдлийн системд зориулж БСиПЛ хэлийг Томпсон өөрчилж түүнийгээ Би (B – BCPL нэрний товч хэлбэр, эсвэл Томпсоны зохиосон өөр нэг хэл болох Bon гэдгийн товчлол) хэл хэмээн нэрийдэв. Би хэл нь төрөлгүй хэл, өөрөөр хэлбэл бүх өгөгдлийг бүхэл тоо гэж үздэг хэл байсан бөгөөд бутархай тоотой ажилладаг шинэ ПДП-11 компьютер Белл лабораторид ирнэ гэсэн сургаар Деннис Риччи 1971 оноос Би хэлийг сайжруулж эхэлжээ. Үүний үр дүнд бүхэл ба тэмдэгт, тэдгээрийн “цуврал” ба “заагч” төрөл бүхий ЭнБи (NB – New B – Шинэ Би) хэл бий болсон аж. Үүнээс илүү олон төрөл хэрэгжүүлэх шаардлага Риччийг Си (C – цагаан толгойн, эсвэл BCPL нэрэн дэх дарааллаар B-ийн дараачийн үсэг) хэлийг боловсруулахад хүргэсэн. 1973 он гэхэд Си хэлний үндсэн бүтэц тодорхой болсон ба 1973 оны зун Белл лабораторийн хэсэг судлаачид Юникс системийн цөмийг бүхэлд нь Си хэл дээр бичиж дуусгасан байна. Ингэснээр Си хэлний компилятор бүхий компьютерүүдэд Юникс системийг ашиглах боломжтой болсон бөгөөд энэ нь өөрийн ээлжинд Си хэлийг тархахад ихээхэн нөлөөлсөн байна. Энэ хэл нь системийн програм бичихэд зориулан зохиогдсон тул компьютерийн техник хангамжтай “шууд тулж ажилладаг”, Алголын бүлийн бусад хэлнүүдийг бодвол маш энгийн бүтэцтэй, баргийн алдааг хөрвүүлэгч “тоодоггүй”, өөрөөр хэлбэл “програм бичигчийн үргэлж зөв” хэмээх зарчмаар ямар ч байсан хөрвүүлэлтийг дуусгах гэж оролддог зэрэг онцлогуудтай. Эдгээр онцлогууд нь програм зохиогчид өргөн боломж, өндөр хариуцлагыг зэрэг олгодог юм. 1978 онд Риччи, Брайн Кернигантай хамтаар “Програмчлалын Си хэл” номыг бичсэн нь Си хэл гэж юу юм бэ гэдэгт хариулсан анхны баримт бичиг байжээ. Си хэлний асар хурдан тархалт ба хөгжилтийн улмаас 1982 он гэхэд уг хэлийг стандартчилах хэрэгтэй нь тодорхой болсон ба 1983 оноос Америкийн Үндэсний Стандартын Хорооноос (ANSI) X3J11 нэртэй хэсэг байгуулагдан ажиллаж 1989 онд Си хэлний Америкийн стандартыг баталсан. Дараахан нь энэ стандартыг Олон Улсын Стандартын Байгууллага ISO/IEC 9899-1990 нэрийн дор хүлээн зөвшөөрсөн байна.

Алгол хэлийг Америкт гарч ирсний дараахан 1967 онд Норвегийн зэвсэгт хүчний компьютерийн төвийн ажилтан Кристен Нигаард ба Оле-Иоган Даал нар Симула хэлний Симула-67 (Simula67) хувилбарыг зохиов. Симула нь Алгол дээр үндэслэгдсэн, системийн симуляци, загварчлал хийхэд зориулагдсан хэл юм. Системийн загварчлал гэдэгт, жишээлбэл, онгоцны буудлын талбай дээрх нисэх онгоцнуудын хөдөлгөөнийг загварчлах байж болно. Симула хэлэнд ямар ч системийг хоорондоо харилцан үйлчлэгч тусгаар хэсгүүдийн цогц хэмээн үзнэ. Эдгээр тусгаар хэсэг бүр нь програмын “объект” болох бөгөөд програм зохиогчийн үндсэн үүрэг нь системд ямар ямар объектууд байх ёстойг шийдэж тэдгээрийн бусадтайгаа харилцан үйлчлэлцэх шинж чанаруудыг тодорхойлж өгөх явдал юм. Нэгэнт объектууд тодорхойлогдсон бол Симулагийн “хугацаа урсаж” эхлэх ба системийн объектууд яаж хоорондоо харилцан үйлчлэлцэж, яаж өөрчлөгдөж байгааг “гаднаас нь” ажиглах боломжтой. Дээрх онгоцны буудлын жишээнд системийн объектууд нь талбай дахь нисэх онгоцнууд, удирдлагын цамхаг, нар, салхи зэрэг байж болно. Тэгвэл програм зохиогч жишээ нь, удирдлагын цамхагийн “4-р зам дээр оч” гэсэн коммандад нисэх онгоц ямар хариу үйлдэл үзүүлэх, салхины чиглэл ба хурд удирдлагын цамхгийн шийдвэрт яаж нөлөөлөх вэ гэдгийг тодорхойлох хэрэгтэй гэсэн үг.

1978 онд Кембриж дэх компьютерийн лабораторид Бьярн Страуструп компьютерийн сүлжээг загварчлах судалгааны ажлыг эхлэв. Страуструпын хэлснээр “хамгийн анхны жинхэнэ объект хандалтат хэл” болох Симула нь түүний зорилгод яг нийцэхээр байсан боловч ганц дутагдал нь хэтэрхий удаан байсан тул тэрбээр шинэ объект хандалтат хэл зохиохоор шийджээ. Си хэл нь түүний хэлснээр “олон чадвартай, товч тодорхой, харьцангуй доод түвшний”, “системийн програмчлалд маш тохиромжтой”, “хаана ч юун дээр ч ажилладаг”, бөгөөд “Юникс програмчлалын орчинд зохицсон” тул Страуструп шинэ хэлнийхээ суурь болгож Си хэлийг сонгосон гэдэг. Ингээд Си ба Симула хэлнүүдийн нэгдэл болох “Ангит Си” нэртэй Си хэлний нэгэн хувилбарыг 1980 онд Страуструп Белл лабораторид ажиллаж байх үедээ гаргажээ. “Ангит Си” явсаар 1983 онд (Рик Масситтийн бодож олсон нэр) Си++ нэртэй болсон ба энэ нэр Си ба Си++ хэлнүүдэд хоёуланд нь “Си-гийн дараачийн” гэсэн утга илэрхийлдэг ажээ. Си++ хэлийг үндсэн гурван зорилгыг хэрэгжүүлдэг гэж үзэж болно. Үүнд, сайжруулсан Си, өгөгдлийн хийсвэр төрөл, ба объект хандалтат програмчлал юм. Си хэл дээр бичигдсэн програмыг Си++ хэлний хөрвүүлэгчээр хөрвүүлж болно. Гэвч Си++ хэл нь Си-г бодвол илүү “хатуу” хэлзүйн дүрмүүдтэй учир Си хөрвүүлэгчээр ямар ч асуудалгүй хөрвөж байсан програм Си++ хөрвүүлэгчээр хөрвөхдөө олон анхааруулга, зарим тохиолдолд алдаа гаргаж болзошгүй. Ингэснээр програм ажиллах үед гарч болзошгүй олон алдаанаас сэргийлэх боломжтой. Өгөгдлийн хийсвэр төрлийг хэрэгжүүлснээр програмд хэрэглэгдэж буй нарийн нийлмэл өгөгдлүүдтэй харьцах нь Си хэлний үндсэн төрлийн өгөгдлүүдтэй харьцахтай өнгөн дээрээ яг адил байхаар програмчлах боломжийг олгодог. Энэ нь анги хэмээх хэрэглэгч шинээр өөрийн төрлийг тодорхойлох, үүнчлэн “+”, “-“, “*”, “/” гэх мэт үйлдлүүдийг энэ шинэ төрөлдөө тохируулан өргөтгөн тодорхойлох механизмуудын тусламжтай хэрэгждэг. Хоорондоо төстэй олон төрлүүдийн гадаад байдал адил тул эдгээр төрлүүд дээр ажиллах боломжтой кодуудыг ганц ерөнхий эх загварыг үндэслэн хөрвүүлэгч нь өөрөө автоматаар генерацлаж (гаргаж авч) болдог. Си++ хэлэнд ийм үйл ажиллагааг хэвүүд (templates) буюу параметрчлэгдсэн төрлүүдийг ашиглан биелүүлнэ. Ингэснээр өргөтгөсөн програмчлал (generic programming) хэмээгдэх объект хандалтат програмчлалын дараагийн шатыг хэрэгжүүлэх боломжтой болсон. Объект хандалтат програмчлалыг Си++ хэлэнд үндсэндээ өгөгдлийн хийсвэр төрлүүд ба тэдгээрийн хоорондох удамшлын харьцааг хэрэглэн гүйцэтгэдэг. Үүнд найзын харьцаа, ангиудын удамшил, виртуаль функцүүд, нэрийн огторгуй, онцгой тохиолдол, хувьсагчийн төрлийг динамикаар тодорхойлох зэрэг олон ойлголтууд хамрагдана.

Женерал Электрик компанийн Нью Йорк дахь судалгааны төвд ажиллаж байсан Александр Степанов ихэнх алгоритмууд өгөгдлийн бүтцийн дотоод зохион байгуулалтаас хамаардаггүй, зөвхөн түүний гадаад орчинтой харьцаж буй гадаргуугийн цөөн хэдэн шинж чанаруудаас хамаардаг болохыг 70-аад оны сүүлчээр ажигласан байна. Тэгэхээр програмд хэрэглэгдэж буй өгөгдлийн бүтцийг өөрчлөх болгонд уг өгөгдөлтэй ажиллах алгоритмуудыг дахин дахин бичих шаардлагагүй. Маш олон туршилт хийсний үр дүнд Степанов ажиллах хурданд нь муугаар нөлөөлөхгүйгээр алгоритмуудыг ингэж хийсвэрлэх боломжтой болохыг олж тогтоов. Ийм алгоритмуудыг өргөтгөсөн алгоритмууд (generic algorithms), эдгээрийг ашиглан програм бичих арга зүйг өргөтгөсөн програмчлал гэх болсон. 1987 он гэхэд Степанов бээр Тектон, Лисп, Ада, болон Си++ хэл дээр өргөтгөсөн алгоритмуудын санг бичиж дуусгасан боловч төдийлэн амжилт олсонгүй. Тухайлбал Си++ хэлний ангиудын удамшил өргөтгөсөн алгоритмуудыг хэрэгжүүлэхэд хэтэрхий явцуу болох нь мэдэгдсэн. Энэ байдал Страуструпыг ангийн болон функцийн хэвүүдийг Си++ хэлэнд оруулахад нөлөөлсөн бөгөөд 1992 оноос Степанов найман хүнтэй бүлгийг толгойлон Хьюлетт Паккард (Hewlett Packard) компанийн лабораторид Си++ хэлний хэвүүдийг ашиглан өргөтгөсөн алгоритмуудын сан бичих төслийг эхэлжээ. Төслийн орон тоо цөөрсөөр сүүлдээ Степанов ба Менг Ли хоёул үлдэж цөхрөлтгүй ажилласаар 1995 он гэхэд Стандарт Хэвүүдийн Санг (СХС, STL – Standard Template Library эсвэл STepanov and Lee) бичиж дуусгасан нь (үл ялиг өөрчлөлттэйгөөр) Си++ хэлний Стандарт Сангийн бүрэлдэхүүнд орсон юм. Си++ хэлний Стандарт Санд энэхүү сангаас гадна Си хэлний стандарт сан болон оролт гаралтын стандарт сан багтдаг.

1989 онд Америкийн Үндэсний Стандартын Хороо NCITS/X3J16 нэртэй хэсгийг Си++ хэлний Америкийн стандартыг гаргах зорилгоор байгуулав. Хоёр жилийн дараа 1991 онд Олон Улсын Стандартын Байгууллагаас JTC1/SC22/WG14 нэртэй хэсэг Си++ хэлний олон улсын стандартыг үүсгэх зорилгоор томилогдсон. Үүнээс хойш хоёр хэсэг нэгдэн ажиллаж, 1998 онд Си++ хэлний олон улсын стандартыг ISO/IEC 14882-1998 нэрийн дор эцэслэн баталжээ. Энэ стандартыг АНУ, Их Британи, Герман болон бусад олон улс гүрнүүд өөрсдийн үндэсний стандарт мэтээр өвлөн авч баталсан байна.

Advertisements
This entry was posted in C++ and tagged , , , , , , , , , , . Bookmark the permalink.

3 Responses to Cи++ хэлний товч түүх

  1. zogi хэлдэг:

    Uneheer unshuushtai bichleg bna. Bayarllaa. Torloh hel deeree unshihleer goyo yumaa.

  2. baldan хэлдэг:

    Yamar hel torlodog yum be zagas bariya

  3. болормөө хэлдэг:

    сайн байнуу с++ стандарт алдаа хэлж тус болооч 15 ийг

Хариулт үлдээх

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Өөрчлөх )

Twitter picture

You are commenting using your Twitter account. Log Out / Өөрчлөх )

Facebook photo

You are commenting using your Facebook account. Log Out / Өөрчлөх )

Google+ photo

You are commenting using your Google+ account. Log Out / Өөрчлөх )

Connecting to %s