Značky: História štandardizácie C, ANSI C, ISO C, C99, C11, ISO/IEC C, C.

pôvodu

C a je „koproduktom“ z vytvorenia operačného systému UNIX, ktorý v Bell Laboratories vyvinuli Ken Thompson, Denis Ritchie a spol. Thompson sám napísal pôvodnú verziu UNIX, ktorá bežala na DEC PDP-7, jednom z prvých minipočítačov s iba 8 000 slovami hlavnej pamäte (bol to koniec koncov rok 1969).

Rovnako ako ostatné operačné systémy tej doby, aj UNIX bol napísaný v jazyku symbolických inštrukcií. Ladenie programov v assembleri je skutočnou bolesťou a ťažko sa zlepšuje a UNIX nebol výnimkou. Thompson sa rozhodol, že pre ďalší vývoj OS je potrebný jazyk na vysokej úrovni a prišiel s malým jazykom B. Thompson prevzal jazyk BCPL, jazyk pre programovanie systému vyvinuté v polovici 60-tych rokov. BCPL zase pochádza z Algol 60, jedného z najstarších (a najvplyvnejších) jazykov.

Ritchie sa čoskoro pripojil k projektu UNIX a začal písať v B. V roku 1970 Bell Labs zakúpili pre tento projekt PDP-11. Keďže B bol pripravený na prevádzku na PDP-11, Thompson prepísal časť UNIXu na B. V roku 1971 sa ukázalo, že B nie je celkom vhodné pre PDP-11, a tak Ritchie začal vytvárať rozšírenú verziu B. najprv ho nazval NB (New B ), ale keď sa jazyk výrazne líšil od jazyka B, názov sa zmenil na C. V roku 1973 bol jazyk dostatočne stabilný, aby sa v ňom dal prepísať UNIX. Prechod na C priniesol dôležitú výhodu: prenosnosť. Napísaním kompilátora C pre každý zo strojov v Bell Labs mohol vývojársky tím preniesť na ne UNIX.

Štandardizácia

Jazyk C sa naďalej vyvíjal aj v 70. rokoch, najmä medzi rokmi 1977 a 1979, keď bola vydaná prvá kniha C. Programovací jazyk C, ktorý napísali Brian Kernighan a Denis Ritchie a ktorý bol vydaný v roku 1978, sa stal bibliou programátorov v jazyku C. Keďže neexistuje oficiálny štandard, táto kniha – známa aj ako K&R alebo „Biela kniha“, ako ju fanúšikovia C radi nazývajú – sa stala de facto štandardom. V 70. rokoch bolo málo programátorov v jazyku C a väčšina z nich boli používatelia UNIX. Avšak v 80. rokoch sa C posunulo za úzke hranice sveta UNIX. Kompilátory jazyka C sa stali dostupnými na rôznych počítačoch s rôznymi operačnými systémami. Najmä C sa začalo rozširovať na rýchlo sa rozvíjajúcej platforme IBM PC.

Spolu s nárastom popularity prišli problémy. Programátori, ktorí napísali nové kompilátory, vzali za základ jazyk opísaný v K&R. Bohužiaľ, v K&R boli niektoré vlastnosti jazyka popísané nejasne, takže ich kompilátori často interpretovali podľa vlastného uváženia. V knihe sa tiež jasne nerozlišovalo medzi tým, čo je vlastnosťou jazyka a čo je vlastnosťou operačného systému UNIX. Aby toho nebolo málo, po zverejnení K&R sa C ďalej vyvíjalo: pridávali sa k nemu nové funkcie a staré boli z neho vystrihnuté. Čoskoro bola zjavná potreba komplexného, ​​presného a aktuálneho popisu jazyka. Bez takejto normy sa začali objavovať dialekty jazyka, ktoré narúšali prenosnosť, najsilnejšiu stránku jazyka.

Vývoj amerického štandardu C sa začal v roku 1983 pod záštitou American National Standards Institute (ANSI). Po mnohých revíziách bola norma dokončená v roku 1988 a formálne prijatá v decembri 1989 ako ANSI X3.159-1989. V roku 1990 bola schválená Medzinárodnou organizáciou pre normalizáciu (ISO) ako medzinárodná norma ISO/IEC 9899:1990. Táto verzia jazyka sa bežne označuje ako C89 alebo C90, aby sa predišlo zámene s pôvodnou verziou C, bežne označovanou ako K&R C.

Jazyk prešiel menšími zmenami v roku 1995 (zmeny sú opísané v dokumente bežne označovanom ako dodatok 1). Výraznejšie zmeny nastali v roku 1999, kedy bola publikovaná norma ISO/IEC 9899:1999. Jazyk opísaný v tejto norme sa bežne označuje ako C99. Výrazy „ANSI C“, „ANSI/ISO C“ a „ISO C“, ktoré sa kedysi používali na opis C99, sú nejednoznačné kvôli existencii dvoch noriem.

