Podobne dokumenty
Projekt: Mikro zaprogramowane na sukces!

C++ język nie dla ludzi o słabych nerwach. Małgorzata Bieńkowska

Programowanie. Sylwester Arabas. prowadzący ćwiczenia: Magdalena Kuich, Krzysztof Piasecki, Łukasz Dulny. Wydział Fizyki Uniwersytetu Warszawskiego

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

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Materiały. Języki programowania II (Java+AVR-GCC) Literatura

Programowanie. Sylwester Arabas. prowadzący ćwiczenia: Magdalena Kuich, Krzysztof Piasecki, Łukasz Dulny. Wydział Fizyki Uniwersytetu Warszawskiego

Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński

Zmiany techniczne wprowadzone w wersji Comarch ERP Altum

Microsoft IT Academy kurs programowania

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Programowanie obiektowe

Programowanie obiektowe w języku

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 8: Structured PredicCon 2

deep learning for NLP (5 lectures)

Zarządzanie sieciami telekomunikacyjnymi

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Sexy unit testy. czyli o kilku praktykach w testach jednostkowych

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Informatyka. Wy-03 Dynamiczna alokacja pamięci, wyjątki. mgr inż. Krzysztof Kołodziejczyk

Wstęp. Przetwarzanie współbieżne, równoległe i rozproszone

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 1

Network Services for Spatial Data in European Geo-Portals and their Compliance with ISO and OGC Standards

Warsztaty: Angular, ngrx, RxJS, TypeScript

Programowanie RAD Delphi

Signals + Threads: Qt vs. Boost

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

Tworzenie aplikacji w języku Java

1. CZYM JEST SERIALIZACJA

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

Wykład 1

Hard-Margin Support Vector Machines

Arrays -II. Arrays. Outline ECE Cal Poly Pomona Electrical & Computer Engineering. Introduction


Dzisiejszy wykład. Przestrzenie nazw (namespaces) Funkcje o zmiennej liczbie argumentów

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 9: Inference in Structured Prediction

Stargard Szczecinski i okolice (Polish Edition)

ARNOLD. EDUKACJA KULTURYSTY (POLSKA WERSJA JEZYKOWA) BY DOUGLAS KENT HALL

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

Curiously recurring template pattern

Raport bieżący: 44/2018 Data: g. 21:03 Skrócona nazwa emitenta: SERINUS ENERGY plc

Programowanie Komputerów

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Program szkolenia: Fundamenty testowania

Proposal of thesis topic for mgr in. (MSE) programme in Telecommunications and Computer Science

Realizacja systemów wbudowanych (embeded systems) w strukturach PSoC (Programmable System on Chip)

Sieciowa komunikacja procesów - XDR i RPC

MS Visual Studio 2005 Team Suite - Performance Tool

Pobieranie argumentów wiersza polecenia

Refleksja oraz metaklasy w C++ W dążeniu do prostszego oraz efektywniejszego kodu w C++

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

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


Optymalizacje c++11. Piotr Padlewski. Warsaw C++ Users Group

Sargent Opens Sonairte Farmers' Market

Systemy wbudowane. Poziomy abstrakcji projektowania systemów HW/SW. Wykład 9: SystemC modelowanie na różnych poziomach abstrakcji

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Techniki Programowania

Strona główna > Produkty > Systemy regulacji > System regulacji EASYLAB - LABCONTROL > Program konfiguracyjny > Typ EasyConnect.

Tychy, plan miasta: Skala 1: (Polish Edition)

Zaawansowane programowanie w języku C++ Wstęp

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Wyjątki. try - except

Budowa przełączników modularnych. Piotr Głaska Senior Product Manager Enterprise Networking Solutions

Programowanie obiektowe C++

Rozpoznawanie twarzy metodą PCA Michał Bereta 1. Testowanie statystycznej istotności różnic między jakością klasyfikatorów

Wstęp. Przetwarzanie równoległe. Krzysztof Banaś Obliczenia równoległe 1

Zakopane, plan miasta: Skala ok. 1: = City map (Polish Edition)

Zarządzanie sieciami komputerowymi - wprowadzenie

PROGRAMOWANIE w C prolog

Programowanie obiektowe w VB cz 2

Instrukcja obsługi User s manual

