Trudim se da pratim tok razvoja novog standarda programskog jezika C++. Naravno, Wikipedia ima članak sa dobrim pregledom svih novosti koje nas očekuju.

Možda ne toliko značajno, ali zbog bolnog iskustva, mene najviše raduje podrška za koncepte što bih ja opisao kao interfejs za grupe šablona (engl. template). To je mogućnost da se u kodu odredi operatore koji šablon mora da zadovolji. Ovo bi trebalo da reši problem višekilobajtskih poruka sa greškama pri prevođenju koda pošto pri korišćenju tipa koji ne podržava određeni operator kompilator danas ne može da prikaže ništa bolje od greške koja nastaje na mestu „raspisa“ šablona (npr. negde u mračnim dubinama STL-a gde je šablon već zamenjen stvarnim tipom). Sećam se da smo se na faksu najviše mučili takvim greškama.

Kad pominjem C++ na faksu, nećete verovati, std::vector<std::vector<int>> sada radi, tj. razmak između dva krajnja > nije više neophodan :)

8625151_c8e2f59bfe.jpg
cc-by-sa 2005, foto: ~Phil Moore

Mogući su sada šabloni sa promenljivim brojem argumenata gde se konstruktor takvog tipa definiše poput liste u LISP-u (i sličnim jezicima). Ovo omogućava pravljenje generičkih kontejnera za nedefinisani broj potpuno različitih tipova (npr. int, pa 3 stringa, pa std::vector i tako redom). Skoro kao netipiziran jezik, ko bi rekao ;)

Super je i fora sa move konstruktorom (i R-value tipovima i unique pokazivačima koji idu uz to) što izbegava nepotrebno alociranje memorije pri vraćanju rezultata iz funkcije (kada se pravi privremena promenljiva i tradicionalno poziva konstruktor kopije praćen jednim destruktorom). Reference counting pokazivači su takođe ušli u jezik.

Nema više ni haka sa definisanjem, a ne deklarisanjem konstruktora (konstruktora kopiranja, dodele, destruktora) kada želimo da onemogućimo neki konstruktor u objektu. Sada će biti moguće nakon definicije konstruktora dopisati  =delete za bolju čitljivost. Takođe tu je i  =default koji naglašava da se koristi podrazumevani konstruktor.

Popularnost dinamički tipiziranih jezika zahtevala je par sintaksnih olakšica. Tu je sada auto tip (koji je džoker znak) kao i decltype ključna reč koja radi kao statički operator (dakle, u trenutku prevođenja) i zamenjuje tip. Npr. decltype(5) je isto što i int

Od danas popularnih stvari, tu su lambde (sa mogućnošću hvatanja parametara pa su to ujedno i zatvorenja), inicijalizacione liste (std::vector x = {1, 2, 3};, wow bato :) ), nova for konstrukcija za iteraciju po kontejneru (kao foreach u PHP-u ili možda, i bliže određeno, kao for u Pythonu)...

Kao što se može očekivati, multicore je svuda oko nas, pa će novi standard imati podršku za POSIX model niti u std. biblioteci (uključujući mutex/cond. lock), što je dobro zarad prenosivosti programa. U jeziku će postojati podrška za lokalne promenljive po niti.

Pogledajte Google TechTalk: An Overview of the Coming C++ (C++0x) Standard.

Meni je super jedno od poslednjih pitanja (~56") gde neko iz publike pita šta ćemo sada kada je C++ standard dva puta veći od prethodnog, kako objasniti ljudima da C++ nije preglomazan? ;)

Matt je u šali odgovorio: "Da, kada smo seli rekli smo sebi da nećemo dodati previše novih mogućnosti i svako je to podržao. A onda je svako želeo da se u standardu nađe samo još jedno..." ;)

Tako bih i ja voleo mogućnost određivanja sopstvenih operatora (makar unarnih za početak). Zapravo, nedostaje mi x = n!; i MyInteger MyInteger::operator!() { ... }, na užas svih koji misle da je Java super stvar sa onim njenim .Equals() :)

C++ izvornik, treće izdanje Neka nama poživi čika Lippman, ostaviću već mesta za tih ~2600 strana za četvrto izdanje ;) Da, i ako je neko mislio da moje interesovanje za C++ znači da prelazim na KDE/Qt, razočaraću vas, GTKmm je sasvim odlična stvar!

Ako vas tema zanima, pogledajte i prethodni Google TechTalk (7. mart 2007. godine): New Features in the Next C++ Standard.