Robert Kawulak C++09. Co nowego w nadchodzącym standardzie języka?

Podobne dokumenty
Standard C++0x (C++1x?) Marcin Świderski

Język C++ Różnice między C a C++

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Szablony funkcji i szablony klas

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Wprowadzenie do szablonów klas

Podstawy Programowania Obiektowego

Programowanie obiektowe w C++ Wykład 1

Zaawansowane programowanie w języku C++ Klasy w C++

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

6 Niektóre nowe cechy standardu C++11

Spis treści. Wprowadzenie 15

TEMAT : KLASY POLIMORFIZM

Paradygmaty programowania

Wykład 1

Podstawy programowania obiektowego

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

TEMAT : KLASY DZIEDZICZENIE

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Java Język programowania

Wstęp do Programowania 2

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Materiały do zajęć VII

JavaScript - korzenie

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Wprowadzenie do szablonów szablony funkcji

Projektowanie klas c.d. Projektowanie klas przykład

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Wprowadzenie do szablonów szablony funkcji

Microsoft IT Academy kurs programowania

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Zaawansowane programowanie w C++ (PCP)

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Szablony funkcji i klas (templates)

Część I Programowanie niskiego poziomu w języku C 19

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie 2. Język C++. Wykład 3.

Język C++ Programowanie obiektowe

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Paradygmaty programowania. Paradygmaty programowania

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Programowanie obiektowe w C++ Wykład 12

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Języki i metodyka programowania. Wprowadzenie do języka C

W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast

Przeciążanie operatorów

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wstęp do programowania obiektowego, wykład 7

Programowanie obiektowe

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Zaawansowane programowanie w C++ (PCP)

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Wykład 0 Informacje Podstawowe

Dziedziczenie. Tomasz Borzyszkowski

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Rok akademicki: 2016/2017 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Programowanie obiektowe - 1.

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie Komputerów

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Cena szkolenia. Opis kursu

Technologie i usługi internetowe cz. 2

Języki i techniki programowania Ćwiczenia 2

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Zaawansowane programowanie w C++ (PCP)

PROGRAMOWANIE GENERYCZNE W JĘZYKU C++

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Transkrypt:

Robert Kawulak C++09 Co nowego w nadchodzącym standardzie języka?

Wprowadzenie Zawsze marzyłem żeby mój komputer był tak samo łatwy w obsłudze jak mój telefon. Moje marzenie się spełniło. Już nie umiem obsłużyć telefonu. Bjarne Stroustrup

Szczypta historii 1979: Bjarne S. rozpoczyna pracę nad C with classes 1983: Bjarne S. zmienia nazwę na C++, dodając: funkcje wirtualne, przeładowanie funkcji i operatorów, referencje i in. 1989: C++ Release 2.0 wielokrotne dziedziczenie, klasy abstrakcyjne, statyczne funkcje składowe, protected, ANSI rozpoczyna standaryzację 1990: The Annotated C++ Reference Manual szablony, wyjątki, przestrzenie nazw, bool 1998: ukończenie standaryzacji języka przez ISO (ANSI jako doradca) C++98 2003: wydanie standardu z poprawkami C++03 2005: TR1 -shared_ptr, bind, type_traits, regex, array i in. 2009?: C++0x, czyli C++, jakiego jeszcze nie widziałeś!

Jak tworzony jest standard C++? standard otwarty, nie związany z żadną firmą duży wpływ społeczności użytkowników (każdy może coś zaproponować) kilkudziesięcioosobowy komitet ekspertów - ochotników regularne spotkania, głosowania i sugestie po standaryzacji 5-letni okres zamrożenia (jedynie poprawki błędów)

