Pag-unlad ng wika c. §1 Pangkalahatang impormasyon tungkol sa wika. Mga yugto ng disenyo ng programa. Mga modelo ng siklo ng buhay ng aplikasyon. Mga Modelo ng Lifecycle ng Application

Ang C++ ay isang general-purpose compiled programming language na pinagsasama ang mga katangian ng parehong high-level at low-level na programming language. Sa paghahambing sa hinalinhan nito, ang C programming language, ang pinakadakilang pansin ay binabayaran sa pagsuporta sa object-oriented at generic na programming. Ang pangalang "C++ programming language" ay nagmula sa C programming language, kung saan ang unary operator ++ ay tumutukoy sa pagtaas ng isang variable.

Ang C++ programming language ay malawakang ginagamit para sa software development. Lalo na, ang paglikha ng iba't ibang mga programa ng application, ang pagbuo ng mga operating system, mga driver ng device, pati na rin ang mga video game at marami pa. Nilikha ito noong unang bahagi ng 1980s ni Björn Stroustrup. Nakabuo siya ng ilang mga pagpapabuti sa C programming language para sa kanyang sariling mga pangangailangan. mga. Sa una ay walang mga plano na lumikha ng C++ programming language.

Sinusuportahan nito ang programming paradigms tulad ng procedural programming, object-oriented programming, generic programming, nagbibigay ng modularity, hiwalay na compilation, exception handling, data abstraction, deklarasyon ng mga uri ng object (classes), virtual functions.

Ang resultang pangalan ng wika ay nagmula sa C++ unary postfix increment operator (pagdaragdag ng halaga ng isang variable ng isa). Ang pangalang C+ ay hindi ginamit dahil ito ay isang syntax error sa C at dahil din ang pangalan ay inookupahan ng ibang wika. Ang wika ay hindi rin pinangalanang D dahil ito ay "isang extension ng C at hindi nagtatangkang ayusin ang mga problema sa pamamagitan ng pag-alis ng mga elemento ng C."

Mga kalamangan ng wika:

1. Scalability. Ang mga programa ay binuo sa C++ para sa iba't ibang mga platform at system.

2. Kakayahang magtrabaho sa isang mababang antas na may memorya, mga address, mga port.

3. Ang kakayahang lumikha ng mga pangkalahatang algorithm para sa iba't ibang uri ng data, ang kanilang espesyalisasyon, at mga kalkulasyon sa yugto ng compilation gamit ang mga template.

4. Cross-platform. Ang mga compiler ay magagamit para sa isang malaking bilang ng mga platform, at ang mga programa ay binuo sa C++ para sa isang malawak na iba't ibang mga platform at system.

5. Kahusayan. Ang wika ay idinisenyo upang bigyan ang programmer ng pinakamataas na kontrol sa lahat ng aspeto ng istruktura ng programa at pagkakasunud-sunod ng pagpapatupad.

Mga disadvantages ng wika:

1. Ang pagkakaroon ng maraming mga tampok na lumalabag sa mga prinsipyo ng uri ng kaligtasan ay humahantong sa katotohanan na ang mga banayad na pagkakamali ay madaling gumapang sa mga programang C++.

