C++0x

6 kwietnia 2009

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:

  1. typedef templates: (template< typename second> using TypedefName = SomeType<OtherType, second, 5>;)
  2. multithreading.
  3. initializer lists (std::vector<std::string> v = { „xyzzy”, „plugh”, „abracadabra” };)

Największa wg mnie porażka?

  1. 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.

Tagi: , , ,