28 października 2013

Going Native 2013

Zakończyłem oglądanie udostępnionych wykładów z GoingNative 2013. Pojawiło się na niej kilka slajdów z nowościami z C++14, ale żadne wykład nie był mu w całości zadedykowany. Z najfajniejszych (moim zdaniem) wykładów warto wymienić.
  • Writing Quick Code in C++, Quickly - sztuczki z optymalizacją kodu w bibliotece folly rozwijanej przez Facebook-a. Mam nadzieje, że nie będę musiał się nigdy kłopotać takimi szczegółami, nie mówiąc o przykładach, które nie do końca rozumiem. Kilka wniosków z prezentacji
    • Inżynierowie którzy znają architekturę swojego sprzętu piszą lepszy kod
    • "Mierz wszystko!". Aby sprawdzić wydajność programu wynikowego, trzeba badać go z każdej strony: czas wykonani, zużycie pamięci, zużycie energii, ...
    • Jeżeli dobrze zrozumiałem, czas kompilacji kodu może zostać skrócony, przez stosowanie final tam gdzie to możliwe. Niestety gcc i clang nadal nad tym pracują.
  • Don’t Help the Compiler - jak dla mnie tytuł troszkę mylący bo wykład opowiada o najczęstszych błędach jakie popełniają programiści. Garść notatek z prezentacji:
    • Jeżeli zwracamy wynik przez wartość, stosowanie const może wyłączyć move semantic. Nie korzystać z const dla wartości.
    • Wartości zwracane przez rvalue lub rvalue reference np. string& i string&& są tym samym. Czyli referencją do wartości.
    • Nie korzystać z move(), dla obiektów lokalnych które chcemy zwrócić. Jeżeli dobrze rozumiem, gdy zwracamy lokalną zmienną mogą zadziać się dwie rzeczy. Albo kompilator przeniesie (zoptymalizuje) konstrukcje tego obiektu do kodu wywołującego, albo zadziała move semantic (nie trzeba mu pomagać używając move).
    • Czasami korzystanie ze standardowych funktorów z STL-a tworzy bardziej elegancki kod, niż lambda np. std::plus<> itp.
  • An Effective C++11/14 Sampler - dużo ciekawych informacji na temat wątków oraz std::move i std::forward - sam jeszcze eksperymentuje z tym więc będzie osobny wpis.
    • Jeżeli chcemy szybkości (w postaci move semantic), przekazując przez wartość należy zrezygnować z const. To samo dotyczy zwracania. const wymusza kopiowanie!
    • Warto stosować noexcept, gdy to tylko możliwe generowany jest wtedy bardziej zoptymalizowany kod.
  • The Care and Feeding of C++’s Dragons - bardzo ciekawy wykład na temat rozszerzeń do clang-a mających na celu ułatwienie pracy programistom. Poeksperymentuje jak tylko uda się przekompilować clang-a.
  • rand() Considered Harmful - przestroga przed stosowaniem rand() z biblioteki C. Do C++11 trafiła biblioteka służąca do generowanie wartości losowych, bardzo podobna do Boost.Random.
  • C++ Seasoning - jak znajomość algorytmów standardowych (STL), może usprawnić refactoring kodu.
  • Inheritance Is The Base Class of Evil - trudne do zakumania, ale przykład działa na wyobraźnie. Może będzie kiedyś czas, by nad tym spokojnie pokontemplować. 

Brak komentarzy:

Prześlij komentarz