V roku 2011 bol spolu s revíziou jazyka C++ vydaný štandard C11. Napriek prítomnosti štandardu 11 mnohé kompilátory stále plne nepodporujú ani verzie C99, takže použitie štandardu C11 bude výslovne uvedené.

Keď vaša reputácia pracuje pre váš zisk

riadenie komunity

Vytvorenie tónu hlasu. Rýchle spracovanie negatívnych aj pozitívnych komentárov v mene značky. Riadenie komunikácií podľa daných scenárov. Prenos problematických momentov na zákazníka.

Agenti vplyvu

Tvorba a implementácia „virtuálov“ na fórach a in v sociálnych sieťach. Existuje databáza čerpaných a živých účtov na viac ako 300 stránkach.

Práca s recenziami

Písanie, koordinácia a uverejňovanie recenzií značky na najlepších stránkach a stránkach s recenziami. Spracovanie a prekrývanie negatívnych komentárov s pozitívnymi. Ako výsledok Výsledky vyhľadávania negatív sa postupne nahrádza.

Monitorovanie sociálnych médií

Práca so systémami Youscan, IQbuzz, Brand Analytics. Kontrola zmienok o značke. Identifikácia kľúčových poznatkov, rýchla reakcia na negativitu. Nepostrádateľný nástroj na ovládanie spätná väzba od klientov.

Analytika a výskum

Analýza informačné pole, prieskum kategórie produktov a hlavných konkurentov značky. Tento nástroj pokrýva úlohy od kontroly reputácie a marketingu v reálnom čase až po hĺbkový prieskum.

SERM

Podrobná analýza výsledky vyhľadávania pre vybrané kľúčové slová. Zhromažďovanie zmienok o klientovi na sociálnych sieťach, fórach a spravodajských stránkach. Vypracovanie stratégie narábania s negatívnymi informáciami. Klient dostane plne kontrolovanú emisiu v TOP10.

Aký je stav jazyka C? Historicky je tento jazyk neoddeliteľný od operačného systému Unix, ktorý teraz zažíva svoje znovuzrodenie. 60. roky boli obdobím formovania operačných systémov a programovacích jazykov na vysokej úrovni. V tom čase boli OS a kompilátory nezávisle vyvinuté pre každý typ počítača a často aj vlastné programovacie jazyky (spomeňme si napríklad PL/I). Zároveň je už zrejmá všeobecnosť problémov, ktoré v tomto prípade vznikajú. Reakciou na realizáciu tejto podobnosti bol pokus o vytvorenie univerzálneho mobilu operačný systém, a na to trvalo nie menej univerzálne a mobilný jazyk programovanie. C sa stal týmto jazykom a Unix sa stal prvým operačným systémom napísaným takmer výlučne v jazyku vysokej úrovne.

Úzke spojenie s Unixom poskytlo C testovaciu pôdu, ktorú v tom čase nemal žiadny iný jazyk. Úlohy systémového programovania boli právom považované za najzložitejšie vo vtedajšom priemysle. Väčšinou boli natoľko strojové, že mnohým ich riešenie inak ako v assembleri ani nenapadlo. Jazyky na vysokej úrovni boli určené na programovanie aplikácií a len veľmi obmedzene implementovali potrebné funkcie systémová práca a často len pre určitý typ stroja.

Jazyk C bol od začiatku navrhnutý tak, aby sa v ňom dali písať systémové úlohy. Tvorcovia jazyka C nezačali vyvíjať abstraktný model vykonávateľa jazyka, ale jednoducho do neho implementovali tie funkcie, ktoré boli najviac potrebné v praxi programovania systému. V prvom rade to boli prostriedky priamej práce s pamäťou, štruktúrne riadiace štruktúry a modulárna organizácia programu. A vlastne nič iné do jazyka nebolo zahrnuté. Všetko ostatné bolo presunuté do runtime knižnice. Preto neprajníci niekedy hovoria o jazyku C ako o štruktúrnom assembleri. Ale bez ohľadu na to, čo chatovali, prístup sa ukázal ako veľmi úspešný. Vďaka nemu bola dosiahnutá nová úroveň v pomere jednoduchosti a možností jazyka.

Je tu však ešte jeden faktor, ktorý rozhodoval o úspechu jazyka. Tvorcovia v ňom veľmi umne oddelili strojovo závislé a nezávislé vlastnosti. Vďaka tomu možno väčšinu programov písať univerzálne – ich výkon nezávisí od architektúry procesora a pamäte. Je možné lokalizovať niekoľko hardvérovo závislých častí kódu jednotlivé moduly. A pomocou preprocesora môžete vytvoriť moduly, do ktorých sa po kompilácii rôzne platformy vygeneruje zodpovedajúci kód závislý od stroja.

Veľa kontroverzií vyvolala syntax jazyka C. V ňom použité skratky môžu pri nadmernom používaní spôsobiť, že program bude úplne nečitateľný. Ale, ako povedal Dijkstra, - prostriedky nenesú vinu za to, že sa používajú negramotne. Syntaktické skratky navrhované v C v skutočnosti zodpovedajú stereotypným situáciám, s ktorými sa v praxi najčastejšie stretávame. Ak skratky považujeme za idiómy na expresívne a kompaktné podanie takýchto situácií, potom sa ich užitočnosť stáva bezpodmienečnou a samozrejmou.