Polimorfizm a klasy generyczne w języku Java. Zdzisław Spławski 1

MaPlan Sp. z O.O. Click here if your download doesn"t start automatically

This is CS 50. Harvard College s Introduction to Computer Science I \ DAVID J. MALAN 99 WEEK 2

Machine Learning for Data Science (CS4786) Lecture11. Random Projections & Canonical Correlation Analysis

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

Wprowadzenie do psql i SQL. Język komend psql. Podstawy instrukcji SELECT

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Linear Classification and Logistic Regression. Pascal Fua IC-CVLab

Programowanie obiektowe

Programowanie obiektowe

Programowanie Komputerów

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana


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

Projekt i uruchomienie prostego serwera OPC UA w oparciu o oprogramowanie szkieletowe Quasar opracowane w CERN

Podstawy informatyki. Prowadzący cz. 2 (C++) wykładu: dr inż. Sylwester Przybył Instytut Fizyki WFT tel. (0-61) ;

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

Machine Learning for Data Science (CS4786) Lecture 24. Differential Privacy and Re-useable Holdout

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

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

kdpw_stream Struktura komunikatu: Status komunikatu z danymi uzupełniającymi na potrzeby ARM (auth.ste ) Data utworzenia: r.

Dolny Slask 1: , mapa turystycznosamochodowa: Plan Wroclawia (Polish Edition)

THE RAIL RATES valid from 1st October 2015

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

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

Transkrypt:

Historia i przyszłość C++ Łukasz Ziobroń

Agenda Gdzie jest używany C++? Dlaczego C++ jest znów na topie? Początki C++ Standaryzacja C++ Timeline Wersje C++ Historia C++ Status Przyszłość C++ Zgodność kompilatorów ze standardem Podsumowanie Ranking języków programowania 2/56

Gdzie jest używany C++? Systemy operacyjne: Windows, Apple's OS, Linux Google, Amazon, Bloomberg, Facebook IE, Firefox, Safari, Chrome Skanery tomograficzne, systemy kontroli lotów, rakiety, silniki statków, automobile, NASA łaziki marsjańskie, CERN Smartfony, telewizory, sprzęt AGD 3/56

Dlaczego C++ jest znów na topie? Więcej obliczeń/wat Technologie mobilne oszczędność baterii Cloud computing High performance computing & GPU Lepsza abstrakcja niż w C Bezpieczeństwo (smart_ptr, wyjątki, type safety) Brak narzutu VM 4/56

Początki C++ 5/56

Początki C++ Domain-specific abstraction General-purpose abstraction Fortran Fortran Cobol Cobol Simula Simula Java Java C++ C++ C++11 C++11 Direct mapping to hardware Assembler Assembler BCPL BCPL CC C# C# Źródło: Essence of C++, Bjarne Stroustrup 6/56

Standaryzacja C++ ISO International Standards Organization IEC International Electrotechnical Commission JTC 1 Joint Technology Committee 1: Information Technology SC22 Sub Committee 22: Programming Languages WG21 Working Group 21: C++ 7/56

Standaryzacja C++ WG21: C++ Spotkania 2-3 razy / rok przez 6 dni Głównie wolontariat, częściowo sponsorowany Główni członkowie: Apple, IBM, Intel, Google, Microsoft, Qualcomm, Red Hat, niektóre uniwersytety Każdy może uczestniczyć i zgłaszać propozycje Tylko członkowie głosują i akceptują propozycje 8/56

Timeline 1979 C with Classes 1984 Zmiana nazwy na C++ 1985 The C++ Programming Language, Pierwsza komercyjna wersja C++. 1989 The Annotated C++ Reference Manual ( the ARM ) 1991 The C++ Programming Language, 2nd edition 1997 The C++ Programming Language, 3rd edition. Powstanie ISO C++. 1998 Standard ISO C++ 1999 Powstanie Boosta jako kandydata na bibliotekę standardową 2002 Początek prac nad nową wersją standardu: C++0x 2003 Standard ISO C++03 bug fix 2006 ISO C++ Technical Report on Performance 2009 C++0x feature completed 2011 Standard ISO C++11 formalnie zatwierdzony 2012 Pierwsze implementacje C++11. Początek prac nad kolejnymi standardami 2013 The C++ Programming Language, 4th edition (C++11) 9/56

