СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++

1,069 views

Published on

Нас окружает мир сетей, мобильных устройств, сайтов, облаков. Чтобы работать с этим миром, придумано невероятное количество технологий и языков программирования. Есть ли среди них место для языков Си/Си++? Стоит ли тратить время на их изучение, стоит ли использовать их в своих проектах? Не пора ли этим языкам на пенсию? Эти темы в своем докладе обсудит Андрей Карпов, активно участвующий в жизни сообщества Си++-программистов. Забегая вперед можно утверждать - языки Си/Си++ живее всех живых. Андрей расскажет о развитии языка и новых возможностях, появившихся в Си++11. Многие возможности существенно облегчают работу программиста и сокращают объем кода.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,069
On SlideShare
0
From Embeds
0
Number of Embeds
195
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++

  1. 1. Жив ли Си++?Прошлое, настоящее, будущее.Карпов Андрей Николаевичк.ф.-м.н., MVP (Visual C++),технический директорООО «СиПроВер»Сайт: www.viva64.comE-Mail: karpov@viva64.com
  2. 2. Умер ли Си/Си++?Нет. Он одна из важных технологий.Просто технологий стало больше!
  3. 3. • Кода на Си/Си++ в старых и новых системах не стало меньше.• Выросло количество разрабатываемых систем, где рационально использовать другие языки (web, мобильные телефоны, клиентские программы).• Аналогия с бумагой. Кажется, компьютерные технологии повсеместно могут заменить бумагу.
  4. 4. Говорить «стало меньше Си++» как говорить «меньше стала использоваться бумага»• Государственные учреждения. Куда ставить печать и подпись?• Надежность (архивы, военное дело).• Бумажные книги не исчезли.• Комиксы, раскраски для детей, оригами.• Как поможет iPhone в туалете?
  5. 5. Закрывать бумажную фабрику смысла нет.А стоит ли продолжать заниматься Си/Си++? Да. Это приносит деньги.Поговорим, почему это приносит деньги.
  6. 6. Почему язык Си/Си++ ещё очень долго будет популярен• Инерция;• Ресурсоемкие вычисления;• Экономия энергии;• Ограничения встраиваемых и мобильных систем;• Новые языки приходят и уходят, а Си/Си++ остаётся.
  7. 7. Инерция• Существуют такие продукты, как «CHARON- PDP11 for Windows» для поддержки PDP11. Компания Stromasys - www.stromasys.ch• Неудача Intel c 64-битной архитектурой Itanium.• Огромное количество БОЛЬШИХ библиотек. Пример: библиотека ACIS.
  8. 8. Ресурсоемкие вычисления• Активно используется Фортран. Си/Си++ рассматриваются для таких задач в перспективе. Intel активно работает над включением матриц в стандарт языка Си++.• Си/Си++ позволяют максимально полно использовать доступную память.• Си самый быстрый (после Фортрана). Не верьте рекламным измерениям скорости.
  9. 9. Экономия энергии• Макро. Для датацентра с тысячами обращений в секунду важно, работает алгоритм 100 или 150 микросекунд.• Микро. Важно для встраиваемых систем, работающих долгое время.
  10. 10. Ограничения встраиваемых и мобильных систем• Нужно работать быстро, чтобы уменьшить потребление энергии.• Ограничения объема памяти.• Новое направление – робототехника на дому.• Лучше потратить деньги на оптимизацию ПО, чем увеличить стоимость аппаратной части миллионов устройств.
  11. 11. Новые языки приходят и уходят, а Си/Си++ остаётся C++ Applications: http://www.stroustrup.com/applications.html• Adobe Systems: Photoshop, Acrobat, Illustrator, ...• Apple: OS X (разные языки, но в основном Си++)• Autodesk: различные CAD системы• CERN: Data analysis• Facebook: Several high-performance and high- reliability components.• Google: Chromium, MapReduce, Google file system.• Microsoft: Windows, Microsoft Office, ...• Mozilla: Firefox, Thunderbird• ...
  12. 12. Си/Си++ не только жив, но и постоянно развивается
  13. 13. О новом в языке(будем говорить только про Си++)
  14. 14. Делегирующие конструкторыclass File{public: File(char const * filename, char const * mode) : file_(fopen(filename, mode)) { } ~File() { fclose(file_); }Теперь нам хочется сделать что-то сложное вконструкторе, что может бросить исключение.
  15. 15. Делегирующие конструкторыclass File{ File(FILE * file) : file_(file) {}public: File(char const * filename, char const * mode) : File(fopen(filename, mode)) { Foo(); }Другое применение –можно избавиться от функции Init().
  16. 16. Диапазонный for, auto, списки инициализацииauto x = A * B;std::vector<string> string_array = { "aa", "bb" };for (auto s : string_array){ cout << s << endl;}for (const auto x : { 1,2,3,5,8,13,21,34 }) cout << x << n;
  17. 17. Управление поведением по умолчанию: default и deleteСейчас стандартная идиома «запрета копирования» может бытьявно выражена следующим образом:class X { … X& operator=(const X&) = delete; X(const X&) = delete;И наоборот, мы можем явно сказать о том, что хотимиспользовать поведение копирования по умолчанию:class Y { … Y& operator=(const Y&) = default; Y(const Y&) = default;
  18. 18. enum class – строго типизированные перечисленияОбъявления “enum class Color { red, blue };”решают проблемы:• Стандартные перечисления (enums) могут неявно преобразовываться к int.• Стандартные перечисления экспортируют свои значения в окружающую область видимости, что приводит к коллизиям имен.• Невозможно указать тип, лежащий в основе стандартных перечислений.
  19. 19. сonstexpr – обобщенные гарантировано константные выражения constexpr int Foo(int a, int b) { constexpr int tmp = a + 10; return tmp | b; } int x = Foo(1, 2);
  20. 20. decltype – тип выраженияvoid f(const vector<int>& a, vector<float>& b){ typedef decltype(a[0]*b[0]) Tmp; for (int i=0; i<b.size(); ++i) { Tmp* p = new Tmp(a[i]*b[i]); // ... } // ...}
  21. 21. Инициализация членов класса при объявленииclass A {public: int a = 7;};Эквивалентно:class A {public: int a; A() : a(7) {}};
  22. 22. Статические утвержденияstatic_assert( sizeof(long)>=8, "64-bit code generation required for this library.");
  23. 23. nullptr - литерал для задания нулевого указателя void f(int); void f(char*); f(0); // вызов f(int) f(nullptr); // вызов f(char*)
  24. 24. Шаблоны с переменным числом параметровtemplate<typename T, typename... Args>void printf(const char* s, T value, Args... args){ while (s && *s) { if (*s==% && *++s!=%) { std::cout << value; return printf(++s, args...); } std::cout << *s++; }}
  25. 25. Лямбда-выраженияstd::sort(v.begin(), v.end(), [](int a, int b) { return abs(a)<abs(b); });vector<int> myList;int total = 0;for_each(myList.begin(), myList.end(), [&total](int x){ total += x;});std::cout << total;auto myFunc = [this]() { this->PrivateMemberFunc (); };
  26. 26. Другое• Rvalue ссылки &&• Пользовательские литералы• Атрибуты **…++• Класс array: array<int,6> a = { 1, 2, 3 };• …
  27. 27. Дополнительные ссылки• C++ 11 FAQ от Бьярна Страуструпа (перевод) http://sergeyteplyakov.blogspot.com/2012/05 /c-11-faq.html• «Универсальные» ссылки в C++11 или T&& не всегда означает «Rvalue Reference» http://habrahabr.ru/post/157961/

×