Takže C sa objavil ako univerzálny systémový programovací jazyk. Ale v týchto medziach nezostal. Koncom 80-tych rokov si jazyk C, ktorý vytlačil Fortran z vedúcej pozície, získal masovú popularitu medzi programátormi na celom svete a začal sa používať v širokej škále aplikovaných úloh. Významnú úlohu tu zohralo rozšírenie Unixu (a teda C) v univerzitnom prostredí, kde sa školila nová generácia programátorov.

Ako všetky jazyky, aj C sa časom vyvíjal, no väčšina vylepšení nebola radikálna. Za najvýznamnejšie z nich možno považovať zavedenie prísnej špecifikácie typov funkcií, ktorá výrazne zvýšila spoľahlivosť interakcie medzi modulmi v jazyku C. Všetky takéto vylepšenia boli v roku 1989 zakotvené v štandarde ANSI, ktorý dodnes definuje jazyk C.

Ale ak je všetko také bez mrakov, prečo sa všetky ostatné jazyky naďalej používajú, čo podporuje ich existenciu? Achillovou pätou jazyka C bolo, že bol príliš nízkoúrovňový na úlohy, ktoré 90. roky kládli na program. A tento problém má dva aspekty. Na jednej strane boli do jazyka zabudované príliš nízkoúrovňové nástroje – v prvom rade to bola práca s pamäťou a aritmetikou adries. Nie nadarmo má zmena kapacity procesorov na mnohé C-programy veľmi bolestivý vplyv. Na druhej strane C chýbajú nástroje na vysokej úrovni – abstraktné dátové typy a objekty, polymorfizmus, spracovanie výnimiek. V dôsledku toho v programoch C často dominuje technika implementácie úlohy.

Prvé pokusy o nápravu týchto nedostatkov sa začali robiť začiatkom 80. rokov 20. storočia. Už vtedy Bjorn Stroustrup v AT & T Bell Labs začal vyvíjať rozšírenie jazyka C pod podmieneným názvom. Štýl vývoja bol celkom v súlade s duchom, v ktorom bol vytvorený samotný jazyk C - boli do neho zavedené určité funkcie, aby bol viac pohodlná práca konkrétnych ľudí a skupín. Prvý komerčný prekladač nového jazyka s názvom C++ sa objavil v roku 1983. Bol to preprocesor, ktorý preložil program do kódu C. Za skutočný zrod jazyka však možno považovať vydanie Stroustrupovej knihy v roku 1985. Od tohto momentu si C++ začalo získavať celosvetovú popularitu.

Hlavnou inováciou C++ je mechanizmus tried, ktorý umožňuje definovať a používať nové dátové typy. Programátor popisuje vnútornú reprezentáciu objektu triedy a sadu funkcií metódy na prístup k tejto reprezentácii. Jedným z cieľov pri vytváraní C++ bola túžba zvýšiť percento opätovného použitia už napísaného kódu. Koncept tried na to ponúkal mechanizmus dedičnosti. Dedičnosť vám umožňuje vytvárať nové (odvodené) triedy s rozšírenou reprezentáciou a upravenými metódami bez ovplyvnenia skompilovaného kódu pôvodných (základných) tried. Dedičnosť zároveň poskytuje jeden z mechanizmov implementácie polymorfizmu - základný koncept objektovo orientovaného programovania, podľa ktorého na vykonanie rovnakého typu spracovania odlišné typyúdajov, možno použiť rovnaký kód. V skutočnosti je polymorfizmus tiež jednou z metód na zabezpečenie opätovného použitia kódu.

Zavedením tried sa nevyčerpávajú všetky inovácie jazyka C++. Má plnohodnotný štruktúrovaný mechanizmus spracovania výnimiek, ktorého absencia v C značne sťažila písanie spoľahlivých programov, šablónový engine, sofistikovaný mechanizmus generovania makier hlboko zapustený v jazyku, otvárajúci ďalšiu cestu k opätovnej použiteľnosti kódu, a oveľa viac.

Všeobecná línia vývoja jazyka bola teda zameraná na rozšírenie jeho schopností zavedením nových konštrukcií na vysokej úrovni pri zachovaní čo najplnšej kompatibility s operáciami ANSI C., takže programátor vlastne prestane pracovať priamo s pamäťou a entitami závislými od systému. Jazyk však neobsahuje mechanizmy nútiace vývojára správne štruktúrovať program a autori nevydali žiadne systematické odporúčania na používanie jeho pomerne sofistikovaných konštrukcií. Nestarali sa včas a o vytvorenie štandardnej knižnice tried, ktorá implementuje najbežnejšie dátové štruktúry.