Wersje C++ Wersja Data publikacji standardu Pierwsza kompletna implementacja C++84 (1989 - the ARM ) - C++98 wrzesień 1998 2003 (EDG + Dinkumware) C++03 październik 2003 C++11 (C++0x) wrzesień 2011 Kwiecień 2013 (Clang 3.3) C++14 (C++1y) marzec 2014 (draft), wrzesień 2014 Listopad 2013 (Clang 3.3+) C++17 2017 10/56

Wersje C++ 11/56

Historia C++ Czasy zamierzchłe (1979-1997) Starożytność (1998-2005) Średniowiecze (2006-2010) wożytność (2011-2014) 12/56

1979: C with Classes New features: classes, member functions, derived classes separate compilation public and private access control friends type checking of function arguments default arguments inline functions overloaded assignment operator constructors, destructors f() same as f(void) Libraries: the concurrent task library (not in C++) 13/56

1985: Cfront 1.0 New features: virtual functions function and operator overloading references new and delete operators the keyword const scope resolution operator Library additions: complex string iostream 14/56

1989: Cfront 2.0 New features: multiple inheritance pointers to members protected access type-safe linkage abstract classes static and const member functions class-specific new and delete Library additions: I/O manipulators 15/56

1990: The Annotated C++ Reference Manual New features: namespaces exception handling nested classes 1991: Implemented in Cfront 3.0 1993: Cfront R.I.P. 16/56

1998: C++98 New features: Library additions: RTTI (dynamic_cast, typeid) containers covariant return types algorithms cast operators iterators function objects (based on STL), locale bitset valarray auto_ptr templatized string iostream complex. mutable bool declarations in conditions template instantiations, member templates export 17/56

2003: C++03 bug fix New features: value initialization Defect Reports fixed: 125 defects, including defect 69, which made std::vector contiguous. 18/56

2007: TR1 (Technical Report 1) From Boost: Reference wrapper Smart pointers Result Of Bind Type Traits Random Mathematical Special Functions Tuple Array Unordered Containers (including Hash) Regular Expressions From C99: mathematical functions from math.h that were new in C99 blank character class floating-point environment hexfloat I/O Manipulator fixed-size integral types the long long type va_copy the snprintf() and vscanf() families of functions the C99 conversion specifies for printf() and scanf() families of functions. 19/56

2011: C++11 C++ feels like a new language - Bjarne Stroustrup Pełne wsparcie w GCC 4.9 i Clang 3.3 20/56

2011: C++11 C++ feels like a new language - Bjarne Stroustrup Pełne wsparcie w GCC 4.9 i Clang 3.3 C++0x == C++11 (0x = 0B) 21/56

language library C++11 C++98 + TR1 C++11 C++98 C++98 Źródło: One C++, Herb Sutter 22/56

proxies for size comparisons: spec #words library #types (non- plumbing ) language library Java 7 (2011) C# 3.0 (2008) C++11 C++11 Źródło: One C++, Herb Sutter 23/56

2008.NET FX + VS Pro Libs language library Java SE 7 2008.NET FX (only) Java 7 (2011) C# 3.0 (2008) C++11 C++11 Źródło: One C++, Herb Sutter 24/56

PCL: Portable C++ Library zbiór użytecznych bibliotek dostępny na większość platform dostarczany i wspierany przez implementację C++ 25/56

2011: C++11 New language features: New language features: auto and decltype variadic templates defaulted and deleted functions generalized unions final and override generalized PODs trailing return type Unicode string literals rvalue references user-defined literals, attributes move constructors/move assignment lambda expressions scoped enums constexpr and literal types noexcept list initialization alignof and alignas delegating and inherited constructors multithreaded memory model thread-local storage brace-or-equal initializers GC interface nullptr range for (based on a Boost library) long long, char16_t and char32_t type aliases static assertions (based on a Boost library) 26/56

2011: C++11 New library features: From Boost: atomic operations library the thread library emplace() and other use of rvalue references throughout all parts of the existing library exception_ptr error_code and error_condition iterator improvements (std::begin, std::end, std::next, std::prev) std::initializer_list stateful and scoped allocators forward_list chrono library ratio library new algorithms Unicode conversion facets From TR1: all of TR1 except Special Functions From C: C-style Unicode conversion functions Defect Reports fixed: 363 defects resolved by the 2008 draft and 322 defects resolved after 27/56

