C++

**C++** — daniyalı kompyuter ilimpazı Byarn Straustrup tárepinen jaratılǵan joqarı dárejeli, ulıwma maqsetli programmalastırıw tili. Dáslep 1985-jılı C programmalastırıw tiliniń keńeytpesi retinde obyektke baǵdarlanǵan programmalastırıw (OBP) imkaniyatların qostı, sonnan keyin waqıt ótiwi menen jáne de kóp OBP hám basqa imkaniyatlardı qosıp, ádewir keńeydi; 1997/C++98 standartlastırıwınan baslap, C++ mikrokompyuterler sıyaqlı sistemalar ushın yaki Linux yamasa Windows sıyaqlı operaciyalıq sistemalardı jaratıw ushın tómen dárejeli yadtı manipulyaciyalaw qurallarına qosımsha retinde funkcional imkaniyatlardı qostı, hátte keyinirek ulıwma programmalastırıw (shablonlar arqalı) sıyaqlı imkaniyatlar da payda boldı. C++ ádette kompilyaciyalanatuǵın til retinde ámelge asırıladı hám kóp islep shıǵarıwshılar, sonıń ishinde Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle hám IBM C++ kompilyatorların usınadı.

C++ sistemalı programmalastırıw hám ornatılǵan, resursları sheklengen programmalıq támiynat hám úlken sistemalardı esapqa alıp, onıń dizaynınıń tiykarǵı ózgeshelikleri retinde islew ónimdarlıǵı, nátiyjeliligi hám qollanıw beyimliligi menen joybarlanǵan. C++ sonday-aq, basqa da kóp tarawlarda paydalı bolıp tabıldı, onıń tiykarǵı kúshli tárepleri programmalıq támiynat infrastrukturası hám resursları sheklengen qosımshalar, sonıń ishinde kompyuter qosımshaları, video oyınlar, serverler (mısalı, elektron kommerciya, veb-izlew yaki maǵlıwmatlar bazası) hám ónimdarlıǵı áhmiyetli qosımshalar (mısalı, telefon kommutatorları yaki kosmos zondları) bolıp tabıladı.

C++ Xalıqaralıq Standartlastırıw Shólkemi (ISO) tárepinen standartlastırılǵan, eń sońǵı standart versiyası 2024-jıl oktyabr ayında ISO/IEC 14882:2024 (rásmiy emes túrde C++23 dep ataladı) retinde ISO tárepinen ratifikaciyalanǵan hám járiyalanǵan. C++ programmalastırıw tili dáslep 1998-jılı ISO/IEC 14882:1998 retinde standartlastırılǵan, soń oǵan C++03, C++11, C++14, C++17 hám C++20 standartları menen ózgerisler kirgizilgen. Házirgi C++23 standartı olardıń ornın jańa imkaniyatlar hám keńeytilgen standart kitapxana menen basadı. 1998-jılǵı dáslepki standartlastırıwdan aldın, C++ 1979-jıldan baslap Bell Labs kompaniyasında Straustrup tárepinen C tiliniń keńeytpesi retinde islep shıǵılǵan; ol C tiline uqsas, biraq programmanı shólkemlestiriw ushın joqarı dárejeli imkaniyatlardı usınatuǵın nátiyjeli hám qolaylı tildi qálegen. 2012-jıldan baslap, C++ úsh jıllıq shıǵarıw kestesinde bolıp, C++26 keyingi jobalastırılǵan standart bolıp esaplanadı.

## Tariyxı

1979-jılı daniyalı kompyuter ilimpazı Byarn Straustrup C++ tiliniń baslawshısı bolǵan «Klasslı C» ústinde isley basladı. Jańa tildi jaratıw motivaciyası Straustruptıń PhD dissertaciyası ushın programmalastırıw tájiriybesinen kelip shıqqan. Straustrup Simula tiliniń úlken programmalıq támiynattı islep shıǵıw ushın júdá paydalı imkaniyatları bar ekenin, biraq bul tildiń ámeliy qollanıw ushın júdá áste ekenin, al BCPL tez, biraq úlken programmalıq támiynattı islep shıǵıw ushın dım tómen dárejeli ekenin anıqladı. Straustrup AT&T Bell Labs kompaniyasında isley baslaǵanda, ol bólistirilgen esaplawlarǵa baylanıslı UNIX yadrosın analizlew mashqalasına ushıradı. Óziniń PhD tájiriybesin eslep, Straustrup C tilin Simula sıyaqlı imkaniyatlar menen jetilistiriwge kiristi. C tili onıń ulıwma maqsetli, tez, portativ hám keńnen qollanılatuǵını ushın tańlandı. C hám Simula tilleriniń tásirinen tısqarı, bul jańa tilge ALGOL 68, Ada, CLU hám ML sıyaqlı basqa tiller de tásir etti.