To všetko viedlo k tomu, že mnohí vývojári boli nútení sami skúmať labyrinty jazykovej sémantiky a samostatne hľadať úspešne fungujúce idiómy. Takže napríklad v prvej fáze vývoja jazyka sa mnohí tvorcovia triednych knižníc snažili vybudovať hierarchiu jednej triedy so spoločnou základnou triedou Object. Táto myšlienka bola vypožičaná zo Smalltalku - jedného z najznámejších objektovo orientovaných jazykov. Ukázalo sa však, že v C++ je to úplne neživotaschopné - prepracované hierarchie knižníc tried sa ukázali ako nepružné a práca tried nebola zrejmá. Aby boli knižnice tried použiteľné, museli byť dodané v zdrojovom kóde.

Vzhľad tried šablón úplne vyvrátil tento smer vývoja. Dedičnosť sa začala používať iba v prípadoch, keď bolo potrebné vygenerovať špecializovanú verziu existujúcej triedy. Knižnice sa začali skladať zo samostatných tried a malých nesúvisiacich hierarchií. Opätovné používanie kódu sa však začalo postupne znižovať, pretože C++ neumožňuje polymorfné použitie tried z nezávislých hierarchií. Široké používanie šablón vedie k neprijateľnému zvýšeniu množstva kompilovaného kódu – nezabúdajme, že šablóny sa implementujú pomocou metód generovania makier.

Jedným z najhorších nedostatkov C++, zdedeného zo syntaxe C, je dostupnosť popisu vnútornej štruktúry všetkých použitých tried pre kompilátor. V dôsledku toho zmena vnútornej štruktúry reprezentácie niektorej knižničnej triedy vedie k potrebe prekompilovať všetky programy, kde sa táto knižnica používa. To značne obmedzuje vývojárov knižníc z hľadiska ich modernizácie, pretože, uvoľnenie Nová verzia, musia si zachovať binárnu kompatibilitu s predchádzajúcou. Práve tento problém vedie mnohých odborníkov k presvedčeniu, že C++ nie je vhodné pre veľké a extra veľké projekty.

Napriek uvedeným nedostatkom a dokonca nedostupnosti jazykového štandardu (to je po viac ako pätnástich rokoch používania!) zostáva C++ jedným z najpopulárnejších programovacích jazykov. Jeho sila je predovšetkým v takmer úplnej kompatibilite s jazykom C. Vďaka tomu sú všetky výdobytky urobené v C dostupné programátorom C++. Zároveň C++ aj bez použitia tried prináša do C množstvo dôležitých pridané vlastnosti a vybavenie, ktoré mnohí ľudia používajú jednoducho ako vylepšený C.

Čo sa týka objektový model C++, pokiaľ sa váš program nestane veľmi veľkým (státisíce riadkov), je celkom možné ho použiť. Nedávny trend prechodu na komponent softvér len posilňuje pozíciu C++. Pri vývoji jednotlivých komponentov sa ešte neprejavujú nedostatky C++ a viazanie komponentov do funkčného systému sa už nerobí na jazykovej úrovni, ale na úrovni operačného systému.

Vo svetle všetkého, čo bolo povedané, výhľad pre C++ nevyzerá pochmúrne. Hoci monopol na trhu programovacích jazykov pre neho nesvieti. Možno môžeme s istotou povedať len to, že tento jazyk neprežije ďalšiu modernizáciu-rozšírenie. Nie bez dôvodu, keď sa objavila Java, venovala sa jej toľko pozornosti. Jazyk blízky syntaxou C++, a preto zdanlivo známy mnohým programátorom, bol ušetrený najkrikľavejších nedostatkov C++, ktoré zdedil zo 70. rokov. Zdá sa však, že Java neplní úlohu, ktorú jej niektorí ľudia pridelili.

Špeciálna úloha jazykov C/C++ v modernom programovaní spôsobuje, že je takmer zbytočné uvádzať konkrétne adresy na internete, kde o nich môžete nájsť materiály. Takýchto miest je jednoducho priveľa. Ak však máte záujem dozvedieť sa viac o vývoji C++, začnite krátkym článkom http://citforum.syzran.ru/programming/prg96/76.shtml.

Alexander Sergejev, [e-mail chránený]
Článok z časopisu BYTE/Russia, marec 2000

Aby sme názorne demonštrovali využitie opísaných jazykov v praxi, zvolili sme úlohu, v ktorej bolo potrebné zadať sériu celých čísel zo štandardného vstupu alebo zo súboru a následne vypísať len nepárne a v opačné poradie. Toto je jeden z najjednoduchších problémov, ktorý si vyžaduje veľa práce s poľami, slučkami, vetvením a I/O na jeho vyriešenie a umožňuje vám tiež demonštrovať volania podprogramov. Zároveň je viditeľný a ľahko vnímateľný.

Výpis 1. C