Status https://isocpp.org/std/status Skąd zdobyć standard? Kupić (30 USD) Ściągnąć working draft (13.10.2013) https://isocpp.org/std/the-standard 28/56

Wersje C++ 29/56

2014: C++14 Luty 2014 DIS (Draft International Standard) Planowana publikacja pod koniec lata 2014 Warunek: wszystkie instytucje standaryzacyjne państw członkowskich zaakceptują standard 30/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation New library features: std::make_unique std::shared_mutex and std::shared_lock std::index_sequence std::exchange std::quoted many small improvements to existing library facilities, such as: two-range overloads for some algorithms type alias versions of type traits user-defined string, duration, and complex number literals, etc. Defect Reports fixed: 149 library issues 31/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation auto lambda = [](auto x, auto y) {return x + y;}; 32/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation auto lambda = [value = 1] {return value;}; auto ptr = std::make_unique<int>(10); auto lambda = [ptr = std::move(ptr)] {return *ptr;}; 33/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation auto DeduceReturnType(); auto Correct(int i) { if (i == 1) return i; else return Correct(i-1)+i; } auto Wrong(int i) { if(i!= 1) return Wrong(i-1)+i; else return i; } // deduced as int // ok to call it now // Error - no prior return // deduced as int 34/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation int i; int&& f(); auto x3a = i; decltype(i) x3d = i; auto x4a = (i); decltype((i)) x4d = (i); auto x5a = f(); decltype(f()) x5d = f(); // // // // // // decltype(x3a) decltype(x3d) decltype(x4a) decltype(x4d) decltype(x5a) decltype(x5d) is is is is is is int int int int& int int&& 35/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation C++14 will relax these restrictions. Constexpr-declared functions may now contain the following: Any declarations except: static or thread_local variables. Variable declarations without initializers. The conditional branching statements if and switch. goto is not allowed. All looping statements, including range-based for. Expressions may change the value of an object if the lifetime of that object began within the constant expression function. This includes calls to any non-const constexpr-declared non-static member functions. 36/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation In prior versions of C++, only functions, classes or using-declarations could be templated. C++14 now allows the creation of variables that are templated. Example: PI - 3 when read as an integral type; the closest value possible with float, double or long double precision when read as float, double or long double, respectively 37/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation C++11 added member initializers, expressions to be applied to members at class scope if a constructor did not initialize the member itself. The definition of aggregates was changed to explicitly exclude any class with member initializers; therefore, they are not allowed to use aggregate initialization. C++14 will relax this restriction, allowing aggregate initialization on such types. If the braced init list does not provide a value for that argument, the member initializer will take care of it. You can now use initialization braces on aggregate members such as arrays. 38/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation char x = 0b00100110; char y = 0B11101100; // x = 38 // y = 236 39/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation long x = 1'000'000'000; 40/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation gcc, clang: attribute ((deprecated)) int a; C++14: [[deprecated]] void foo(int); [[deprecated("replaced by bar")]] void foo(int); 41/56

2014: C++14 New language features: generic lambdas lambda captures expressions function return type deduction alternate type deduction on declaration relaxed restrictions on constexpr functions variable templates aggregate initialization for classes with brace-or-equal initializers. binary literals digit separators [[deprecated]] attribute C++ sized deallocation C++11 introduced the option to define a static member function operator delete that has size as a parameter, indicating the size of the object to be deleted. C++11 did not introduce a global operator delete with size indication, which is now fixed in C++14 42/56

Zgodność kompilatorów ze standardem GCC pełne wsparcie C++11: kwiecień 2014 (GCC 4.9.0) pełne wsparcie C++14:? LLVM (Clang) pełne wsparcie C++11: kwiecień 2013 (Clang 3.3) pełne wsparcie C++14: styczeń 2014 (libc++) MS Visual C++ Compiler vember 2013 CTP pełne wsparcie C++11:? pełne wsparcie C++14:? 43/56

