Metaprogramowanie w języku C++
LICZBA DNI: 3 (24h)
KOD KURSU: CPP/META
O szkoleniu
DLA KOGO?
Zaawansowanych programistów programujących w języku C i C++ w środowisku GNU/Linux lub MS Windows
Osób praktycznie stosujących system szablonów STL we własnych projektach
Programistów tworzących oprogramowanie na platformie systemowej GNU/Linux lub MS Windows
Programistów tworzących aplikacje głównego nurtu oraz aplikacje sieciowe
WYMAGANIA
Posługiwanie się wybranym środowiskiem IDE (Eclipse, NetBeans, Vim)
Bardzo dobra znajomość koncepcji programowania obiektowego, systemowego i aplikacyjnego
Znajomość narzędzi do tworzenia aplikacji z rodziny gcc i binutils
Umiejętność posługiwania się narzędziem debuggera
Dobra orientacja w bibliotekach i narzędziach dostępnych w ramach stosu technologii C++
Znajomość koncepcji związanych z programowaniem w języku C++ na poziomie zaawansowanym
ZALETY
Skupiamy się na tych zagadnieniach, które w bezpośredni sposób podnoszą wydajność w codziennej pracy programisty, uwzględniając charakter jego pracy (reaktywna - dodawanie nowych funkcjonalności, wytwarzanie - tworzenie oprogramowania od podstaw)
Zajęcia obejmują zagadnienia związane z koncepcjami algorytmów, iteratorów i zaawansowanych struktur danych na poziomie metaprogramowania
W przykładach wykorzystywane są elementy biblioteki standardowej w standardzie C++11 oraz elementy biblioteki Boost wspierające koncepcje tworzenia aplikacji na poziomie meta
Szczególny nacisk w trakcie zajęć kładziemy na zrozumienie aspektów wydajności czasu kompilacji oraz dostępnymi w standardzie C++11 narzędziami zwiększającymi produktywność programisty
Prezentowane mechanizmy odnosimy do aspektów praktyki, prezentując ich zalety, a także i koszt stosowania
Na zajęciach posługujemy się technologiami otwartymi z dostępem do kodu źródłowego
Zajęcia prowadzone są przez doświadczonych praktyków, którzy na co dzień stosują technologie związane z językiem C++ w rzeczywistych projektach. W trakcie zajęć używamy technologii i środowisk otwartych
Cele szkolenia
Poznanie technik identyfikowania obszarów zastosowań metaprogramowania we własnych projektach (toczących się jak i tych nowych)
Zapoznanie się z dostępnymi mechanizmami związanymi z metaprogramowaniem dostępnymi w języku C++11 jak i starszych
Zapoznanie się z biblioteką Boost MPL
Nauka praktycznego określania obszarów zastosowań technik metaprogramowania w języku C++ we własnych projektach
Nauka samodzielnego implementowania mechanizmów „poziomu meta” we własnych aplikacjach
Nauka podnoszenia reużywalności kodu projektów i bibliotek
Program
Metaprogramowanie - definicja i zakres zastosowania
- Programowanie czasu kompilacji
- Generator klas
- Złożenie klas
- Zmiana typu i podstawienie typu
Optymalizacja kodu na etapie kompilacji
- Zadziwiająco często powracający szablon
- Sizeof i zakres jego zastosowań
- Polimorfizmy - statyczny i dynamiczny
Cechy typu i manipulacja typem
- Powiązania i relacje pomiędzy typami
- Metafunkcje i metafunkcje numeryczne
- Biblioteka Boost Type Traits
- Metafunkcje bezargumentowe
- Lambda - w ramach C++11 oraz Boost
Iteratory i sekwencje
- Definicja sekwencji i iteratora na poziomie meta
- Dostępne klasy sekwencji na poziomie meta
- Definiowanie własnych sekwencji
Dostępne meta-algorytmy
- Idiomy i abstrakcja algorytmów
- Wielokrotne użycie meta-algorytmów
- Inserter na poziomie meta
- Definiowanie własnych meta-algorytmów
Widoki i adaptery meta-iteratorów
- Pojęcie i definiowanie własnego widoku
- Adapter meta-iteratora i jego obsługa
- MPL - biblioteka wspierająca metaprogramowanie
- Przegląd możliwości Boost MPL
- Zastosowanie Boost MPL
Języki osadzone zależne od dziedziny
- Języki DSL (ang. domain specific language) i zakresy ich zastosowań
- Definiowanie własnych języków DSL
Optymalizacje i zagadnienia zaawansowane
- Leniwe typowanie na poziomie meta
- Klasy i funkcje narzędziowe
- Kruczki i sztuczki w programowaniu na poziomie meta