1 #include /* Pripojenie I/O funkcií */ 2 3 void main(void) 4 ( 5 int M; /* Pole 10 celých čísel, počítané od 0 */ 6 int N; 7 pre (N=0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>=0; --N) /* Slučka cez pole v opačnom poradí */ 12 if (M[N]%2) /* v poradí a vytlačenie nepárnych */ 13 printf("%d\n", M[N]) ; štrnásť)

  • Riadok 3. V C/C++ spúšťanie programu vždy začína hlavnou funkciou.
  • Linky 7 a 11. Hlavička slučky obsahuje bodkočiarku označujúcu počiatočné nastavenie, podmienku pokračovania a pravidlo na prepočet parametra slučky. Operácie ++ a -/- - najznámejšia zo skratiek jazyka C znamenajúca prírastok a úbytok premennej, teda zvýšenie a zníženie jej hodnoty o jednotku.
  • Riadok 8. Funkcia scanf zadáva podľa formátu určeného prvým parametrom hodnoty premenných, ktorých adresy sú určené zvyšnými parametrami. Tu sa adresa, do ktorej sa zadáva hodnota, vypočíta pomocou aritmetiky adresy na adresu umiestnenia poľa M je pridaný posun N prvkov. Rovnaký efekt možno dosiahnuť písaním &M[N].
  • Riadok 12. Prevádzka % vypočíta zvyšok delenia. Stav operátora ak sa považuje za splnenú, ak je číselná hodnota výrazu nenulová.
  • Riadok 13. Funkcia printf- tlač podľa formátu funguje podobne scanf, ale namiesto adries sa odovzdávajú hodnoty, ktoré sa majú vypísať.
1 #include 23 šablóna class Pole 4 ( 5 public: Pole (T Size=1) : M (nové T), N (Size), n(0) () 6 Array (void) ( delete M;) 7 T Count (void) const ( return n; ) 8 T operátor (int i) const ( return M[i]; ) 9 void Add (T Data); 10 private: 11 T* M; // Adresa distribuovanej pamäte 12 int N, n; // N - distribuované; n - použité 13); 14 15 šablóna void Array ::Add(T Data) 16 ( if (N-n) // Ak je všetko pridelených 17 ( int* P = nové T; // miesto je použité, pridelí sa viac 18 pre (int i=0; i A; // Pole celých čísel premennej veľkosti 28 while (1) // Nekonečná slučka 29 ( int N; 30 cin >> N; // cin - štandardný vstupný tok 31 if (cin.eof()) break; // Ukončí cyklus na konci súboru 32 A.Add(N); // Pridajte zadané číslo do poľa 33 ) 34 for (int N=A.Count()-1; N>=0; --N) // Slučka cez pole 35 if ( A[N]%2) 36 cout<a uvoľnite pamäť
  • Riadky 3-13. Trieda šablóny je deklarovaná Pole s parametrom T. Je to pole objektov rôznej veľkosti typu T. Samozrejme, v našej úlohe nie je potrebné použiť triedu šablón. Chceli sme však demonštrovať, ako C++ vytvára polymorfnú dátovú štruktúru, ktorá dokáže pracovať s akýmkoľvek typom prvku.
  • Riadok 5. Konštruktor triedy. Inicializuje reprezentáciu objektu. Napríklad v teréne M zadá sa adresa pamäťového bloku zoradeného operáciou nový T.
  • Riadok 8. Príklad preťaženia operácie. Funkcia operátor sa zavolá, keď sa napravo od objektu triedy objavia hranaté zátvorky pole.
  • Riadok 9. Táto funkcia je hlavnou v implementácii. Pridáva prvky do poľa a podľa potreby ho rozširuje. Keďže je zložitejšia ako ostatné, jej definícia je vyňatá z popisu triedy. Funkcie opísané v tele triedy nie sú v C++ implementované volaním, ale inline substitúciou. To zrýchli program, aj keď zväčší jeho veľkosť.
  • Riadky 15-24. Definícia funkcie Pole::Add(T)(mimochodom, to je jej celé meno).
  • Riadok 27. Vytvorte objekt typu pole. Templet Aggau parametrizované podľa typu int.

Prečo C++

C++ je v súčasnosti považovaný za dominantný jazyk používaný na vývoj komerčných softvérových produktov. V posledných rokoch bola táto dominancia mierne otrasená podobnými tvrdeniami z programovacieho jazyka, akým je Java, ale kyvadlo verejnej mienky sa obrátilo opačným smerom a mnohí programátori, ktorí opustili C++ pre Javu, sa nedávno vrátili k jeho bývalej náklonnosti. V každom prípade sú tieto dva jazyky také podobné, že ak sa naučíte jeden z nich, automaticky ovládate 90 % toho druhého.

C# je nový jazyk vyvinutý spoločnosťou Microsoft pre sieťovú platformu. C# je v podstate druh C++ a napriek množstvu zásadných rozdielov sa jazyky C# a C++ zhodujú asi na 90%. Pravdepodobne potrvá ešte dlho, kým sa C# stane vážnou konkurenciou C++; ale ak aj áno, znalosť jazyka C++ bude významnou výhodou.