Clang 3.4 GCC 4.9 VS v 2013 CTP Intel 14.0 Return type deduction for regular functions Binary literals Generic lambdas Partial Tweaked wording for contextual conversions Runtime sized arrays with automatic storage duration Initialized lambda captures [[deprecated]] attribute Single quotation mark as digit separator C++ sized deallocation Variable templates Relaxed requirements on constexpr functions Member initializers and aggregates Avoiding/fusing memory allocations N/A C++14 language feature 44/56

libc++ libstdc++ VS v 2013 CTP make_unique Improved operator functors Additional template aliases for transformation type traits Fixing constexpr member functions without const exchange() utility function Retrieving tuple elements by type std::result_of and SFINAE Improvements to integral_constant User-defined literals for standard library types More robust non-modifying sequence operations Quoted string I/O manipulator constexpr library additions: chrono constexpr library additions: containers constexpr library additions: utilities constexpr library additions: complex constexpr library additions: functional C++14 library features 45/56

C++14 library features libc++ libstdc++ VS v 2013 CTP Compile-time integer sequences Shared locking Heterogeneous comparison lookup in associative containers Null forward iterators Sized deallocation Consistent metafunction aliases Discouraging rand() in C++14 46/56

Obecne prace ISO 8 TS (Technical Specification) Publikacje w 2014 i 2015 Dostarczanie niezależnie od kolejnych wydań standardu ISO C++ w std::experimental Użytkownicy będą mogli wypróbować nowe rzeczy przed ich oficjalnym wydaniem ISO będzie mogło zebrać opinie i poprawić TS zanim będzie oficjalną częścią standardu Można podsyłać własne propozycje usprawnień 47/56

Obecne prace ISO Programming Language C++ IS: Richard Smith. This is the main C++ Standard project. Draft: 2017 File System TS: Beman Dawes. Work based on Boost.Filesystem v3, including file and directory iteration. Draft: June 2014 Library Fundamentals TS: Jeffrey Yasskin. A set of standard library extensions for vocabulary types like optional<> and other fundamental utilities. Draft: v 2014 Networking TS: Kyle Kloepper. A small set of network-related libraries including support for network byte order transformation and URIs. Draft: Oct 2015 Concepts TS: Andrew Sutton. Extensions for template type checking. Draft: May 2015 48/56

Obecne prace ISO Arrays TS: Lawrence Crowl. Language and library extensions related to arrays, including runtime-sized arrays (aka arrays of runtime bound) and dynarray<>. Draft:? Parallelism TS: Jared Hoberock. Initially includes a Parallel STL library with support for parallel algorithms to exploit multiple cores, and vectorizable algorithms to exploit CPU and other vector units. Draft: May 2015 Concurrency TS: Artur Laksberg. Initially includes library support for executors and non-blocking extensions to std::future. Additionally may include language extensions like await, and additional libraries such as concurrent hash containers and latches. Draft: Oct 2015 Transactional Memory TS: Michael Wong. A promising way to deal with mutable shared memory, that is expected to be more usable and scalable than current techniques based on atomics and mutexes. Draft: May 2015 49/56

Podsumowanie Zalety C++: Kompatybilność Wydajność Przenośność Obszar zastosowań Programowanie wysoko i niskopoziomowe Platformy z ograniczonymi zasobami Wady C++: Kompilatory są bardzo skomplikowane Czasochłonny C+ 50/56

Ranking języków programowania Źródło: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 51/56

Wykres na podstawie zapytań w wyszukiwarkach internetowych Źródło: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 52/56

Źródło: http://codeeval.com. Kwiecień 2014 53/56

Źródło: http://codeeval.com. Kwiecień 2014 54/56

Źródło: http://langpop.corger.nl. Czerwiec 2014 55/56

Źródła http://www.isocpp.org http://www.open-std.org/jtc1/sc22/wg21/ http://en.cppreference.com/w/cpp/language/history http://cpprocks.com/c1114-compiler-and-library-shootout/ http://meetingcpp.com/index.php/br/items/looking-at-c14.html http://codeeval.com/ http://langpop.corger.nl http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Peter Sommerlad, TFZ-C++14 Standard Bjarne Stroustrup, The C++ Programming Language, fourth edition Bjarne Stroustrup, The Design and Evolution of C++ Bjarne Stroustrup, The Essence of C++, Going Native 2013 Herb Sutter, One C++, Going Native 2013 56/56