2. Hindi magandang suporta para sa modularity. Ang pagkonekta sa interface ng isang panlabas na module sa pamamagitan ng preprocessor insertion ng isang header file (#include) ay seryosong nagpapabagal sa compilation kapag nagkokonekta ng malaking bilang ng mga module.

3. Ang wikang C++ ay mahirap matutunan at i-compile.

4. Ang ilang uri ng mga conversion ay hindi intuitive. Sa partikular, ang isang operasyon sa isang unsigned at isang sign na numero ay naglalabas ng isang unsigned na resulta.

5. Itinuturing ng ilang tao na ang kakulangan ng built-in na sistema ng pangongolekta ng basura ay isang kawalan ng wikang C++. Sa kabilang banda, ang C++ ay may sapat na mga kasangkapan upang halos maalis ang paggamit ng mga mapanganib na payo; walang mga pangunahing problema sa pagpapatupad at paggamit ng koleksyon ng basura (sa antas ng aklatan, hindi sa antas ng wika). Ang kawalan ng built-in na koleksyon ng basura ay nagpapahintulot sa gumagamit na pumili ng kanilang sariling diskarte sa pamamahala ng mapagkukunan.

Ano ang dahilan para sa katayuang ito ng wikang C? Sa kasaysayan, ang wikang ito ay hindi mapaghihiwalay sa Unix operating system, na ngayon ay nakararanas ng muling pagsilang. Ang 60s ay ang panahon ng pagbuo ng mga operating system at mga high-level na programming language. Sa oras na iyon, ang mga OS at compiler ay independiyenteng binuo para sa bawat uri ng computer, at madalas maging ang kanilang sariling mga programming language (tandaan, halimbawa, PL/I). Kasabay nito, ang pagkakapareho ng mga problema na nagmumula sa kasong ito ay naging malinaw. Ang tugon sa kamalayan ng pagkakatulad na ito ay isang pagtatangka na lumikha ng isang unibersal na mobile operating system, at nangangailangan ito ng pantay na unibersal at mobile na programming language. Ang C ay naging ganoong wika, at ang Unix ang naging unang OS na halos nakasulat sa isang mataas na antas ng wika.

Ang malapit na koneksyon sa Unix ay nagbigay sa C wika ng isang pagsubok na lugar na wala sa ibang wika sa oras na iyon. Ang mga problema sa programming ng system ay nararapat na itinuturing na pinakamahirap sa industriya noong panahong iyon. Para sa karamihan, sila ay nakadepende sa makina na marami ang hindi naisip na lutasin ang mga ito nang iba kaysa sa assembler. Ang mga high-level na wika ay inilaan para sa application programming at ipinatupad lamang ang napakalimitadong function na kinakailangan para sa system work, kadalasan para lamang sa isang partikular na uri ng makina.

Sa simula pa lang, nilikha ang wikang C upang maisulat dito ang mga gawain ng system. Ang mga tagalikha ng C ay hindi bumuo ng isang abstract na modelo ng tagapagpatupad ng wika, ngunit ipinatupad lamang dito ang mga kakayahan na pinaka-kailangan sa pagsasagawa ng system programming. Ang mga ito ay pangunahing paraan ng direktang trabaho na may memorya, mga istrukturang kontrol sa istruktura at modular na organisasyon ng programa. At mahalagang wala nang iba pa ang kasama sa wika. Lahat ng iba pa ay inilagay sa runtime library. Samakatuwid, minsan tinutukoy ng mga detractors ang wikang C bilang isang structural assembler. Ngunit kahit na ano ang kanilang sinabi, ang diskarte ay naging matagumpay. Salamat sa kanya, isang bagong antas ang naabot sa mga tuntunin ng pagiging simple at mga kakayahan sa wika.

Gayunpaman, may isa pang salik na tumutukoy sa tagumpay ng wika. Napakahusay na pinaghiwalay ng mga tagalikha ang mga pag-aari dito na umaasa sa makina at independyente. Salamat dito, ang karamihan sa mga programa ay maaaring isulat sa pangkalahatan - ang kanilang pagganap ay hindi nakasalalay sa processor at arkitektura ng memorya. Ang ilang bahagi ng code na umaasa sa hardware ay maaaring ma-localize sa magkahiwalay na mga module. At gamit ang isang preprocessor, maaari kang lumikha ng mga module na, kapag pinagsama-sama sa iba't ibang mga platform, ay bubuo ng kaukulang machine-dependent code.

Ang syntax ng wikang C ay nagdulot ng maraming kontrobersya. Ngunit, tulad ng sinabi ni Dijkstra, ang mga paraan ay hindi masisi para sa katotohanan na ang mga ito ay ginagamit nang hindi marunong magbasa. Sa katunayan, ang mga pagdadaglat ng syntax na iminungkahi sa C ay tumutugma sa mga pinakakaraniwang stereotypical na sitwasyon sa pagsasanay. Kung isasaalang-alang natin ang mga pagdadaglat bilang mga idyoma para sa nagpapahayag at compact na presentasyon ng mga ganitong sitwasyon, kung gayon ang kanilang mga benepisyo ay magiging walang kondisyon at halata.

Kaya, ang C ay lumitaw bilang isang unibersal na sistema ng programming language. Ngunit hindi siya nanatili sa loob ng mga limitasyong ito. Sa pagtatapos ng dekada 80, ang wikang C, na itinulak ang Fortran mula sa posisyon ng pamumuno nito, ay nakakuha ng napakalaking katanyagan sa mga programmer sa buong mundo at nagsimulang gamitin sa iba't ibang uri ng mga inilapat na gawain. Ang isang mahalagang papel dito ay ginampanan ng pagkalat ng Unix (at samakatuwid C) sa kapaligiran ng unibersidad, kung saan ang isang bagong henerasyon ng mga programmer ay sinanay.

Tulad ng lahat ng mga wika, ang C ay unti-unting napabuti, ngunit karamihan sa mga pagpapabuti ay hindi naging radikal. Ang pinakamahalaga sa mga ito, marahil, ay dapat isaalang-alang ang pagpapakilala ng isang mahigpit na pagtutukoy ng mga uri ng pag-andar, na makabuluhang nadagdagan ang pagiging maaasahan ng inter-module na komunikasyon sa C. Ang lahat ng naturang mga pagpapabuti ay na-enshrined noong 1989 sa pamantayan ng ANSI, na tumutukoy pa rin sa C wika.

Ngunit kung ang lahat ay napaka-rosas, kung gayon bakit ang lahat ng iba pang mga wika ay patuloy na ginagamit, na sumusuporta sa kanilang pag-iral? Ang takong ng Achilles ng wikang C ay naging napakababa nito para sa mga gawaing inilagay sa agenda noong dekada 90. Bukod dito, ang problemang ito ay may dalawang aspeto. Sa isang banda, masyadong mababa ang antas na mga tool ay binuo sa wika - pangunahin ang memory management at address arithmetic. Ito ay hindi walang dahilan na ang pagpapalit ng bit na kapasidad ng mga processor ay may napakasakit na epekto sa maraming C program. Sa kabilang banda, ang C ay walang mataas na antas ng mga tampok - abstract na mga uri ng data at mga bagay, polymorphism, paghawak ng exception. Bilang resulta, sa mga programang C, ang pamamaraan ng pagpapatupad ng isang gawain ay kadalasang nangingibabaw sa nilalaman nito.

Ang mga unang pagtatangka na iwasto ang mga pagkukulang na ito ay nagsimulang gawin noong unang bahagi ng 80s. Kahit noon pa man, nagsimulang bumuo si Bjarne Stroustrup sa AT&T Bell Labs ng extension ng C language sa ilalim ng code name. Ang istilo ng pag-unlad ay medyo naaayon sa diwa kung saan nilikha ang wikang C - ang ilang mga tampok ay ipinakilala dito upang gawing mas maginhawa ang gawain ng mga partikular na tao at grupo. Ang unang komersyal na tagasalin ng bagong wika, na tinatawag na C++, ay lumitaw noong 1983. Ito ay isang preprocessor na nagsalin ng programa sa C code, gayunpaman, ang aktwal na pagsilang ng wika ay maaaring ituring na paglalathala ng aklat ni Stroustrup noong 1985. Ito ay mula sa sandaling ito na ang C++ ay nagsimulang makakuha ng katanyagan sa buong mundo.

Ang pangunahing pagbabago ng C++ ay ang mekanismo ng klase, na ginagawang posible na tukuyin at gamitin ang mga bagong uri ng data. Inilalarawan ng programmer ang panloob na representasyon ng isang object ng klase at isang set ng mga function-method para sa pag-access sa representasyong ito. Isa sa mga itinatangi na layunin kapag lumilikha ng C++ ay ang pagnanais na taasan ang porsyento ng muling paggamit ng nakasulat na code. Ang konsepto ng mga klase ay nag-aalok ng mekanismo ng pamana para dito. Binibigyang-daan ka ng inheritance na lumikha ng mga bagong (nagmula) na klase na may pinahabang representasyon at binagong mga pamamaraan, nang hindi naaapektuhan ang pinagsama-samang code ng orihinal (base) na mga klase. Kasabay nito, ang mana ay nagbibigay ng isa sa mga mekanismo para sa pagpapatupad ng polymorphism - ang pangunahing konsepto ng object-oriented programming, ayon sa kung saan ang parehong code ay maaaring magamit upang maisagawa ang parehong uri ng pagproseso ng iba't ibang uri ng data. Sa totoo lang, ang polymorphism ay isa rin sa mga pamamaraan para matiyak ang muling paggamit ng code.

Ang pagpapakilala ng mga klase ay hindi nauubos ang lahat ng mga inobasyon ng C++ na wika. Nagpapatupad ito ng isang ganap na structured exception na mekanismo sa paghawak, ang kawalan nito sa C ay naging mas mahirap magsulat ng mga maaasahang programa, isang mekanismo ng template - isang sopistikadong mekanismo ng macro-generation na malalim na binuo sa wika, na nagbubukas ng isa pang landas sa muling paggamit ng code, at marami pang iba.

Kaya, ang pangkalahatang linya ng pag-unlad ng wika ay naglalayong palawakin ang mga kakayahan nito sa pamamagitan ng pagpapakilala ng mga bagong mataas na antas ng konstruksyon habang pinapanatili ang buong pagiging tugma sa ANSI C hangga't maaari, ang pakikibaka upang mapataas ang antas ng wika ay nagpatuloy din ang pangalawang harap - ang parehong mga klase ay ginagawang posible, na may karampatang diskarte, upang itago ang mga mababang antas na operasyon, upang ang programmer ay aktwal na huminto sa pagtatrabaho nang direkta sa memorya at mga nilalang na umaasa sa system. Gayunpaman, ang wika ay hindi naglalaman ng mga mekanismo na pumipilit sa developer na buuin nang tama ang programa, at ang mga may-akda ay hindi naglabas ng anumang sistematikong rekomendasyon para sa paggamit ng medyo sopistikadong mga konstruksyon nito. Hindi rin sila naglaan ng oras upang lumikha ng isang karaniwang library ng klase na nagpapatupad ng mga pinakakaraniwang istruktura ng data.

Ang lahat ng ito ay humantong sa katotohanan na maraming mga developer ang pinilit na galugarin ang mga labirint ng linguistic semantics sa kanilang sarili at malayang makahanap ng matagumpay na gumaganang mga idyoma. Halimbawa, sa unang yugto ng pag-unlad ng wika, maraming tagalikha ng mga library ng klase ang naghangad na bumuo ng isang hierarchy ng mga klase na may isang karaniwang base class na Bagay. Ang ideyang ito ay hiniram mula sa Smalltalk, isa sa mga pinakatanyag na object-oriented na wika. Gayunpaman, ito ay naging ganap na hindi mabubuhay sa C++ - ang maingat na idinisenyong mga hierarchy ng mga library ng klase ay naging hindi nababaluktot, at ang gawain ng mga klase ay hindi halata. Upang magamit ang mga aklatan ng klase, kailangan itong ibigay sa source code.

Ang paglitaw ng mga klase ng template ay ganap na pinabulaanan ang direksyong ito ng pag-unlad. Ang mana ay nagsimulang gamitin lamang sa mga kaso kung saan kinakailangan na bumuo ng isang espesyal na bersyon ng isang umiiral na klase. Ang mga aklatan ay nagsimulang binubuo ng magkakahiwalay na mga klase at maliliit na walang kaugnayang hierarchy. Gayunpaman, sa landas na ito, nagsimulang bumaba ang muling paggamit ng code, dahil sa C++ ang polymorphic na paggamit ng mga klase mula sa mga independiyenteng hierarchy ay imposible. Ang malawakang paggamit ng mga template ay humahantong sa isang hindi katanggap-tanggap na pagtaas sa dami ng pinagsama-samang code - huwag nating kalimutan, ang mga template ay ipinatupad gamit ang mga pamamaraan ng macrogeneration.

Isa sa mga pinakaseryosong pagkukulang ng C++, na minana nito mula sa C syntax, ay ang kakayahan ng compiler na ilarawan ang panloob na istruktura ng lahat ng klase na ginamit. Bilang kinahinatnan, ang pagbabago sa panloob na istruktura ng representasyon ng isang klase ng aklatan ay humahantong sa pangangailangang muling i-compile ang lahat ng mga programa kung saan ginagamit ang aklatang ito. Lubos nitong nililimitahan ang mga developer ng library mula sa pag-upgrade sa kanila, dahil kapag naglalabas ng bagong bersyon, dapat nilang panatilihin ang binary compatibility sa nauna. Ang problemang ito ang nagpapaniwala sa maraming eksperto na ang C++ ay hindi angkop para sa pagpapatakbo ng malalaki at napakalaking proyekto.

Gayunpaman, sa kabila ng mga nakalistang pagkukulang at maging ang hindi pagkakaroon ng pamantayan ng wika (ito ay pagkatapos ng higit sa labinlimang taon ng paggamit!), Ang C++ ay nananatiling isa sa pinakasikat na mga programming language. Ang kalakasan nito ay pangunahin sa halos kumpletong pagkakatugma nito sa wikang C Dahil dito, ang mga programmer ng C++ ay may access sa lahat ng mga pagpapaunlad na ginawa sa C. Kasabay nito, ang C++, kahit na walang paggamit ng mga klase, ay nagdudulot ng ilang mahahalagang bagay. karagdagang mga tampok at kaginhawahan sa C na ginagamit ito ng marami bilang isang pinahusay na C .

Tulad ng para sa modelo ng object ng C++, hangga't hindi masyadong malaki ang iyong programa (daan-daang libong linya), medyo magagamit ito. Ang kamakailang trend patungo sa component-based na software ay nagpapalakas lamang sa posisyon ng C++. Kapag bumubuo ng mga indibidwal na bahagi, ang mga pagkukulang ng C++ ay hindi pa lumilitaw, at ang pag-uugnay ng mga bahagi sa isang gumaganang sistema ay hindi na ginagawa sa antas ng wika, ngunit sa antas ng operating system.

Sa liwanag ng lahat ng sinabi, ang mga prospect para sa C++ ay hindi mukhang madilim. Bagaman hindi siya magkakaroon ng monopolyo sa merkado ng programming language. Marahil ang tanging masasabi natin nang may katiyakan ay ang wikang ito ay hindi makakaligtas sa isa pang modernisasyon-pagpapalawak. Ito ay hindi para sa wala na kapag ang Java ay lumitaw, ito ay nakatanggap ng ganoong malapit na atensyon. Ang wika, na malapit sa syntax sa C++, at samakatuwid ay tila pamilyar sa maraming programmer, ay naligtas sa mga pinakamatingkad na pagkukulang ng C++, na minana mula noong 70s. Gayunpaman, ang Java ay tila hindi tumutupad sa tungkuling itinalaga ng ilang tao dito.

Ang espesyal na papel ng mga wikang C/C++ sa modernong programming ay ginagawang halos walang kabuluhan ang pagbibigay ng mga partikular na address sa Internet kung saan makakahanap ka ng mga materyales sa mga ito. Napakaraming lugar na tulad nito. Gayunpaman, kung interesado kang matuto nang higit pa tungkol sa ebolusyon ng C++, magsimula sa maikling artikulong ito http://citforum.syzran.ru/programming/prg96/76.shtml.

Alexander Sergeev, [email protected]
Artikulo mula sa BYTE/Russia magazine, Marso 2000

Upang malinaw na maipakita ang paggamit ng mga inilarawang wika sa pagsasanay, pumili kami ng isang gawain kung saan kinakailangan na magpasok ng isang serye ng mga integer mula sa karaniwang input o mula sa isang file, at pagkatapos ay i-output lamang ang mga kakaiba, sa reverse order . Ito ay isa sa mga pinakasimpleng problema na mahalagang nangangailangan ng pagtatrabaho sa mga arrays, loops, branching at I/O upang malutas ito, at nagbibigay-daan din sa iyong magpakita ng mga subroutine na tawag. Kasabay nito, ito ay nakikita at madaling madama.

Listahan 1. C

1 #isama /* Ikonekta ang mga function ng I/O */ 2 3 void main(void) 4 ( 5 int M; /* Array ng 10 integer, na binibilang mula sa 0 */ 6 int N; 7 para sa (N=0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>=0; --N) /* Dumadaan kami sa array nang baligtad */ 12 kung (M[N]%2) /* order at i-print ang mga kakaiba */ 13 printf("%d\n", M[N]) ; 14)

  • Linya 3. Sa C/C++, palaging nagsisimula ang pagpapatupad ng programa sa pangunahing function.
  • Linya 7 at 11. Sa header ng loop, ang paunang setting, ang kondisyon ng pagpapatuloy, at ang panuntunan para sa muling pagkalkula ng parameter ng loop ay ipinahiwatig, na pinaghihiwalay ng mga semicolon. Mga operasyon ++ At -/- - ang pinakatanyag na mga pagdadaglat ng wikang C, ibig sabihin ay ang pagtaas at pagbaba ng isang variable, iyon ay, isang pagtaas at pagbaba sa halaga nito ng isa.
  • Linya 8. Function scanf pumapasok, ayon sa format na tinukoy ng unang parameter, ang mga halaga ng mga variable na ang mga address ay tinukoy ng natitirang mga parameter. Dito kinakalkula ang address kung saan ipinasok ang halaga gamit ang arithmetic ng address sa address ng lokasyon ng array M ang offset ay idinagdag ng N elemento. Ang parehong epekto ay maaaring makamit sa pamamagitan ng pagsulat &M[N].
  • Linya 12. Operasyon % kinakalkula ang natitira sa isang dibisyon. Kondisyon ng operator kung ay itinuturing na naisakatuparan kung ang numerical value ng expression ay iba sa zero.
  • Linya 13. Function printf- Ang pag-print sa pamamagitan ng format ay gumagana sa parehong paraan scanf, ngunit sa halip na mga address ay ipinapasa ang mga halaga upang maging output.
1 #isama 2 3 template class Array 4 ( 5 public: Array (T Size=1) : M (new T), N(Size), n(0) () 6 Array (void) (delete M;) 7 T Count (void) const ( return n; ) 8 T operator (int i) const ( return M[i]; ) 9 void Add (T Data); 13); 14 15 template walang bisa Array ::Add(T Data) 16 ( if (N-n) // Kung ang lahat ng nakalaan na 17 ay ginagamit ( int* P = new T; // space, distribute more 18 for (int i=0; i A; // Array ng variable size integers 28 habang (1) // Infinite loop 29 ( int N; 30 cin >> N; // cin - standard input stream 31 kung (cin.eof()) break; // Lumabas sa loop sa pagtatapos ng file 32 A.Add(N); // Idagdag ang inilagay na numero sa array 33 ) 34 para sa (int N=A.Count()-1; N>=0; --N) // Walk through ang array 35 kung ( A[N]%2) 36 cout<, at magbakante ng memorya
  • Linya 3-13. Ang klase ng template ay ipinahayag Array may parameter T. Ito ay isang variable-sized na hanay ng mga bagay na may uri T. Siyempre, sa aming gawain ay hindi na kailangang gumamit ng klase ng template. Gayunpaman, gusto naming ipakita kung paano makakalikha ang C++ ng polymorphic na istraktura ng data na maaaring gumana sa anumang uri ng elemento.
  • Linya 5. Tagabuo ng klase. Sinisimulan nito ang representasyon ng bagay. Halimbawa, sa field M ang address ng memory block na iniutos ng operasyon ay ipinasok bagong T.
  • Linya 8. Halimbawa ng overloading ng operasyon. Function operator ay tatawagin kapag lumitaw ang mga square bracket sa kanan ng object ng klase Array.
  • Linya 9. Ang function na ito ay ang pangunahing isa sa pagpapatupad. Nagdaragdag ito ng mga elemento sa array, pinapalawak ito kung kinakailangan. Dahil ito ay mas kumplikado kaysa sa iba, ang kahulugan nito ay kinuha mula sa paglalarawan ng klase. Ang mga function na inilarawan sa katawan ng klase ay ipinatupad sa C++ hindi sa pamamagitan ng pagtawag, ngunit sa pamamagitan ng inline na pagpapalit. Pinapabilis nito ang programa, kahit na pinapataas nito ang laki nito.
  • Linya 15-24. Kahulugan ng Function Array::Add(T)(yun pala ang buong pangalan niya).
  • Linya 27. Lumikha ng isang bagay ng uri Array. Template Aggau na-parameter ayon sa uri int.

Ang C++ (basahin ang c-plus-plus) ay isang pinagsama-sama, statically type na pangkalahatang layunin na programming language kung saan maaari kang lumikha ng mga programa ng anumang antas ng pagiging kumplikado.
Sa loob ng higit sa 20 taon, ang wikang ito ay kabilang sa tatlong pinakasikat at in-demand na mga programming language. (Maaari mong i-verify ito sa pamamagitan ng pagbisita sa website ng TIOBE).
Nagmula ang wika noong unang bahagi ng 1980s, nang ang empleyado ng Bell Labs na si Björn Stroustrup ay nakaisip ng ilang mga pagpapahusay sa wikang C para sa kanyang sariling mga pangangailangan.

Bjarne Stroustrup – tagalikha ng wikang C++

Nagpasya si Stroustrup na palawigin ang wikang C na may mga kakayahan na makikita sa wikang Simula. Ang C, bilang pangunahing wika ng UNIX system kung saan tumatakbo ang mga Bell computer, ay mabilis, mayaman sa tampok, at portable. Idinagdag ni Stroustrup ang kakayahang magtrabaho sa mga klase at bagay. Bilang resulta, ang mga praktikal na problema sa pagmomodelo ay naging madaling lutasin kapwa sa mga tuntunin ng oras ng pag-unlad (salamat sa paggamit ng mga klase na tulad ng Simula) at sa mga tuntunin ng oras ng pagkalkula (salamat sa bilis ng C).
Narito kung paano ito pinag-uusapan mismo ng developer ng wika:



Noong 1998, ang unang pamantayan ng wika, na kilala bilang C++98, ay inilathala ng isang komite ng pamantayan. Ang C++ ay patuloy na umuunlad upang matugunan ang mga pangangailangan ngayon. Isa sa mga grupong bumubuo ng wikang C++ at nagsusumite ng mga panukala para sa pagpapabuti nito sa C++ Standards Committee ay Palakasin, na nakikibahagi, bukod sa iba pang mga bagay, sa pagpapabuti ng mga kakayahan ng wika sa pamamagitan ng pagdaragdag ng mga tampok na metaprogramming dito. Ang pinakabagong pamantayan ay inilabas noong 2017 at tinawag C++17. Ang susunod na pamantayan ay hindi magtatagal at inaasahang lalabas sa 2020.
Walang sinuman ang nagmamay-ari ng mga karapatan sa wikang C++ ito ay libre. Noong Marso 2016, isang working group na WP21 C++ ang nilikha sa Russia. Ang grupo ay inorganisa upang mangolekta ng mga panukala para sa pamantayan ng C++, isumite ang mga ito sa isang komite, at ipagtanggol ang mga ito sa mga pangkalahatang pagpupulong ng International Organization for Standardization.
Ang C++ ay isang multi-paradigm na wika (mula sa salitang paradigm - isang istilo ng pagsusulat ng mga programa sa computer), kabilang ang malawak na hanay ng iba't ibang istilo at teknolohiya ng programming. Ito ay madalas na inuri bilang isang object-oriented na wika, ngunit sa mahigpit na pagsasalita, hindi ito ang kaso. Sa panahon ng proseso ng trabaho, ang developer ay tumatanggap ng ganap na kalayaan sa pagpili ng mga tool upang ang problemang malutas gamit ang isang partikular na diskarte ay malutas nang mahusay hangga't maaari. Sa madaling salita, hindi pinipilit ng C++ ang programmer na sumunod lamang sa isang istilo ng pagbuo ng programa (halimbawa, object-oriented).
Ang C++ ay may isang rich standard library na kinabibilangan ng mga karaniwang container at algorithm, I/O, regular na expression, suporta sa multithreading, at iba pang feature. Naimpluwensyahan ng C++ ang maraming mga programming language, kabilang ang: Java, C#, D. Dahil ang C++ ay kabilang sa isang pamilya ng mga wika batay sa syntax ng C language, madali mong makakabisado ang iba pang mga programming language ng pamilyang ito: JavaScript, PHP , Perl, Objective-C at marami pang iba . atbp., kasama ang sariling wika ng magulang - C. ()
Sa panahon ng pag-iral nito, ang wikang C++ ay nakakuha ng patuloy na mga alamat na madaling pabulaanan (tingnan dito: Bahagi 1 at Bahagi 2)

Kasaysayan ng paglabas ng wika at mga pamantayan

1983

Ang lumikha ng wika ay si Björn Stroustrup, isang empleyado ng Bell Labs, ay nagpakilala ng maagang bersyon ng wikang C++ (“C with classes”)

1985

Unang komersyal na release ng C++, ang wika ay kinuha sa modernong pangalan nito

1986

Paglabas ng unang edisyon ng The C++ Programming Language - isang aklat na nakatuon sa C++ na isinulat ni Björn Stroustrup

1998

Ang internasyonal na pamantayan para sa wikang C++ ay pinagtibay: ISO/IEC 14882:1998 "Standard para sa C++ Programming Language"

2003
2005

Inilabas na ang Library Technical Report 1 (TR1). Bagama't hindi opisyal na bahagi ng pamantayan, inilarawan ng ulat ang mga extension sa karaniwang library na dapat isama sa susunod na bersyon ng C++ na wika.

2011

Paglabas ng bagong pamantayan – C++11 o ISO/IEC 14882:2011; kasama sa bagong pamantayan ang mga karagdagan sa pangunahing wika at pagpapalawak ng karaniwang aklatan, kabilang ang karamihan sa TR1

2014

Paglabas ng pamantayang C++14 (“International Standard ISO/IEC 14882:2014(E) Programming Language C++”); Ang C++14 ay makikita bilang isang maliit na extension sa C++11, na naglalaman ng karamihan sa mga pag-aayos ng bug at maliliit na pagpapabuti

2017

Ang paglabas ng bagong pamantayan – C++1z (C++17). Ang pamantayang ito ay nagpakilala ng maraming pagbabago at pagdaragdag. Halimbawa, kasama sa STD ang mga aklatan ng pamantayang C11, isang file system na nakabatay sa boost::filesystem, at karamihan sa eksperimentong TS I library.

2020

Ang C++20 ay ang hindi opisyal na pangalan ng ISO/IEC standard para sa C++ programming language, na inaasahang susunod sa C++17. Draft N4800 pamantayan.

Pilosopiya ng C++

Sa kanyang aklat na The Design and Evolution of C++ (2007), inilalarawan ni Björn Stroustrup ang mga prinsipyong sinunod niya noong nagdidisenyo ng C++ (pinaikling):

  • Kumuha ng isang pangkalahatang layunin na wika na may mga static na uri ng data, ang kahusayan at portability ng wikang C.
  • Direkta at komprehensibong sumusuporta sa iba't ibang istilo ng programming.
  • Bigyan ang programmer ng kalayaan sa pagpili, kahit na ito ay nagbibigay sa kanya ng pagkakataong pumili ng mali.
  • Panatilihin ang pagiging tugma sa C hangga't maaari, sa gayo'y ginagawang posible ang madaling paglipat mula sa C programming.
  • Iwasan ang mga pagkakaiba sa pagitan ng C at C++: anumang konstruksyon na wasto sa parehong mga wika ay dapat magkapareho ang ibig sabihin sa bawat isa sa kanila at humantong sa parehong gawi ng programa.
  • Iwasan ang mga feature na nakadepende sa platform o hindi pangkalahatan.
  • "Huwag magbayad para sa hindi mo ginagamit" - walang feature ng wika ang dapat humantong sa pagbaba sa pagganap ng mga program na hindi gumagamit nito.
  • Huwag mangailangan ng sobrang kumplikadong kapaligiran sa programming.

C at C++

Ang syntax ng C++ ay minana mula sa wikang C Bagama't, pormal, ang isa sa mga prinsipyo ng C++ ay nananatiling tugma sa wikang C, sa katunayan, ang mga pangkat ng standardisasyon para sa mga wikang ito ay hindi nakikipag-ugnayan, at ang mga pagbabagong ginagawa nila ay hindi. hindi lamang magkaugnay, ngunit madalas na sa panimula ay nagkakasalungatan sa bawat isa sa ideolohiya. Kaya, ang mga elemento na idinagdag ng mga bagong pamantayan sa C sa kernel ay nasa mga karaniwang elemento ng C++ ng karaniwang aklatan at wala talaga sa kernel, halimbawa, mga dynamic na array, mga array na may mga nakapirming hangganan, mga parallel processing facility. Ayon kay Stroustrup, ang pagsasama-sama ng pag-unlad ng dalawang wikang ito ay magiging malaking pakinabang, ngunit malamang na hindi ito posible para sa mga kadahilanang pampulitika. Kaya ang praktikal na pagkakatugma sa pagitan ng C at C++ ay unti-unting mawawala.
Sa halimbawang ito, depende sa compiler na ginamit, alinman sa "C++" o "C" ang magiging output:

Programa 9.1

#isama int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); return 0; )

Ito ay dahil sa ang katunayan na ang mga constant ng character sa C ay may uri int , at sa C++ ang mga ito ay may uri na char , ngunit ang mga laki ng mga ganitong uri ay iba.

Mga Modelo ng Lifecycle ng Application

Ikot ng buhay Ang software ay isang yugto ng panahon na nagsisimula mula sa sandaling ginawa ang isang desisyon sa pangangailangang lumikha ng isang produkto ng software at magtatapos sa sandaling ito ay ganap na maalis sa serbisyo. Ang cycle na ito ay ang proseso ng pagbuo at pagbuo ng software. Mayroong ilang mga modelo ng siklo ng buhay.
Modelo ng Cascade ang siklo ng buhay (modelo ng talon ng Ingles) ay iminungkahi noong 1970 ni Winston Royce. Nagbibigay ito ng sunud-sunod na pagpapatupad ng lahat ng mga yugto ng proyekto sa isang mahigpit na nakapirming pagkakasunud-sunod. Ang paglipat sa susunod na yugto ay nangangahulugan ng kumpletong pagkumpleto ng trabaho sa nakaraang yugto. Ang mga kinakailangan na tinutukoy sa yugto ng pagbuo ng mga kinakailangan ay mahigpit na nakadokumento sa anyo ng mga teknikal na pagtutukoy at naitala para sa buong pag-unlad ng proyekto. Ang bawat yugto ay nagtatapos sa pagpapalabas ng isang kumpletong hanay ng dokumentasyong sapat upang payagan ang pag-unlad na ipagpatuloy ng isa pang pangkat ng pag-unlad.
Mga yugto ng proyekto ayon sa modelo ng talon:

  1. Pagbubuo ng mga kinakailangan;
  2. Disenyo;
  3. Pagpapatupad;
  4. Pagsubok;
  5. Pagpapatupad;
  6. Operasyon at pagpapanatili.

Sa modelo ng cascade, ang paglipat mula sa isang yugto ng proyekto patungo sa isa pa ay ipinapalagay na ang resulta ng nakaraang yugto ay ganap na tama. Sa malalaking proyekto halos imposible itong makamit. Samakatuwid, ang modelong ito ay angkop lamang para sa pagbuo ng isang maliit na proyekto. (Si W. Royce mismo ay hindi sumunod sa modelong ito at gumamit ng umuulit na modelo).
Ulit-ulit na modelo
Ang isang alternatibo sa cascade model ay ang iterative at incremental development (IID) na modelo, na natanggap mula sa T. Gilb noong 70s. pangalan ng evolutionary model. Ang modelo ng IID ay nagsasangkot ng paghahati sa ikot ng buhay ng proyekto sa isang pagkakasunud-sunod ng mga pag-ulit, na ang bawat isa ay kahawig ng isang "mini-proyekto", kasama ang lahat ng mga proseso ng pag-unlad na inilapat sa paglikha ng mas maliliit na piraso ng functionality kumpara sa proyekto sa kabuuan. Ang layunin ng bawat pag-ulit ay makakuha ng gumaganang bersyon ng software system, kabilang ang functionality na tinukoy ng pinagsama-samang nilalaman ng lahat ng dati at kasalukuyang pag-ulit. Ang resulta ng huling pag-ulit ay naglalaman ng lahat ng kinakailangang pag-andar ng produkto. Kaya, sa pagkumpleto ng bawat pag-ulit, ang produkto ay tumatanggap ng isang increment - isang increment - sa mga kakayahan nito, na, samakatuwid, ay umuunlad sa ebolusyon.


Ang iba't ibang mga variant ng umuulit na diskarte ay ipinatupad sa karamihan ng mga modernong pamamaraan ng pag-unlad:

Proseso ng Pag-unlad - Rational Unified Process (RUP)

Rational Unified Process (RUP)(rational unified process) ay isang software development methodology na pinapanatili ng Rational Software (IBM). Ang pamamaraan ay nagbibigay ng mga rekomendasyon para sa lahat ng mga yugto ng pag-unlad: mula sa pagmomodelo ng negosyo hanggang sa pagsubok at pag-commissioning ng natapos na programa. Ang Unified Modeling Language (UML) ay ginagamit bilang isang modelling language.
Ang kumpletong ikot ng buhay ng pagbuo ng produkto ay binubuo ng apat na yugto, bawat isa ay may kasamang isa o higit pang mga pag-ulit.

  • Paunang yugto (Pagsisimula)
  • Pagtukoy sa saklaw ng proyekto at ang halaga ng mga mapagkukunang kinakailangan. Ang mga pangunahing kinakailangan, limitasyon at pangunahing pag-andar ng produkto ay tinutukoy. Ang mga panganib ay tinasa. Pagpaplano ng aksyon. Sa pagtatapos ng paunang yugto, ang pagkamit ng Lifecycle Objective Milestone ay tinasa, na ipinapalagay ang isang kasunduan sa pagitan ng mga stakeholder upang ipagpatuloy ang proyekto.

  • Paglilinaw
  • Mga kinakailangan sa pagdodokumento. Disenyo, pagpapatupad at pagsubok ng executable architecture. Paglilinaw ng mga tuntunin at gastos. Pagbabawas ng mga pangunahing panganib. Ang matagumpay na pagkumpleto ng yugto ng pag-unlad ay nangangahulugan ng pag-abot sa Lifecycle Architecture Milestone.

  • Konstruksyon
  • Sa yugto ng "Build", karamihan sa mga functionality ng produkto ay ipinatupad: ang disenyo ng application ay nakumpleto, ang source code ay nakasulat. Nagtatapos ang yugto ng Pagbuo sa unang panlabas na paglabas ng system at ang milestone ng Initial Operational Capability.

  • Panimula
  • Sa yugto ng "Pagpapatupad," ang huling bersyon ng produkto ay ginawa at inilipat mula sa developer patungo sa customer. Kabilang dito ang isang beta testing program, pagsasanay ng user, at pagtukoy sa kalidad ng produkto. Kung sakaling hindi matugunan ng kalidad ang mga inaasahan ng user o ang pamantayang itinakda sa yugto ng Pagsisimula, ang yugto ng Pagpapatupad ay uulit muli. Ang pagkumpleto ng lahat ng layunin ay nangangahulugan ng pagkamit ng Product Release milestone at pagkumpleto sa buong yugto ng pag-unlad.



“Teknolohiya ng impormasyon. System at software engineering. Mga proseso ng ikot ng buhay ng software". Ang pamantayang ito ay pinagtibay ng Federal Agency para sa Teknikal na Regulasyon at Metrology ng Russian Federation at katulad ng internasyonal na pamantayang ISO/IEC 12207:2008. Ang pamantayang ito ay nagtatatag ng isang pangkalahatang istruktura ng mga proseso ng ikot ng buhay ng software na maaaring sundin sa industriya ng software. Ang pamantayan ay hindi nagmumungkahi ng isang partikular na modelo ng siklo ng buhay. Ang mga probisyon nito ay karaniwan sa anumang mga modelo ng siklo ng buhay, pamamaraan at teknolohiya para sa paglikha ng software. Inilalarawan nito ang istruktura ng mga proseso ng ikot ng buhay nang hindi tinukoy kung paano ipatupad o kumpletuhin ang mga aktibidad at gawaing kasama sa mga prosesong iyon.

Paglalahad para sa aralin
Mga paksa ng mensahe
  • Libreng Software Foundation (FSF)
  • Libreng mga lisensya ng software
  • FreeSoftware at Open Source
  • Kasaysayan ng pag-unlad ng mga programming language
  • Ang kasaysayan ng wikang C at C++
  • Kwento
  • Pagpuna sa C++
  • Kasaysayan ng UNIX
  • Spiral na modelo ng siklo ng buhay ng software
  • UML (Pinag-isang Modeling Language)
  • Microsoft Solutions Framework
  • IDE para sa C/C++ programming sa Windows
  • Mga compiler ng C/C++
  • Paggawa ng Console Application sa Windows
Mga tanong
  1. Bakit hindi ginagamit ang waterfall model ng software development sa malalaking proyekto?
  2. Ano ang pagkakaiba sa pagitan ng talon at umuulit na mga modelo ng pag-unlad?
  3. Ilista ang mga yugto ng pagbuo ng software sa pamamaraang Rational Unified Process (RUP).

Kasaysayan ng paglikha

Nagmula ang wika noong unang bahagi ng 1980s, nang ang empleyado ng Bell Labs na si Björn Stroustrup ay nakaisip ng ilang mga pagpapahusay sa wikang C para sa kanyang sariling mga pangangailangan. Nang magsimulang magtrabaho si Stroustrup sa Bell Labs noong huling bahagi ng dekada 1970 sa mga problema sa teorya ng pagpila (tulad ng inilapat sa pagmomodelo ng mga tawag sa telepono), nalaman niyang hindi epektibo ang mga pagtatangka na gamitin ang mga umiiral na wika sa pagmomodelo noon, at ang paggamit ng napakahusay na mga wika ng makina ​ay masyadong mahirap ipatupad para sa kanilang limitadong pagpapahayag. Kaya, ang wikang Simula ay may mga tampok na magiging lubhang kapaki-pakinabang para sa pagbuo ng malaking software, ngunit masyadong mabagal, at ang wika ng BCPL ay sapat na mabilis, ngunit masyadong malapit sa mga mababang antas na wika at hindi angkop para sa pagbuo ng malaking software.

Inaalala ang karanasan ng kanyang disertasyon, nagpasya si Stroustrup na dagdagan ang wikang C (kapalit ng BCPL) ng mga kakayahan na magagamit sa wikang Simula. Ang C, bilang pangunahing wika ng UNIX system kung saan tumatakbo ang mga Bell computer, ay mabilis, mayaman sa tampok, at portable. Idinagdag ni Stroustrup ang kakayahang magtrabaho sa mga klase at bagay. Bilang resulta, ang mga praktikal na problema sa pagmomodelo ay naging madaling lutasin kapwa sa mga tuntunin ng oras ng pag-unlad (salamat sa paggamit ng mga klase na tulad ng Simula) at sa mga tuntunin ng oras ng pagkalkula (salamat sa bilis ng C). Una sa lahat, ang mga klase (na may encapsulation), class inheritance, strong type checking, inline function at default na argument ay idinagdag sa C. Ang mga unang bersyon ng wika, na orihinal na tinatawag na "C with classes", ay naging available noong 1980.

Habang binubuo ang C na may mga klase, nagsulat si Stroustrup ng isang programa na tinatawag na cfront, isang tagasalin na nagko-convert ng C source code na may mga klase sa plain C na source code UNIX para sa pag-unlad sa C. Ang bagong wika, nang hindi inaasahan para sa may-akda, nakakuha siya ng mahusay na katanyagan sa kanyang mga kasamahan at sa lalong madaling panahon ay hindi na personal na suportahan siya ni Stroustrup, na sinasagot ang libu-libong mga katanungan.

Kapag lumilikha ng C++, gusto ni Björn Stroustrup
  • Kumuha ng isang pangkalahatang layunin na wika na may mga static na uri ng data, ang kahusayan at portability ng wikang C.
  • Direkta at komprehensibong sumusuporta sa iba't ibang istilo ng programming, kabilang ang procedural programming, data abstraction, object-oriented programming, at generic na programming.
  • Bigyan ang programmer ng kalayaan sa pagpili, kahit na ito ay nagbibigay sa kanya ng pagkakataong pumili ng mali.
  • Panatilihin ang pagiging tugma sa C hangga't maaari, sa gayo'y ginagawang posible ang madaling paglipat mula sa C programming.
  • Iwasan ang mga pagkakaiba sa pagitan ng C at C++: anumang konstruksyon na wasto sa parehong mga wika ay dapat magkapareho ang ibig sabihin sa bawat isa sa kanila at humantong sa parehong gawi ng programa.
  • Iwasan ang mga feature na nakadepende sa platform o hindi pangkalahatan.
  • “Huwag magbayad para sa hindi mo ginagamit”—walang feature ng wika ang dapat magdulot ng pagkasira ng pagganap para sa mga program na hindi gumagamit nito.
  • Huwag mangailangan ng sobrang kumplikadong kapaligiran sa programming.

Ang pagpili ng C bilang batayan para sa paglikha ng isang bagong programming language ay ipinaliwanag sa pamamagitan ng katotohanan na ang wikang C:

1. ay isang multi-purpose, maigsi at medyo mababang antas ng wika;
2. angkop para sa paglutas ng karamihan sa mga problema sa system;
3. ginanap sa lahat ng dako at sa lahat ng bagay;
4. mga interface sa kapaligiran ng UNIX programming.

— B. Stroustrup. C++ programming language. Seksyon 1.6

Sa kabila ng ilang kilalang pagkukulang ng wikang C, nagpasya si Stroustrup na gamitin ito bilang batayan, dahil "May mga problema ang C, ngunit ang isang wikang nabuo mula sa simula ay magkakaroon ng mga ito, at alam natin ang mga problema ng C." Bilang karagdagan, ginawa nitong posible na mabilis na makakuha ng isang prototype compiler (cfront), na nagsalin lamang ng mga idinagdag na elemento ng syntactic sa orihinal na C na wika.

Habang binuo ang C++, isinama ang iba pang mga feature na sumasaklaw sa mga kakayahan ng mga konstruksyon ng C, at samakatuwid ang tanong ng pag-abandona sa pagkakatugma ng wika sa pamamagitan ng pag-alis ng mga hindi na ginagamit na mga konstruksyon ay paulit-ulit na itinaas. Gayunpaman, napanatili ang pagiging tugma para sa mga sumusunod na kadahilanan:

  • pagpapanatili ng kasalukuyang code, orihinal na nakasulat sa C at direktang inilipat sa C++;
  • inaalis ang pangangailangan na muling sanayin ang mga programmer na dati nang nag-aral ng C (kailangan lang nilang matuto ng mga bagong tool sa C++);
  • pag-aalis ng pagkalito sa pagitan ng mga wika kapag ginamit nang magkasama ("kung ang dalawang wika ay ginagamit nang magkasama, ang kanilang mga pagkakaiba ay dapat na minimal o napakalaki na imposibleng malito ang mga wika").

Pagsapit ng 1983, ang mga bagong tampok ay naidagdag sa wika, tulad ng mga virtual function, function at overloading ng operator, mga sanggunian, constants, kontrol ng user sa libreng memory management, pinahusay na uri ng checking, at isang bagong istilo ng komento (//). Ang resultang wika ay hindi na isang pinalaki na bersyon ng klasikong C at pinalitan ng pangalan mula sa C na may mga klase sa "C++". Ang unang komersyal na paglabas nito ay naganap noong Oktubre 1985.

Ang resultang pangalan ng wika ay nagmula sa C++ unary postfix increment operator (pagdaragdag ng halaga ng isang variable ng isa).

Bago nagsimula ang opisyal na standardisasyon, ang wika ay pangunahing binuo ng Stroustrup bilang tugon sa mga kahilingan mula sa komunidad ng programming. Ang pag-andar ng mga karaniwang paglalarawan ng wika ay isinagawa sa pamamagitan ng mga naka-print na gawa sa C++ na isinulat ni Stroustrup (paglalarawan ng wika, reference manual, at iba pa).

Kasaysayan ng mga pamantayan

Noong 1985, inilathala ang unang edisyon ng The C++ Programming Language, na nagbibigay ng unang paglalarawan ng wika, na lubhang mahalaga dahil sa kakulangan ng opisyal na pamantayan.


Noong 1989, inilabas ang C++ version 2.0. Kasama sa mga bagong feature nito ang maramihang inheritance, abstract classes, static na function ng miyembro, constant function, at protektadong miyembro. Noong 1990, ang "Annotated Reference Guide to C++" ay nai-publish, na kalaunan ay naging batayan ng pamantayan. Kasama sa mga kamakailang update ang mga template, exception, namespace, bagong uri ng pag-cast, at boolean type.

Ang C++ Standard Library ay umunlad din kasama nito. Ang unang idinagdag sa C++ standard library ay I/O stream, na nagbibigay ng paraan upang palitan ang tradisyonal na C printf at scanf function. Nang maglaon, ang pinakamahalagang pag-unlad ng karaniwang aklatan ay ang pagsasama ng Standard Template Library.

Noong 1998, inilathala ang pamantayan ng wika na ISO/IEC 14882:1998 (kilala bilang C++98), na binuo ng C++ Standards Committee (ISO/IEC JTC1/SC22/WG21 working group). Ang pamantayan ng C++ ay hindi naglalarawan kung paano pinangalanan ang mga bagay, ilang mga detalye sa paghawak ng exception, at iba pang mga tampok na detalyado sa pagpapatupad, na ginagawang hindi tugma ang object code na ginawa ng iba't ibang compiler. Gayunpaman, maraming mga pamantayan ang nilikha ng mga ikatlong partido para sa mga partikular na arkitektura at operating system.

Noong 2005, inilabas ang Library Technical Report 1 (dinaglat bilang TR1). Bagama't hindi opisyal na bahagi ng pamantayan, inilalarawan ng ulat ang mga extension sa karaniwang library na inaasahan ng mga may-akda na isasama sa susunod na bersyon ng wikang C++. Ang suporta sa TR1 ay bumubuti sa halos lahat ng sinusuportahang C++ compiler.

Mula noong 2009, isinagawa ang gawain upang i-update ang nakaraang pamantayan, ang paunang bersyon ng bagong pamantayan ay unang C++09, at isang taon mamaya C++0x, ngayon C++11, na may kasamang mga karagdagan sa core ng ang wika at pagpapalawak ng karaniwang aklatan, kabilang ang karamihan sa TR1.

Ang C++ ay patuloy na umuunlad upang matugunan ang mga pangangailangan ngayon. Isa sa mga grupong bumubuo ng wikang C++ at nagsusumite ng mga panukala para sa pagpapahusay nito sa C++ Standards Committee ay ang Boost, na nakikibahagi, bukod sa iba pang mga bagay, sa pagpapabuti ng mga kakayahan ng wika sa pamamagitan ng pagdaragdag ng mga tampok na metaprogramming dito.

Walang sinuman ang nagmamay-ari ng mga karapatan sa wikang C++ ito ay libre. Gayunpaman, ang standard na dokumento ng wika mismo (hindi kasama ang mga draft) ay hindi magagamit nang libre.

Kapag ang iyong reputasyon ay gumagana para sa iyong kita

Pamamahala ng komunidad

Paglikha ng Tono ng Boses. Mabilis na pagproseso ng parehong negatibo at positibong komento sa ngalan ng brand. Pamamahala ng komunikasyon ayon sa mga tinukoy na sitwasyon. Pagsasalin ng mga problemang isyu sa customer.

Mga ahente ng impluwensya

Paglikha at pagpapatupad ng "mga virtual" sa mga forum at social network. Mayroong database ng mga na-upgrade at live na account sa higit sa 300 mga site.

Nagtatrabaho sa mga review

Pagsusulat, pag-coordinate at pag-post ng mga review tungkol sa brand sa mga nangungunang platform at review site. Pagproseso at pagsakop sa mga negatibong komento ng mga positibo. Bilang resulta, ang negatibiti ay unti-unting napipilitang lumabas sa mga resulta ng paghahanap.

Pagsubaybay sa social media

Nagtatrabaho sa Youscan, IQbuzz, mga system ng Brand Analytics. Kontrol ng mga pagbanggit ng tatak. Pagkilala sa mga pangunahing insight at agarang pagtugon sa negatibiti. Isang kailangang-kailangan na tool para sa pagsubaybay sa feedback ng customer.

Analytics at pananaliksik

Pagsusuri sa larangan ng impormasyon, pananaliksik sa kategorya ng produkto at mga pangunahing kakumpitensya ng tatak. Sinasaklaw ng tool na ito ang mga gawain mula sa pagsubaybay sa reputasyon at real-time na marketing hanggang sa malalim na pananaliksik.

SERM

Detalyadong pagsusuri ng mga resulta ng paghahanap para sa mga napiling keyword. Pagkolekta ng mga sanggunian tungkol sa kliyente sa mga social network, forum at mga site ng balita. Pagbuo ng isang diskarte para sa pagharap sa negatibong impormasyon. Ang kliyente ay tumatanggap ng ganap na kontroladong paghahatid sa TOP10.