C++ je všeobecný programovací jazyk. Jeho prirodzeným záberom je systémové programovanie, chápané v najširšom zmysle slova. Okrem toho sa C++ úspešne používa v mnohých oblastiach použitia, ktoré ďaleko presahujú špecifikovaný rozsah. Implementácie C++ sú teraz na každom stroji, od najskromnejšieho mikropočítača po najväčší superpočítač a prakticky pre všetky operačné systémy.

Vznik a vývoj jazyka C++

Bjorn Stroustrup je vývojár jazyka C++ a tvorca prvého kompilátora. Je zamestnancom AT&T Bell Laboratories Research Computing Center v Murray Hill (New Jersey, USA). Magisterský titul z matematiky a počítačového inžinierstva získal na University of Aarus (Dánsko) a doktorát z informatiky na University of Cambridge (Anglicko). Špecializuje sa na distribuované systémy, operačné systémy, modelovanie a programovanie. Spolu s M. A. Ellisom je autorom kompletného sprievodcu jazykom C++ – „A Guide to C++ with Notes“.

C++ samozrejme veľa vďačí jazyku C, ktorý je zachovaný ako jeho podmnožina. Všetky nízkoúrovňové nástroje obsiahnuté v C, určené na riešenie najpálčivejších problémov systémového programovania, sú tiež zachované. C zase veľa vďačí svojmu predchodcovi BCPL. Komentár jazyka BCPL bol obnovený do C++. Ďalším zdrojom inšpirácie bol jazyk SIMULA-67; práve od neho bol koncept tried vypožičaný (spolu s odvodenými triedami a virtuálnymi funkciami). Schopnosť C++ preťažiť operátory a sloboda umiestňovať deklarácie kdekoľvek sa operátor môže objaviť, pripomína jazyk Algol-68.

Skoršie verzie jazyka, nazývané C with Classes, sa používajú od roku 1980. Tento jazyk vznikol, pretože autor potreboval napísať simulačné programy riadené prerušením. Jazyk SIMULA-67 je na to okrem efektivity ideálny. Jazyk "C s triedami" bol použitý pre veľké modelovacie úlohy. V tom čase boli prísnemu testovaniu podrobené možnosti písania programov, pre ktoré sú kritické čas a pamäťové zdroje. Tomuto jazyku chýbalo preťaženie operátora, referencie, virtuálne funkcie a mnoho ďalších funkcií. Prvýkrát C++ opustilo výskumnú skupinu, kde autor pracoval v júli 1983, ale v tom čase ešte veľa funkcií C++ nebolo vyvinutých.

Názov C++ (C plus plus) vymyslel Rick Maschitti v lete 1983. Tento názov odráža evolučnú povahu zmien v jazyku C. Označenie ++ odkazuje na operáciu inkrementácie C. O niečo kratší názov C+ je syntaktická chyba. Okrem toho sa už používal ako názov úplne iného jazyka. C sémantici zistili, že C++ je horšie ako ++C. Jazyk sa nenazýva D, pretože je rozšírením jazyka C a nepokúša sa riešiť žiadne problémy vypustením funkcií jazyka C. Ďalšiu zaujímavú interpretáciu názvu C++ možno nájsť v prílohe k .

Spočiatku bol C++ koncipovaný tak, aby autor a jeho priatelia nemuseli programovať v assembleri, C alebo iných moderných jazykoch vysokej úrovne. Jeho hlavným účelom je zjednodušiť a spríjemniť proces programovania pre jednotlivého programátora. Až donedávna neexistoval na papieri žiadny plán vývoja C++. Návrh, realizácia a dokumentácia išli ruka v ruke. Nikdy neexistoval „Projekt C++“ alebo „Výbor dizajnu C++“. Jazyk sa preto vyvíjal a vyvíja takým spôsobom, aby prekonal všetky problémy, s ktorými sa používatelia stretli. Ako impulz pre rozvoj slúžia aj diskusie autora o všetkých problémoch s jeho priateľmi a kolegami.

Od vydania prvého vydania tejto knihy prešiel jazyk C++ významnými zmenami a vylepšeniami. Ide hlavne o zjednotenie preťaženia, prepojenie a správu pamäte. Urobili sa však menšie zmeny na zvýšenie kompatibility s jazykom C. Zaviedli sa aj niektoré zovšeobecnenia a významné rozšírenia, ako napríklad viacnásobná dedičnosť, členské funkcie so statickými a konštantnými špecifikáciami, chránené členy (chránené), šablóny typov a manipulácia so špeciálnymi situácie. Všetky tieto rozšírenia a vylepšenia boli zamerané na to, aby sa C++ stal jazykom, v ktorom je možné vytvárať a používať knižnice. Všetky zmeny sú popísané v .

Ďalšie rozšírenia zavedené v rokoch 1985 až 1991 (ako je viacnásobná dedičnosť, statické členské funkcie a čisto virtuálne funkcie) vyplynuli skôr zo zovšeobecnení skúseností s programovaním v C++ než z iných jazykov.