Dáslep, Straustruptıń «Klasslı C» tili C kompilyatorına, Cpre-ge, klasslar, tuwındı klasslar, qatań tiplestiriw, ishki funkciyalar (inlining) hám standart argumentler sıyaqlı imkaniyatlardı qostı.

1982-jılı Straustrup «Klasslı C» tiliniń miyrasxorın islep shıǵıwdı basladı, onı bir neshe basqa atamalardan keyin «C++» dep atadı (++ C tilindegi inkrement operatorı bolıp esaplanadı). Jańa imkaniyatlar qosıldı, sonıń ishinde virtual funkciyalar, funkciya hám operatorlardı qayta júklew, siltemeler, konstantalar, tipke qáwipsiz erkin yadtı bólistiriw (new/delete), jaqsılanǵan tipti tekseriw hám eki qıya sızıq (//) penen jazılatuǵın BCPL stilindegi bir qatarlı kommentariyalar. Sonıń menen birge, Straustrup C++ ushın jańa, óz aldına kompilyator Cfront-tı islep shıqtı.

1984-jılı Straustrup birinshi aǵımlı kirgiziw/shıǵarıw kitapxanasın ámelge asırdı. Atalǵan shıǵarıw funkciyasınıń ornına shıǵarıw operatorın usınıw ideyasın Dag MakIlroy usınǵan (ol burın Unix kanalların usınǵan edi).

1985-jılı «C++ programmalastırıw tili» kitabınıń birinshi basılımı shıǵarıldı, bul kitap sol waqıtta rásmiy standart bolmaǵanlıqtan, til ushın tiykarǵı derek boldı. C++ tiliniń birinshi kommerciyalıq realizaciyası sol jıldıń oktyabr ayında shıǵarıldı.

1989-jılı C++ 2.0 shıǵarıldı, onıń izinen 1991-jılı «C++ programmalastırıw tili» kitabınıń jańartılǵan ekinshi basılımı shıqtı. 2.0 versiyasındaǵı jańa imkaniyatlarǵa kóp miyrasxorlıq, abstrakt klasslar, statikalıq klass aǵzaları funkciyaları, konstantalıq klass aǵzaları funkciyaları hám qorǵalǵan aǵzalar kirdi. 1990-jılı «Annotaciyalanǵan C++ maǵlıwmatnaması» járiyalandı. Bul jumıs keleshektegi standart ushın tiykar boldı. Keyinirek qosılǵan imkaniyatlarǵa shablonlar, ayrıqsha jaǵdaylar, atamalar keńisligi, jańa túrlendiriwler hám logikalıq tipi kirdi.

1998-jılı C++98 shıǵarılıp, tildi standartlastırdı, al 2003-jılı kishi jańalaw (C++03) shıǵarıldı.

C++98 den keyin, C++ salıstırmalı túrde áste rawajlandı, tek 2011-jılı C++11 standartı shıǵarılǵanǵa shekem. Bul standart kóp sanlı jańa imkaniyatlardı qostı, standart kitapxananı jáne de keńeytti hám C++ baǵdarlamashılarına kóbirek qolaylıqlar usındı. 2014-jıldıń dekabr ayında shıǵarılǵan kishi C++14 jańalawınan keyin, C++17 de túrli jańa qosımshalar kirgizildi. 2020-jıldıń fevral ayında juwmaqlanǵannan keyin, C++20 standartınıń joybarı 2020-jıl 4-sentyabrde maqullandı hám 2020-jıl 15-dekabrde rásmiy túrde járiyalandı.

2018-jıl 3-yanvarda Straustrup «C++ programmalastırıw tilin konceptuallastırǵanı hám islep shıqqanı ushın» injeneriya tarawındaǵı Charlz Stark Dreyper sıylıǵınıń 2018-jılǵı jeńimpazı dep járiyalandı.

2022-jıl dekabr ayında C++ TIOBE indeksinde úshinshi orındı iyelep, indeks tariyxında birinshi ret Java-dan ozdı. 2024-jıl noyabr ayınıń maǵlıwmatlarına sáykes, bul til Python-nan keyin ekinshi orında, al Java úshinshi orında.

2025-jıl mart ayında Straustrup til birlespesin onı qorǵawǵa shaqırdı. Bul til yadtı qol menen basqarıwǵa imkaniyat beretuǵınlıqtan, baǵdarlamashı tárepinen abaysızda qáte qollanılǵanda, programmalarǵa buferdiń tolıp ketiwi sıyaqlı qáwipsizlik qáwiplerin payda etetuǵın qáteler kirgiziliwi múmkin.

### Etimologiyası
Straustruptıń pikirinshe, «bul atama C tilinen evolyuciyalıq ózgerislerdiń tábiyatın kórsetedi». Bul atama Rik Maskittige tiyisli (1983-jıldıń ortası) hám birinshi ret 1983-jılı dekabrde qollanılǵan. 1992-jılı Maskittiden rásmiy emes túrde atama haqqında soralǵanda, ol onıń házil retinde berilgenin aytqan. Atama C tiliniń `++` operatorınan (ol ózgeriwshiniń mánisin arttıradı) hám jetilistirilgen kompyuter programmasın kórsetiw ushın «+» belgisin qollanıwdıń keń tarqalǵan atama konvenciyasınan kelip shıqqan.

C++ tilin islep shıǵıw dáwirinde, ol óziniń sońǵı atamasın alǵanǵa shekem «jańa C» hám «Klasslı C» dep atalǵan.

### Filosofiyası
C++ tiliniń pútkil ómiri dawamında, onıń rawajlanıwı hám evolyuciyası bir qatar principlerge tiykarlanǵan:

* Ol haqıyqıy máseleler menen basqarılıwı kerek hám onıń qásiyetleri real dúnya programmalarında dárhal paydalı bolıwı tiyis.
* Hárbir qásiyet ámelge asırılatuǵın bolıwı kerek (bunı islewdiń anıq jolı bolıwı kerek).
* Baǵdarlamashılar ózleriniń programmalastırıw stilin erkin tańlawı kerek, hám bul stil C++ tárepinen tolıq qollap-quwatlanıwı tiyis.
* Paydalı qásiyetke ruqsat beriw C++ tiliniń hár qanday múmkin bolǵan qáte qollanılıwınıń aldın alıwdan áhmiyetlirek.
* Ol programmalardı óz aldına, anıq belgilengen bóleklerge shólkemlestiriw ushın imkaniyatlar beriwi kerek, hám óz aldına islep shıǵılǵan bóleklerdi birlestiriw ushın imkaniyatlar beriwi tiyis.
* Tipler sistemasın jasırın buzıwlarǵa jol qoyılmaydı (biraq anıq buzıwlarǵa ruqsat etiledi; yaǵnıy, baǵdarlamashı tárepinen anıq soralǵanlarǵa).
* Paydalanıwshılar tárepinen jaratılǵan tipler ornatılǵan tipler sıyaqlı birdey qollap-quwatlawǵa hám ónimdarlıqqa iye bolıwı kerek.
* Paydalanılmaǵan qásiyetler jaratılǵan orınlanıwshı fayllarǵa unamsız tásir etpewi kerek (mısalı, tómen ónimdarlıqta).
* C++ tilinen tómen til bolmawı kerek (assembler tilinen basqa).
* C++ basqa bar bolǵan programmalastırıw tilleri menen birge islewi kerek, óziniń ayrıqsha hám úylesimsiz programmalastırıw ortalıǵın rawajlandırıwdıń ornına.
* Eger baǵdarlamashınıń maqseti belgisiz bolsa, baǵdarlamashıǵa qol menen basqarıwdı usınıw arqalı onı kórsetiwge ruqsat beriliwi kerek.

### Standartlastırıw

C++ tili JTC1/SC22/WG21 dep atalatuǵın ISO jumıs toparı tárepinen standartlastırılǵan. Jumıs toparı hár jılı úsh háptelik ushırasıwlar ótkeredi. Házirgi waqıtqa shekem ol C++ standartınıń jeti redakciyasın shıǵardı hám házirgi waqıtta kelesi redakciya, yaǵnıy C++26 ústinde islemekte.

1998-jılı ISO jumıs toparı C++ tilin birinshi ret ISO/IEC 14882:1998 retinde standartlastırdı, ol rásmiy emes túrde C++98 dep ataladı. 2003-jılı ol C++ standartınıń ISO/IEC 14882:2003 dep atalatuǵın jańa versiyasın shıǵardı, ol C++98 de anıqlanǵan mashqalalardı dúzetti.

Standarttıń kelesi úlken redakciyası rásmiy emes túrde «C++0x» dep ataldı, biraq ol 2011-jılǵa shekem shıǵarılmadı.  C++11 (14882:2011) tiykarǵı tilge de, standart kitapxanaǵa da kóp qosımshalardı kirgizdi.

2014-jılı C++14 (C++1y dep te ataladı) tiykarınan qátelerdi dúzetiw hám kishi jetilistiriwlerdi óz ishine alǵan C++11 ge kishi keńeytpe retinde shıǵarıldı. Xalıqaralıq standart joybarı boyınsha dawıs beriw proceduraları 2014-jıldıń avgust ayınıń ortalarında juwmaqlandı.

C++14 ten keyin, rásmiy emes túrde C++1z dep atalatuǵın úlken redakciya - C++17, ISO C++ komiteti tárepinen 2017-jıldıń iyul ayınıń ortalarında tamamlandı hám 2017-jılı dekabrde maqullandı hám basıp shıǵarıldı.

Standartlastırıw procesiniń bir bólimi retinde, ISO sonday-aq texnikalıq esabatlardı hám specifikaciyalardı da járiyalaydı:

* ISO/IEC TR 18015:2006 C++ tilin ornatılǵan sistemalarda qollanıw hám C++ tili menen kitapxana ózgesheliklerin ónimdarlıqqa tásiri haqqında,
* ISO/IEC TR 19768:2007 (C++ Texnikalıq Esabatı 1 dep te belgili) tiykarınan C++11 ge integraciyalanǵan kitapxana keńeytpeleri haqqında,
* ISO/IEC TR 29124:2010 C++17 ge integraciyalanǵan arnawlı matematikalıq funkciyalar haqqında,
* ISO/IEC TR 24733:2011 onlıq útirli arifmetika haqqında,
* ISO/IEC TS 18822:2015 C++17 ge integraciyalanǵan standart fayl sisteması kitapxanası haqqında,
* ISO/IEC TS 19570:2015 C++17 ge integraciyalanǵan standart kitapxana algoritmleriniń parallel versiyaları haqqında,
* ISO/IEC TS 19841:2015 programmalıq támiynat tranzakciyalıq yadı haqqında,
* ISO/IEC TS 19568:2015 ayırımları C++17 ge integraciyalanǵan kitapxana keńeytpeleriniń jańa toplamı haqqında,
* ISO/IEC TS 19217:2015 C++20 ǵa integraciyalanǵan C++ koncepciyaları haqqında,
* ISO/IEC TS 19571:2016 ayırımları C++20 ǵa integraciyalanǵan parallellik ushın kitapxana keńeytpeleri haqqında,
* ISO/IEC TS 19568:2017 ulıwma maqsetli kitapxana keńeytpeleriniń jańa toplamı haqqında,
* ISO/IEC TS 21425:2017 C++20 ǵa integraciyalanǵan diapazonlar ushın kitapxana keńeytpeleri haqqında,
* ISO/IEC TS 22277:2017 C++20 ǵa integraciyalanǵan korutinler (qosımsha baǵdarlamalar) haqqında,
* ISO/IEC TS 19216:2018 tarmaq kitapxanası haqqında,
* ISO/IEC TS 21544:2018 C++20 ǵa integraciyalanǵan moduller haqqında,
* ISO/IEC TS 19570:2018 parallelizm ushın kitapxana keńeytpeleriniń jańa toplamı haqqında,
* ISO/IEC TS 23619:2021 refleksiv programmalastırıw (sáwleleniw) ushın jańa keńeytpeler haqqında,
* ISO/IEC TS 9922:2024 parallellik keńeytpeleriniń jańa toplamı haqqında, hám
* ISO/IEC TS 19568:2024 kitapxana keńeytpeleriniń taǵı bir jańa toplamı haqqında.

Kóbirek texnikalıq specifikaciyalar islep shıǵılmaqta hám maqullawdı kútpekte.

## Til
C++ tiliniń eki tiykarǵı komponentti bar: tiykarınan C ishki toplamı tárepinen usınılatuǵın apparatlıq támiynat ózgeshelikleriniń tikkeley sáykesligi hám sol sáykesliklerge tiykarlanǵan nol-qosımsha shıǵınlı abstrakciyalar. Straustrup C++ tilin «nátiyjeli hám kórkem abstrakciyalardı qurıw hám qollanıw ushın [arnalǵan] jeńil salmaqlı abstrakciyalıq programmalastırıw tili» dep súwretleydi; hám «apparatlıq támiynatqa kiriwdi de, abstrakciyanı da usınıw C++ tiliniń tiykarı bolıp tabıladı. Bunı nátiyjeli orınlaw onı basqa tillerden ajıratıp turadı».

C++ tili C sintaksisiniń kópshilik bólegin miyras etip alǵan. C standartına sáykes keletuǵın "Hello world" programması, sonday-aq jaramlı C++ "Hello world" programması bolıp tabıladı. Tómende standart shıǵarıwǵa xabar jazıw ushın C++ standart kitapxanasınıń aǵım imkaniyatın qollanatuǵın Byarn Straustruptıń "Hello world" programmasınıń versiyası keltirilgen:
```cpp
#include <iostream>

int main()
{
    std::cout << "Hello, world!\n";
}
```


## Standart kitapxana

C++ standartı eki bólimnen ibarat: tiykarǵı til hám standart kitapxana. C++ baǵdarlamashıları sońǵısın C++ tiliniń hárbir úlken implementaciyasında kútedi; ol agregat tiplerdi (vektorlar, dizimler, kartalar, toplamlar, gezekler, stekler, massivler, kortejler), algoritmlerdi (tabıw, hár biri ushın, binar izlew, tosınnan aralastırıw hám t.b.), kirgiziw/shıǵarıw quralların (iostream, konsoldan hám fayllardan oqıw hám jazıw ushın), fayl sisteması kitapxanasın, lokalizaciyanı qollap-quwatlawdı, yadtı avtomat túrde basqarıw ushın aqıllı kórsetkishlerdi, turaqlı ańlatpalardı qollap-quwatlawdı, kóp aǵımlı kitapxananı, atomlıq operaciyalardı qollap-quwatlawdı (hesh qanday sırtqı sinxronizaciyasız bir waqıttıń ózinde eń kóbi bir aǵım tárepinen ózgeriwshini oqıwǵa yamasa jazıwǵa imkaniyat beredi), waqıt utilitlerin (ólshew, aǵımdaǵı waqıttı alıw hám t.b.), C++ ózgesheliklerin qolanbaytuǵın qáteler haqqında xabar beriwdi C++ ózgesheliklerine aylandırıw sistemasın, tosınnan sanlar generatorın hám C standartı kitapxanasınıń sál ózgerilgen versiyasın (onı C++ tipler sistemasına sáykes keltiriw ushın) óz ishine aladı.

C++ standart kitapxanasınıń dizaynı, C standart kitapxanası sıyaqlı, minimalistik bolıp, tek programmalastırıw ushın tiykarǵı ózgesheliklerdi óz ishine aladı, Java standart kitapxanası yamasa C# standart kitapxanası tárepinen usınılatuǵın kópshilik qánigelestirilgen ózgesheliklerge iye emes. Kóbirek ózgeshelikler ushın, standart kitapxananı tolıqtırıw maqsetinde qosımsha imkaniyatlardı usınatuǵın Boost kitapxanaları hám POCO C++ kitapxanaları sıyaqlı ayırım úshinshi tárep kitapxanaları qollanılıwı múmkin.

C++ kitapxanasınıń úlken bólegi Standart shablon kitapxanasına (STL) tiykarlanǵan. STL tárepinen usınılǵan paydalı qurallarǵa obektler toplamları retinde konteynerler (mısalı, vektorlar hám dizimler), konteynerlerge massiv sıyaqlı kiriwdi támiyinleytuǵın iteratorlar hám izlew hám sortlaw sıyaqlı operaciyalardı orınlaytuǵın algoritmler kiredi.

Sonıń menen bir qatarda, (multi)kartalar (associativ massivler) hám (multi)toplamlar usınılǵan, olardıń barlıǵı úylesimli interfeyslerdi eksportlaydı. Sonlıqtan, shablonlardı qollanıp, hár qanday konteyner menen yamasa iteratorlar menen belgilengen hár qanday izbe-izlikte isleytuǵın ulıwma algoritmlerdi jazıw múmkin.

C tilindegidey, kitapxananıń ózgesheliklerine standart temanı (baslama faylın) qosıw ushın `#include` direktivasın qollanıw arqalı kiriwge boladı. C++ standart kitapxanası 105 standart temanı (baslama faylın) usınadı, olardıń 27 si gónergen. C++20 da modullerdiń kirgiziliwi menen bul temalarǵa `import` arqalı kiriwge boladı, al C++23 te pútkil standart kitapxananı endi tikkeley modul retinde `import std;` arqalı importlaw múmkin. Házirgi waqıtta, C++ standart kitapxanası eki moduldi usınadı: `std` hám `std.compat` (C standart kitapxanasınıń imkaniyatların global atlar keńisligine eksportlaytuǵın `std` ushın úylesimlilik moduli).

Standart óziniń ishine Aleksandr Stepanov tárepinen dáslepki ret islep shıǵılǵan STL-di óz ishine aladı, ol kóp jıllar dawamında ulıwma algoritmler hám konteynerler menen tájiriybe ótkergen. Ol C++ penen isley baslaǵanda, aqırı `inlining` (kodtı ornatıw) hám funkciya kórsetkishleriniń ornına kompilyaciya waqtında baylanıstırıw sıyaqlı C++ ózgeshelikleriniń arqasında, mısalı, C standart kitapxanasınıń `qsort` funkciyasınan da jaqsıraq isleytuǵın ulıwma algoritmlerdi (mısalı, STL sortlaw) jaratıw múmkin bolǵan tildi taptı. Standartta ol «STL» dep atalmaydı, sebebi ol tek standart kitapxananıń bir bólegi bolıp tabıladı, biraq bul termin onı standart kitapxananıń qalǵan bóleginen (kirgiziw/shıǵarıw aǵımları, xalıqaralıqlastırıw, diagnostika, C kitapxanasınıń ishki toplamı, hám t.b.) ajıratıw ushın ele de keńnen qollanıladı.

Kóplegen C++ kompilyatorları, hám barlıq tiykarǵıları, C++ standart kitapxanasınıń standartlarǵa sáykes implementaciyasın usınadı.

## C++ tiykarǵı kórsetpeleri
C++ Core Guidelines – bul C++ tiń avtorı Byarn Straustrup hám C++ ISO Jumıs toparınıń jetekshisi hám baslıǵı Gerb Satter basshılıǵındaǵı baslama bolıp, baǵdarlamashılarǵa C++11 hám onnan jańa til standartları ushın eń jaqsı ámeliyatlardı qollanıp, 'Zamanagóy C++' jazıwǵa járdem beriwge hám kompilyatorlar hám statikalıq tekseriw quralların islep shıǵıwshılarǵa jaman programmalastırıw ámeliyatların anıqlaw ushın qaǵıydalar jaratıwǵa járdemlesiwge baǵdarlanǵan.

Tiykarǵı maqset – tip hám resurslar qáwipsizligin támiyinleytuǵın C++ kodın nátiyjeli hám izbe-iz jazıw.

Core Guidelines CPPCon 2015 konferenciyasınıń ashılıw bayanatında járiyalandı.

Kórsetpeler Guideline Support Library (GSL) menen birge usınıladı, bul Core Guidelines-tı ámelge asırıw ushın tek tema fayllarınan ibarat tipler hám funkciyalar kitapxanası hám Kórsetpe qaǵıydaların orınlawdı qadaǵalaytuǵın statikalıq tekseriw quralları.

## Úylesimlilik
Kompilyator islep shıǵarıwshılarına kóbirek erkinlik beriw ushın, C++ standartları komiteti atamalardı ózgertiw, ózgesheliklerdi qayta islew hám basqa da implementaciyaǵa tán qásiyetlerdiń orınlanıwın belgilemewge sheshim qabıl etti. Bul sheshimniń unamsız tárepi – hár qıylı kompilyatorlar tárepinen islep shıǵarılǵan obekt kodınıń úylesimsiz bolıwı kútiledi. Degen menen, belgili bir mashinalar yamasa operaciyalıq sistemalar ushın kompilyatorlardı standartlastırıwǵa háreketler bar. Mısalı, Itanium C++ ABI (atına qaramastan) processorǵa ǵárezsiz hám GCC hám Clang tárepinen ámelge asırılǵan.

### C tili menen
C++ kóbinese C tiliniń ústingi toplamı dep esaplanadı, biraq bul qatań túrde durıs emes. Kóplegen C kodın C++ te durıs kompilyaciyalanatuǵın etip ańsat keltiriw múmkin, biraq ayırım jaramlı C kodın C++ te jaramsız etetuǵın yamasa basqasha islewine sebep bolatuǵın birneshe ayırmashılıqlar bar. Mısalı, C tili `void` tan basqa kórsetkish tiplerine jasırın túrlendiriwge ruqsat beredi, biraq C++ (tip qáwipsizligi sebepleri boyınsha) ruqsat bermeydi. Sonday-aq, C++ `new` hám `class` sıyaqlı kóp jańa gilt sózlerdi anıqlaydı, olar C programmasında identifikatorlar (mısalı, ózgeriwshi atamaları) retinde qollanılıwı múmkin.

Ayırım úylesimsizlikler C standartınıń 1999-jılǵı redakciyası (C99) menen saplastırıldı, ol endi bir qatarlı kommentariyalar (`//`) hám kod penen aralas deklaraciyalar sıyaqlı C++ qásiyetlerin qollap-quwatlaydı. Ekinshi jaǵınan, C99 C++ qollap-quwatlamaytuǵın bir qatar jańa qásiyetlerdi kirgizdi, olar C++ ushın úylesimsiz yamasa artıqsha edi, mısalı: ózgeriwshi uzınlıqtaǵı massivler, jergilikli kompleks san tipleri (degen menen, C++ standart kitapxanasındaǵı `std::complex` klassı uqsas funkcionallıqtı usınadı, biraq kod penen úylesimli emes), belgilengen inicializatorlar, qurama literallar hám `restrict` gilt sózi.[75] C99 tárepinen kirgizilgen ayırım ózgeshelikler C++ standartınıń kelesi versiyası, C++11 ge kirgizildi (artıqsha bolmaǵanlarınan). Degen menen, C++11 standartı jańa úylesimsizliklerdi kirgizedi, mısalı, simvollıq kórsetkishke qatar literalın menshiklewge tıyım salıw, bul C de durıs bolıp qala beredi.

C hám C++ kodların aralastırıw ushın, C hám C++ tillerinde shaqırılatuǵın/qollanılatuǵın hár qanday funkciya járiyalanıwı yamasa anıqlaması C baylanısına iye ekenligin kórsetiw ushın `extern "C" {/.../}` blogı ishinde járiyalanıwı kerek. Bunday funkciya atamalardı ózgertiwge baylanıslı qásiyetlerge (yaǵnıy, funkciyanı qayta júklewge) súyene almaydı.

### Ishki assembler
C yamasa C++ tilinde islep shıǵılǵan programmalar kóbinese ónimlilikti optimallastırıw zárúr bolǵanda, joqarı dárejeli programmalastırıw tillerine salıstırǵanda tómengi dárejedegi funkcionallıqlar, joqarıraq tezlik hám keńeytilgen basqarıw imkaniyatlarınan paydalanıw ushın ishki assemblerdi qollanadı. C++ `asm` járiyalawların qollanıp, assembler kodın ornatıwdı qollap-quwatlaydı, biraq ishki assemblerdiń úylesimliligi kompilyatorlar hám arxitekturalar arasında aytarlıqtay dárejede ózgeshelenedi. Python yamasa Java sıyaqlı joqarı dárejeli tillerdiń qásiyetlerinen ayırmashılıǵı, assembler kodı tiykarǵı processorǵa hám kompilyator implementaciyasına júdá ǵárezli boladı.

#### Kompilyatorlar arasındaǵı ayırmashılıqlar
Hár qıylı C++ kompilyatorları ishki assemblerdi hár qıylı usıllar menen ámelge asıradı.

* GCC (GNU Compiler Collection) hám Clang: GCC keńeytilgen ishki assembler sintaksisin qollanadı. `-ansi` hám `-std` opciyaları menen kompilyaciyalanıwı múmkin bolǵan kod jazǵanda `asm` ornına `__asm__` gilt sózin qollanıp, kirgiziw/shıǵarıw operandları hám buzılǵan registrlerdi kórsetiwge imkaniyat beredi. Bul usıl Intel hám IBM kompilyatorları tárepinen de keńnen qabıl etilgen.
* MSVC (Microsoft Visual C++): Ishki assembler kompilyatorǵa ornatılǵan. Burın `__asm` gilt sózi arqalı ishki assemblerdi qollap-quwatlaǵan, biraq bul imkaniyat 64-bitli rejimde alıp taslanǵan hám onıń ornına bólek `.asm` modullerin talap etedi.
* TI ARM Clang hám Ornatılǵan Kompilyatorlar: Texas Instruments'tiń TI Arm Clang sıyaqlı ayırım ornatılǵan sistemalar ushın kompilyatorlar ishki assemblerge ruqsat beredi, biraq registr konvenciyaları hám shaqırıw konvenciyaları menen kelispewshiliklerdiń aldın alıw ushın qatańıraq qaǵıydalar qoyadı.

#### C++ hám Assembler arasındaǵı óz-ara islesiw
C++ ASM kodın integraciyalawdıń eki tiykarǵı usılın usınadı.

1. Óz aldına assembler faylları – Assembler kodı bólek jazıladı hám C++ kodı menen baylanıstırıladı.

2. Ishki assembler – Assembler kodı kompilyatorǵa tán keńeytpeler arqalı C++ kodı ishine kiritiledi.

;ASM beyimlesiwi ushın kodqa mısal
* C++ tilinen assembler funkciyasın shaqırǵanda, C++ atamaların burmalanıwdıń aldın alıw ushın `extern "C" qollanıń.


```cpp
// main.cpp
import std;

extern "C" int add_asm(int, int);  // Assembler funkciyasın járiyalaw

int main()
{
    int result = add_asm(5, 7);
    std::println("ASM-nen alınǵan nátiyje: {}", result);
    return 0;
}
```



```cpp
# RISC-V arxitekturasın qollanıp jazılǵan asm kod
.section .text
.global add_asm

add_asm:
    add a0, a0, a1  # Birinshi argumentti (a0) hám ekinshi argumentti (a1) qosıp, nátiyjeni a0 ge saqlaw
    ret             # Qaytarıw (a0 qaytarılatuǵın mánisti saqlaydı)
```

*Assemblerdegi global ózgeriwshiler C++ tilinde `extern` dep járiyalanıwı hám assemblerde `.global` dep belgileniwi kerek.

```cpp
// main.cpp
import std;

extern "C" int global_var;  // Assemblerden global ózgeriwshini járiyalaw

int main()
{
    std::println("ASM-nen alınǵan global ózgeriwshi: {}", global_var);
    return 0;
}
```



```cpp
# RISC-V arxitekturasın qollanıp jazılǵan asm
.section .data
.global global_var
.align 4

global_var:
    .word 42  # Pútin san mánisin belgilew
```


* Ishki assembler `asm` gilt sózin qollanıp, ASM kodın tikkeley C++ ishine ornatıwǵa múmkinshilik beredi.


```cpp
// main.cpp (GCC/CLANG kompilyatorın qollanıp)
import std;

int main()
{
    int x = 10, y = 20, sum;
    asm volatile (
        "add %0, %1, %2"
        : "=r" (sum)   // Shıǵarıw operandı (registrde saqlanadı)
        : "r" (x), "r" (y) // Kirgiziw operandları (registrlerde saqlanadı)
    );
    std::println("Ishki ASM arqalı alınǵan summa: {}", sum);
    return 0;
}
```

## Derekler

__BÖLİDİMÖNDEMEW__