Use C++11
• tech • 607 słów • 3 minuty czytania
Jakiś czas temu trafiłem w sieci na artykuł opisujący powody, dla których warto używać nowej odsłony języka C++. Nowy standard oficjalnie został zatwierdzony przez komitet 12 sierpnia 2011 roku, ale na długo przed tym wydarzeniem większość liczących się kompilatorów w jakimś tam stopniu wspierała już nowe możliwości języka. Zatem pewnie większość deweloperów nie tylko zna wiele nowinek, ale stosuje je już w swoich projektach.
Nie chcę tutaj rozdrabniać się nad poszczególnymi nowymi elementami języka i biblioteki standardowej, ani też próbować ewangelizować, edukować, czy choćby prezentować fragmenty kodu. Nie tym razem. Dziś poruszam bardziej filozoficzną i psychologiczną stronę tego tematu.
Na pytanie: czy warto stosować C++11, odpowiedź wydaje mi się oczywista - warto! W końcu C++ to już od sierpnia C++11. Nowe możliwości i usprawnienia jakie wniósł nowy standard znacznie ułatwiają programowanie w tym języku, zwiększają produktywność i wydajność. Wydaje mi się, że nie ma opcji nie korzystać z tych nowych możliwości.
Inna kwestia to czy biznes jest na to gotowy. Tutaj już nie jest tak kolorowo. Wydaje mi się, że minie jeszcze sporo czasu, zanim nowe możliwości języka C++ zaczną być używane produkcyjnie przez biznes. Istnieje duża baza kodu napisanego na przestrzeni lat, które go nie opłaca się dotykać. Podobnie sprawa wygląda z narzędziami, mimo tego, że obecnie liczące się kompilatory już od dawna oferują wsparcie większej części C++11, a z wersji na wersję jest coraz lepiej, to biznes rządzi się innymi prawami i snuje się powoli do przodu.
To niestety doprowadza do tego, że wciąż w wielu miejscach używa się starych narzędzi (kilkunastoletnich), a tworzony w takich warunkach kod daleki jest od ideału - większość to stare nawyki i style programowania, czasami rodem prosto z C, pisanie w “C z klasami”, pomijanie wielu mechanizmów języka, nieużywanie STL-a, itd…
Czasami wystarczy tylko przekompilować stary kod z nowym kompilatorem, aby go usprawnić. Inteligentny kompilator zasygnalizuje wiele błędnych i niebezpiecznych konstrukcji, a także poprawi wydajność. Chociażby używając nowej implementacji STL-a, wsparcia dla rvalue references, move semantics… a to tylko wierzchołek góry lodowej :)
Jednym z dobrych przykładów zastosowania C++11 w biznesie jest Facebook, który tworzone przez siebie oprogramowanie podtrzymujące całą jego infrastrukturę wydaje jako open source. W tym biblioteka folly (github), napisana w C++11, będąca szybkim i wydajnym odpowiednikiem większości elementów biblioteki standardowej i boosta.
W Internecie można znaleźć wiele fajnych materiałów odnośnie nowego standardu i bogate przykłady wykorzystania tych mechanizmów. Dlatego powielanie tego tutaj nie ma większego sensu. Niemniej mam wielką nadzieję, że będę mógł czasem zaprezentować na devblogu coś innego - jakiś przykład z życia wzięty, powiązany z konkretnym problemem. Bo standardowe zastosowania i standardowe przypadki użycia są standardowo jasne i wszystkim zainteresowanym znane.
Niemniej jako “ciasteczko” mogę polecić artykuł H. Suttera o elementach nowoczesnego stylu C++ lub krótki przegląd C++11 D. Kaleva: The Biggest Changes in C++11 (and Why You Should Care).
Wspomniałem, że kompilatory wspierają nowe mechanizmy i rozszerzenia języka. Jeśli chcesz wiedzieć w jakim stopniu Twój ulubiony kompilator sobie radzi z C++11 to poszukaj informacji na stronach domowych lub blogach zespołów odpowiedzialnych za rozwój tych narzędzi. W sieci pojawiają się również ogólne zestawienia porównawcze przedstawiające postęp wdrażania nowego standardu C++ w najpopularniejszych kompilatorach.
Niedawno zacząłem rozwijać pewien sterownik dla systemu Windows. Projekt ten tworzony jest w “czystym” C, a dla jasności to tylko kod używany w kernel-space jest w C, reszta to C++. Dlaczego akurat wybrałem C? Poniekąd naturalny wybór, język ten wydaje mi się bardziej odpowiedni w takim zastosowaniu. Aczkolwiek po czasie dostrzegam brak pewnych elementów C++. Co oczywiście nie znaczy, że powinien teraz przepisać istniejący kod na C++ “bo tak będzie lepiej”. Należy wybierać odpowiednie narzędzia do odpowiednich zastosowań.
[dodano 2012-09-15 16:15]
Polecam wczorajszą notatkę Berrisa “C++11 - The Time is Now”.
Komentarze (4)
12 sierpnia 2001? A to ci nowość…
Mała literówka ;)
Czy używać C++11? Dość trudne pytanie przy dużych projektach, które podzielone są na mniejsze kompenty. Trzeba zachowywać zgodność, co nie jest takie łatwe jeśli musimy to zrobić równocześnie w różnych częściach świata. Dostrzegam jeszcze kilka istotnych problemów pozornie mniejszej wagi:
Moim zdaniem trzeba zacząć używać C++11, ale uważnie i z rozsądkiem. Z pełnym wymaganym przejściem w produkcyjnym kodzie poczekałbym do zaimplementowania w pełni nowego standardu (co mam nadzieję nastąpi przed C++14).
It’s good to see you back mr Malcom.
To jest proste! Traktujesz wszystkie komponenty jako czarne skrzynki o ściśle określonym interfejsie i voila - robisz w nich to co chcesz i jak chcesz ;)
Myślę, że zawsze istniała taka możliwość, szczególnie przez początkujących, którzy po zachwyceniu się nowymi “ficzerami” szybko rzucali się w wir ich stosowania, w sytuacjach, gdzie nie zawsze było to uzasadnione.
Z nowych elementów, które wymieniłeś, to są to właśnie jedne z tych, jakie będą najczęściej wykorzystywane w nowych i starych projektach, bo cholernie ułatwiają sprawę i upraszczają kod… oczywiście, gdy się wie jak je używać i jak czytać taki kod ;)
Też się cieszę, że niektórzy tutaj jeszcze zaglądają.