Rozšírenia jazyka uskutočnené počas týchto šiestich rokov boli primárne zamerané na zvýšenie expresivity jazyka C++ ako jazyka na abstrakciu údajov a objektovo orientovaného programovania vo všeobecnosti a ako prostriedku na vytváranie kvalitných knižníc najmä s používateľsky definovanými typmi údajov.

Okolo roku 1987 sa ukázalo, že práca na štandardizácii C++ je bezprostredná a že základy pre ňu by sa mali začať okamžite.

Hlavným prispievateľom k tejto práci bola spoločnosť AT&T Bell Laboratories. Asi sto zástupcov z približne 20 organizácií študovalo a komentovalo to, čo sa stalo modernou verziou referenčnej príručky a zdrojového materiálu pre štandardizáciu ANSI. C++. Nakoniec z iniciatívy spoločnosti Hewlett-Packard v decembri 1989 bol v rámci ANSI vytvorený výbor X3J16. Očakáva sa, že normalizačná práca C++ v ANSI (americká norma) sa stane integrálnou súčasťou normalizačnej práce ISO (International Standards Organization).

C++ sa vyvinul spolu s vývojom niektorých základných tried.

História stvorenia

Jazyk vznikol začiatkom 80. rokov, keď zamestnanec Bell Labs Björn Stroustrup prišiel s množstvom vylepšení jazyka C pre svoje potreby. Keď Stroustrup začal koncom 70-tych rokov pracovať v Bell Labs na problémoch v teórii radenia (aplikovanej na modelovanie telefónnych hovorov), zistil, že pokusy použiť existujúce modelovacie jazyky v tom čase boli neúčinné a použitie vysoko efektívnych strojových jazykov. bolo príliš ťažké, pretože pre ich obmedzenú expresivitu. Napríklad jazyk Simula má funkcie, ktoré by boli veľmi užitočné pri vývoji veľkého softvéru, ale je príliš pomalý a jazyk BCPL je dostatočne rýchly, ale príliš blízky jazykom nízkej úrovne a nie je vhodný na vývoj veľkého softvéru.

S pripomenutím skúseností zo svojej dizertačnej práce sa Stroustrup rozhodol doplniť jazyk C (nástupca BCPL) o možnosti dostupné v jazyku Simula. Jazyk C, ktorý je základným jazykom systému UNIX, na ktorom bežali počítače Bell, je rýchly, bohatý na funkcie a prenosný. Stroustrup k tomu pridal schopnosť pracovať s triedami a objektmi. Výsledkom bolo, že praktické problémy modelovania sa ukázali ako prístupné z hľadiska času vývoja (vďaka použitiu tried podobných Simule), ako aj z hľadiska výpočtového času (kvôli rýchlosti C). Prvými prírastkami do C boli triedy (so zapuzdrením), dedičnosť tried, silná kontrola typu, inline funkcie a predvolené argumenty. Skoré verzie jazyka, pôvodne nazývané „C s triedami“, sú dostupné od roku 1980.

Počas vývoja jazyka C s triedami Stroustrup napísal program cfront, kompilátor, ktorý prevádza zdrojový kód jazyka C s triedami na zdrojový kód obyčajného jazyka C. To umožnilo pracovať na novom jazyku a používať ho v praxi s využitím infraštruktúry, ktorá je už dostupná v systéme UNIX. pre vývoj v C. Nový jazyk, pre autora nečakane, si získal veľkú obľubu medzi kolegami a čoskoro ho už Stroustrup nemohol osobne podporovať a odpovedal na tisíce otázok.

Pri tvorbe C++ chcel Bjorn Stroustrup
  • Získajte univerzálny jazyk so statickými dátovými typmi, efektívnosťou a prenosnosťou C.
  • Priama a komplexná podpora mnohých programovacích štýlov, vrátane procedurálneho programovania, abstrakcie dát, objektovo orientovaného programovania a generického programovania.
  • Dajte programátorovi slobodu voľby, aj keď mu to dáva možnosť vybrať si nesprávne.
  • Udržujte kompatibilitu s C čo najviac, čím umožníte jednoduchý prechod z programovania na C.
  • Vyhnite sa nezrovnalostiam medzi C a C++: každá konštrukcia, ktorá je platná v oboch jazykoch, musí znamenať to isté v každom z nich a viesť k rovnakému správaniu programu.
  • Vyhnite sa funkciám, ktoré sú závislé od platformy alebo nie sú univerzálne.
  • „Neplaťte za to, čo nepoužívate“ – Žiadna jazyková funkcia by nemala spôsobiť zníženie výkonu programov, ktoré ju nepoužívajú.
  • Nevyžaduje príliš zložité programovacie prostredie.

Výber C ako základu pre vytvorenie nového programovacieho jazyka sa vysvetľuje skutočnosťou, že jazyk C:

1. je viacúčelový, stručný a relatívne nízkoúrovňový jazyk;
2. vhodné na riešenie väčšiny systémových problémov;
3. vykonávaný všade a na všetkom;
4. rozhrania s programovacím prostredím UNIX.

— B. Stroustrup. Programovací jazyk C++. Časť 1.6