Główne kryteria rozwoju C++ bezpieczeństwo (świadomość zagrożeń) łatwość uczenia ( The problem with using C++ is that there's already a strong tendency in the language to require you to know everything before you can do anything - Larry Wall) przenaszalność wydajność ( nie płać za to czego nie używasz zero-overhead rule ) brak ukierunkowania na konkretny styl programowania (programowanie proceduralne, obiektowe, generyczne...) dawanie programiście wyboru (nawet jeśli może wybraćźle) wsteczna kompatybilność z C (na ile to możliwe) unikanie elementów specyficznych dla danej platformy lub nie będących ogólnie użytecznymi jeśli nowy element może być zrealizowany bibliotecznie, to nie powinien być dodawany do samego języka, ale do biblioteki standardowej Więcej w książce Bjarne a The Design And Evolution of C++

Opis nowości

Wątki zadanie trudniejsze niż się z pozoru wydaje (asynchroniczne wyjątki, zmiana modelu pamięci itd.) większość kompilatorów i tak je implementuje, ale na dziko trzeba zastosować podejście mieszane (język + biblioteka) język: nowy model pamięci, elementarna synchronizacja, nowe znaczenie volatile biblioteka: tworzenie i zarządzanie wątkami, elementy synchronizacji wyższego poziomu

Garbage Collector smart_ptr niewystarczający GC tak, ale: opcjonalny niewidzialny dla programisty pozostaje problem finalizacji

Koncepty pozwalają łatwiej tworzyć bezpieczniejsze szablony upraszczają użycie szablonów przykład: template<typename T> const T& min(const T& x, const T& y) { return x < y? x : y; } co się stanie, gdy napiszemy: std::complex<float> a, b; min(a, b); rozwiązanie: template<lessthancomparable T> const T& min(const T& x, const T& y) { return x < y? x : y; }

Automatyczna dedukcja typów auto automatycznie nadaje typ nowej zmiennej problem: std::map< std::basic_string<char>, std::complex<double> > cont; for(std::map< std::basic_string<char>, std::complex<double> >::const_iterator i = c.begin(), end = c.end(); i!= end; ++i) {...} rozwiązanie: for(auto i = c.begin(), end = c.end(); i!= end; ++i) {...} decltype pozwala otrzymać typ wyrażenia problem: template<class A, class B>??? add(const A& a, const B& b) { return a + b; } rozwiązanie: template<class A, class B> decltype(a + b) add(const A& a, const B& b) { return a + b; }

Konstrukcja obiektów konstruktor sekwencyjny problem pojemników nie można inicjalizować tak jak tablic: std::vector<int> v = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; rozwiązanie: template<typename T> class vector {... vector(initializer_list<int> seq) {...} }; delegacja konstruktorów struct S { S(int i, string s) {...} S(int i) : S(i, ) { } S(string s) : S(0, s) { } S() : S(0, ) { } }; dziedziczenie konstruktorów struct X : public S { using S::S; X(int i) : S(i, X ) { } }; X a(4, 4 ), b(8), c( c ), d;

Moduły podejście C (nagłówki i jednostki translacji): długa kompilacja słabe odseparowanie interfejsu od implementacji trudne ukrycie implementacji przykład nowego podejścia: // Plik1.cpp: export Lib { import std; public: struct S { S() { std::cout << S()\n ; } }; } // Plik2.cpp: import Lib; int main() { S s; } korzyści: szybsza kompilacja uniknięcie problemów z interferencją makr ukrycie danych prywatnych większa pewność odpowiedniej kolejności inicjalizacji danych statycznych uniknięcie niewykrytych problemów ODR ( one definition rule zasada jednej definicji ) umożliwia tworzenie bibliotek dynamicznych upraszcza drogę do implementacji szablonów export

Wyrażenia lambda umożliwiają łatwe tworzenie obiektów funkcyjnych podejście biblioteczne ma pewne ograniczenia przykład szukanie w pojemniku v liczb mniejszych od 4: tradycyjnie: struct lessthan { int val; lessthan(int i) : val(i) { } bool operator()(int i) const { return i < val; } }; find_if(v.begin(), v.end(), lessthan(4)); z wykorzystaniem bindingu: find_if(v.begin(), v.end(), std::bind2nd(std::less<int>(), 4)); z wyrażeniami lambda: find_if(v.begin(), v.end(), _1 < 4);

Wybrane pozostałe drobne zmiany statyczne asercje static_assert(sizeof(t) > 1); cechy typów (type_traits), np: is_empty, is_abstract problem >> w szablonach: std::vector<std::complex<double>> vec; long long (śladami C99) aliasy szablonów template<typename T> using string_map = std::map<std::string, T>; bezpieczniejsze typy wyliczeniowe enum class Val : unsigned long { E1, E2, E3 = 10, E4 /* = 11 */ }; Val v = 10; Val v = Val::E3; pętle for_each: std::vector<int> v; for_each(auto x : v) std::cout << x << std::endl; bardziej literalne literały znakowe do tej pory: "<HEAD>\n" "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=windows-1252\">\n" "</HEAD>\n" w C++09: R"$\ <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252"> </HEAD> $"

Podsumowując...

Dla ciekawskich: http://www.open-std.org/jtc1/sc22/wg21/ http://www.openstd.org/jtc1/sc22/wg21/docs/papers/2006/n2 122.htm http://en.wikipedia.org/wiki/c++0x http://www.informit.com/guides/content.asp?g=c plusplus&seqnum=216

Pytania...?

Dziękuję za uwagę!