W weekend postanowilem poszperać, jaki jest status specyfikacji C++0x. Niedawno rozmawiałem z Maćkiem, że jeszcze klika miesięcy i roboczy tytuł trzeba będzie zmienić na C++1x.
Specyfikacja wydaje się „lądować”… Komitet ISO wydał coś, co nazywa się „szkicem do głosowania międzynarodowego” (Committee Draft for international ballot). Zmiany opisane są m.in w Wikipedii. Nie przeczytałem jeszcze tego (draft ma 1300 stron, artykuł na Wiki też najkrótszy nie jest), ale w sumie: niezbyt mi się podoba. Na pierwszy rzut oka wygląda, jakby ktoś tam w Komitecie był zafascynowany Pythonem.
To znaczy – to nie zupełnie tak. Te rzeczy są fajne, tylko tak się zastanawiam, czy mimo wszystko nie pojawi się za dużo nowych słów kluczowych, nowych konstrukcji. I kiedy to wszystko trafi do GCC, MS CL i innych? No i kiedy to trafi do rvct… Obawiam się, że pracując przy środowiskach osadzonych, pisząc przenośny kod albo taki, który oprócz VS11 będzie się musiał kompilować na 2010 i 2008, C++0x nie będzie żadną opcją.
Moi ulubieńcy:
- typedef templates: (template< typename second> using TypedefName = SomeType<OtherType, second, 5>;)
- multithreading.
- initializer lists (std::vector<std::string> v = { „xyzzy”, „plugh”, „abracadabra” };)
Największa wg mnie porażka?
- move constructor. Coś takiego jak pewien znany moim znajomym steal constructor.
No i na koniec, odrobina Pythona:
int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
x *= 2;
}
Ah, nie! to C++0x!…
Update: Committee Draft z marca 2009. Dodatkowo, wszystkie dokumenty komitetu oraz dokumenty z roku 2009.