Napriek množstvu dobre známych nedostatkov jazyka C sa Stroustrup rozhodol použiť ho ako základ, pretože „C má svoje problémy, ale jazyk navrhnutý od nuly by ich mal a my poznáme problémy jazyka C“. Navyše to umožnilo rýchlo získať prototyp kompilátora (cfront), ktorý len preložil pridané syntaktické prvky do pôvodného jazyka C.

Ako sa C++ vyvíjalo, boli zahrnuté ďalšie funkcie, ktoré potlačili schopnosti konštruktov C, a opakovane sa otvárala otázka opustenia jazykovej kompatibility odstránením zastaraných konštruktov. Kompatibilita sa však zachovala z nasledujúcich dôvodov:

  • zachovanie aktuálneho kódu, pôvodne napísaného v C a priamo preneseného do C++;
  • odstránenie potreby rekvalifikácie programátorov, ktorí predtým študovali C (potrebujú sa len naučiť nové nástroje C++);
  • odstránenie zámeny medzi jazykmi, keď sa používajú spolu („ak sa dva jazyky používajú spolu, ich rozdiely by mali byť buď minimálne, alebo také veľké, aby sa jazyky nedali zamieňať“).

Do roku 1983 boli do jazyka pridané nové funkcie, ako napríklad virtuálne funkcie, preťaženie funkcií a operátorov, referencie, konštanty, používateľská kontrola nad správou voľnej pamäte, vylepšená kontrola typu a nový štýl komentárov (//). Výsledný jazyk už nie je len rozšírenou verziou klasického C a bol premenovaný z C s triedami na „C++“. Jeho prvé komerčné vydanie sa uskutočnilo v októbri 1985.

Výsledný názov jazyka pochádza z unárneho operátora prírastku C++ (zvyšuje hodnotu premennej o jednu).

Pred začiatkom oficiálnej štandardizácie bol jazyk vyvinutý hlavne spoločnosťou Stroustrup ako odpoveď na požiadavky programátorskej komunity. Funkciu popisov štandardných jazykov plnili Stroustrupove tlačené práce na C ++ (popis jazyka, referenčná príručka atď.).

História noriem

V roku 1985 vyšlo prvé vydanie The C++ Programming Language, poskytujúce prvý popis jazyka, ktorý bol mimoriadne dôležitý z dôvodu chýbajúceho oficiálneho štandardu.


V roku 1989 bola vydaná verzia C++ 2.0. Jeho nové funkcie zahŕňali viacnásobnú dedičnosť, abstraktné triedy, statické členské funkcie, konštantné funkcie a chránené členy. V roku 1990 bola vydaná „Commented Reference Guide to C++“, ktorá sa neskôr stala základom štandardu. Nedávne aktualizácie zahŕňali šablóny, výnimky, priestory názvov, nové pretypovania a booleovský typ.

Spolu s ním sa vyvinula aj štandardná knižnica C++. Prvým prírastkom do štandardnej knižnice C++ boli vstupno-výstupné toky, ktoré poskytujú prostriedky na nahradenie tradičných funkcií printf a scanf v jazyku C. Neskôr najvýznamnejším vývojom štandardnej knižnice bolo zahrnutie knižnice štandardných šablón.

V roku 1998 bola výborom pre štandardy C++ (pracovná skupina ISO/IEC JTC1/SC22/WG21) publikovaná jazyková norma ISO/IEC 14882:1998 (známa ako C++98). Štandard C++ nepopisuje, ako sú objekty pomenované, niektoré podrobnosti spracovania výnimiek a ďalšie funkcie súvisiace s implementáciou, čím sa objektový kód generovaný rôznymi kompilátormi stáva nekompatibilným. Mnohé štandardy však vytvorili tretie strany pre špecifické architektúry a operačné systémy.

V roku 2005 bola vydaná Technická správa knižnice 1 (skrátene TR1). Hoci to nie je oficiálne súčasťou štandardu, správa popisuje rozšírenia štandardnej knižnice, o ktorých autori očakávali, že budú zahrnuté v ďalšej verzii jazyka C++. Podpora TR1 sa zlepšuje takmer vo všetkých podporovaných kompilátoroch C++.

Od roku 2009 sa pracuje na aktualizácii predchádzajúcej normy, predbežnou verziou novej normy bola najskôr C ++ 09, a o rok neskôr C ++ 0x, dnes C ++ 11, ktorá zahŕňala doplnenie jazykového jadra resp. rozšírenie štandardnej knižnice vrátane väčšiny TR1.

C++ sa neustále vyvíja, aby spĺňal moderné požiadavky. Jednou zo skupín, ktoré vyvíjajú jazyk C++ a posielajú štandardizačnému výboru C++ návrhy na jeho zlepšenie, je Boost, ktorá sa tiež zaoberá zlepšovaním schopností jazyka pridávaním funkcií metaprogramovania.

Nikto nevlastní práva na jazyk C++, je zadarmo. Samotný jazykový štandardný dokument (s výnimkou konceptov) však nie je dostupný zadarmo.