SlideShare a Scribd company logo
Жив ли Си++?
Прошлое, настоящее, будущее.

Карпов Андрей Николаевич
к.ф.-м.н., MVP (Visual C++),
технический директор
ООО «СиПроВер»
Сайт: www.viva64.com
E-Mail: karpov@viva64.com
Умер ли Си/Си++?
Нет. Он одна из важных
      технологий.

Просто технологий стало
        больше!
• Кода на Си/Си++ в старых и новых системах
  не стало меньше.
• Выросло количество разрабатываемых
  систем, где рационально использовать
  другие языки (web, мобильные телефоны,
  клиентские программы).
• Аналогия с бумагой. Кажется,
  компьютерные технологии повсеместно
  могут заменить бумагу.
Говорить «стало меньше Си++» как
      говорить «меньше стала
      использоваться бумага»
• Государственные учреждения. Куда ставить
  печать и подпись?
• Надежность (архивы, военное дело).
• Бумажные книги не исчезли.
• Комиксы, раскраски для детей, оригами.
• Как поможет iPhone в туалете?
Закрывать бумажную фабрику
         смысла нет.

А стоит ли продолжать заниматься
             Си/Си++?

    Да. Это приносит деньги.

Поговорим, почему это приносит
           деньги.
Почему язык Си/Си++ ещё очень
        долго будет популярен
• Инерция;
• Ресурсоемкие вычисления;
• Экономия энергии;
• Ограничения встраиваемых и мобильных
  систем;
• Новые языки приходят и уходят, а Си/Си++
  остаётся.
Инерция
• Существуют такие продукты, как «CHARON-
  PDP11 for Windows» для поддержки PDP11.
  Компания Stromasys - www.stromasys.ch

• Неудача Intel c 64-битной архитектурой
  Itanium.

• Огромное количество
  БОЛЬШИХ библиотек.
  Пример: библиотека ACIS.
Ресурсоемкие вычисления
• Активно используется Фортран. Си/Си++
  рассматриваются для таких задач в
  перспективе. Intel активно работает над
  включением матриц в стандарт языка Си++.
• Си/Си++ позволяют максимально полно
  использовать доступную память.
• Си самый быстрый (после Фортрана). Не
  верьте рекламным измерениям скорости.
Экономия энергии
• Макро. Для датацентра с
  тысячами обращений в
  секунду важно, работает
  алгоритм 100 или 150
  микросекунд.

• Микро. Важно для
  встраиваемых
  систем, работающих долгое
  время.
Ограничения встраиваемых и
         мобильных систем
• Нужно работать быстро, чтобы уменьшить
  потребление энергии.
• Ограничения объема памяти.
• Новое направление – робототехника на
  дому.
• Лучше потратить деньги на оптимизацию
  ПО, чем увеличить стоимость аппаратной
  части миллионов устройств.
Новые языки приходят и уходят, а
           Си/Си++ остаётся
    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
•   ...
Си/Си++ не только жив, но и
  постоянно развивается
О новом в языке
(будем говорить только про Си++)
Делегирующие конструкторы
class File
{
public:
  File(char const * filename, char const * mode)
      : file_(fopen(filename, mode))
  {
  }

 ~File()
 {
   fclose(file_);
 }

Теперь нам хочется сделать что-то сложное в
конструкторе, что может бросить исключение.
Делегирующие конструкторы
class File
{
  File(FILE * file) : file_(file)
  {}

public:
  File(char const * filename, char const * mode)
      : File(fopen(filename, mode))
  {
    Foo();
  }

Другое применение –
можно избавиться от функции Init().
Диапазонный 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';
Управление поведением по
        умолчанию: default и delete
Сейчас стандартная идиома «запрета копирования» может быть
явно выражена следующим образом:

class X {
  …
  X& operator=(const X&) = delete;
  X(const X&) = delete;


И наоборот, мы можем явно сказать о том, что хотим
использовать поведение копирования по умолчанию:

class Y {
  …
  Y& operator=(const Y&) = default;
  Y(const Y&) = default;
enum class – строго типизированные
            перечисления
Объявления “enum class Color { red, blue };”
решают проблемы:
• Стандартные перечисления (enums) могут
  неявно преобразовываться к int.
• Стандартные перечисления экспортируют свои
  значения в окружающую область видимости,
  что приводит к коллизиям имен.
• Невозможно указать тип, лежащий в основе
  стандартных перечислений.
сonstexpr – обобщенные гарантировано
       константные выражения

  constexpr int Foo(int a, int b)
  {
    constexpr int tmp = a + 10;
    return tmp | b;
  }


  int x = Foo(1, 2);
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]);
             // ...
      }
      // ...
}
Инициализация членов класса при
          объявлении
class A {
public:
      int a = 7;
};


Эквивалентно:

class A {
public:
      int a;
      A() : a(7) {}
};
Статические утверждения
static_assert(
  sizeof(long)>=8,
  "64-bit code generation required for this library."
);
nullptr - литерал для задания
     нулевого указателя
            void f(int);
            void f(char*);

            f(0);      // вызов f(int)

            f(nullptr); // вызов f(char*)
Шаблоны с переменным числом
           параметров
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++;
  }
}
Лямбда-выражения
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 (); };
Другое
•   Rvalue ссылки &&
•   Пользовательские литералы
•   Атрибуты **…++
•   Класс array: array<int,6> a = { 1, 2, 3 };
•   …
Дополнительные ссылки
• C++ 11 FAQ от Бьярна Страуструпа (перевод)
  http://sergeyteplyakov.blogspot.com/2012/05
  /c-11-faq.html

• «Универсальные» ссылки в C++11 или T&&
  не всегда означает «Rvalue Reference»
  http://habrahabr.ru/post/157961/
Ad

More Related Content

What's hot (20)

Functional Programing
Functional ProgramingFunctional Programing
Functional Programing
Max Arshinov
 
Представление информации в компьютере
Представление информации в компьютереПредставление информации в компьютере
Представление информации в компьютере
Andrey Dolinin
 
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Mikhail Kurnosov
 
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Mikhail Kurnosov
 
S2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gatesS2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gates
ssuser3ad198
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функций
DEVTYPE
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык C
Vladimir Parfinenko
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3
Andrei V, Zhuravlev
 
Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.
Sergey Tihon
 
4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методы
DEVTYPE
 
S3 karnaugh maps-full
S3 karnaugh maps-fullS3 karnaugh maps-full
S3 karnaugh maps-full
ssuser3ad198
 
4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов
DEVTYPE
 
презентация лекции №10
презентация лекции №10презентация лекции №10
презентация лекции №10
student_kai
 
Scala #3
Scala #3Scala #3
Scala #3
Alexander Podkhalyuzin
 
Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!
Mike Potanin
 
Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).
Olga Maksimenkova
 
S3 karnaugh maps-short
S3 karnaugh maps-shortS3 karnaugh maps-short
S3 karnaugh maps-short
ssuser3ad198
 
Системы счисления
Системы счисленияСистемы счисления
Системы счисления
Andrey Dolinin
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
Tatyanazaxarova
 
Functional Programing
Functional ProgramingFunctional Programing
Functional Programing
Max Arshinov
 
Представление информации в компьютере
Представление информации в компьютереПредставление информации в компьютере
Представление информации в компьютере
Andrey Dolinin
 
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Mikhail Kurnosov
 
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Mikhail Kurnosov
 
S2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gatesS2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gates
ssuser3ad198
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функций
DEVTYPE
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык C
Vladimir Parfinenko
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3
Andrei V, Zhuravlev
 
Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.
Sergey Tihon
 
4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методы
DEVTYPE
 
S3 karnaugh maps-full
S3 karnaugh maps-fullS3 karnaugh maps-full
S3 karnaugh maps-full
ssuser3ad198
 
4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов
DEVTYPE
 
презентация лекции №10
презентация лекции №10презентация лекции №10
презентация лекции №10
student_kai
 
Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!
Mike Potanin
 
Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).
Olga Maksimenkova
 
S3 karnaugh maps-short
S3 karnaugh maps-shortS3 karnaugh maps-short
S3 karnaugh maps-short
ssuser3ad198
 
Системы счисления
Системы счисленияСистемы счисления
Системы счисления
Andrey Dolinin
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
Tatyanazaxarova
 

Viewers also liked (20)

РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВРАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
Pavel Tsukanov
 
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
Pavel Tsukanov
 
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
Pavel Tsukanov
 
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Pavel Tsukanov
 
Sql azure federations
Sql azure federations Sql azure federations
Sql azure federations
Pavel Tsukanov
 
RESPONSIVE WEB DESIGN
RESPONSIVE WEB DESIGNRESPONSIVE WEB DESIGN
RESPONSIVE WEB DESIGN
Pavel Tsukanov
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Pavel Tsukanov
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladev
Pavel Tsukanov
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
Pavel Tsukanov
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
Pavel Tsukanov
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout
Pavel Tsukanov
 
Unit tests
Unit testsUnit tests
Unit tests
Pavel Tsukanov
 
Domain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийDomain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требований
CUSTIS
 
TDD (Test-driven Development) как стиль разработки.
TDD (Test-driven Development) как стиль разработки.TDD (Test-driven Development) как стиль разработки.
TDD (Test-driven Development) как стиль разработки.
Pavel Tsukanov
 
Автоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriverАвтоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriver
Pavel Tsukanov
 
Реализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFРеализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCF
Pavel Tsukanov
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
Pavel Tsukanov
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Pavel Tsukanov
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
Pavel Tsukanov
 
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВРАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
Pavel Tsukanov
 
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
Pavel Tsukanov
 
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
Pavel Tsukanov
 
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Pavel Tsukanov
 
Sql azure federations
Sql azure federations Sql azure federations
Sql azure federations
Pavel Tsukanov
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Pavel Tsukanov
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladev
Pavel Tsukanov
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
Pavel Tsukanov
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
Pavel Tsukanov
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout
Pavel Tsukanov
 
Domain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийDomain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требований
CUSTIS
 
TDD (Test-driven Development) как стиль разработки.
TDD (Test-driven Development) как стиль разработки.TDD (Test-driven Development) как стиль разработки.
TDD (Test-driven Development) как стиль разработки.
Pavel Tsukanov
 
Автоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriverАвтоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriver
Pavel Tsukanov
 
Реализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFРеализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCF
Pavel Tsukanov
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
Pavel Tsukanov
 
Ad

Similar to СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++ (20)

Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Dima Dzuba
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
Evgenij Laktionov
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Yandex
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
Mikhail Kurnosov
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Yandex
 
About Python
About PythonAbout Python
About Python
Yury Yurevich
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
Tatyanazaxarova
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Sergey Platonov
 
Большой брат помогает тебе
Большой брат помогает тебеБольшой брат помогает тебе
Большой брат помогает тебе
Tatyanazaxarova
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
Глеб Тарасов
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
Technopark
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
Andrey Karpov
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Yandex
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
Tatyanazaxarova
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Dima Dzuba
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Yandex
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
Mikhail Kurnosov
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Yandex
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
Tatyanazaxarova
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Sergey Platonov
 
Большой брат помогает тебе
Большой брат помогает тебеБольшой брат помогает тебе
Большой брат помогает тебе
Tatyanazaxarova
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
Technopark
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
Andrey Karpov
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Yandex
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
Tatyanazaxarova
 
Ad

More from Pavel Tsukanov (11)

МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVМАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
Pavel Tsukanov
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
Pavel Tsukanov
 
СОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯСОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯ
Pavel Tsukanov
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5
Pavel Tsukanov
 
ХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫ
Pavel Tsukanov
 
ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.
Pavel Tsukanov
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
Pavel Tsukanov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
Pavel Tsukanov
 
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Pavel Tsukanov
 
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVМАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
Pavel Tsukanov
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
Pavel Tsukanov
 
СОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯСОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯ
Pavel Tsukanov
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5
Pavel Tsukanov
 
ХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫ
Pavel Tsukanov
 
ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.
Pavel Tsukanov
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
Pavel Tsukanov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
Pavel Tsukanov
 
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Pavel Tsukanov
 

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

  • 1. Жив ли Си++? Прошлое, настоящее, будущее. Карпов Андрей Николаевич к.ф.-м.н., MVP (Visual C++), технический директор ООО «СиПроВер» Сайт: www.viva64.com E-Mail: [email protected]
  • 2. Умер ли Си/Си++? Нет. Он одна из важных технологий. Просто технологий стало больше!
  • 3. • Кода на Си/Си++ в старых и новых системах не стало меньше. • Выросло количество разрабатываемых систем, где рационально использовать другие языки (web, мобильные телефоны, клиентские программы). • Аналогия с бумагой. Кажется, компьютерные технологии повсеместно могут заменить бумагу.
  • 4. Говорить «стало меньше Си++» как говорить «меньше стала использоваться бумага» • Государственные учреждения. Куда ставить печать и подпись? • Надежность (архивы, военное дело). • Бумажные книги не исчезли. • Комиксы, раскраски для детей, оригами. • Как поможет iPhone в туалете?
  • 5. Закрывать бумажную фабрику смысла нет. А стоит ли продолжать заниматься Си/Си++? Да. Это приносит деньги. Поговорим, почему это приносит деньги.
  • 6. Почему язык Си/Си++ ещё очень долго будет популярен • Инерция; • Ресурсоемкие вычисления; • Экономия энергии; • Ограничения встраиваемых и мобильных систем; • Новые языки приходят и уходят, а Си/Си++ остаётся.
  • 7. Инерция • Существуют такие продукты, как «CHARON- PDP11 for Windows» для поддержки PDP11. Компания Stromasys - www.stromasys.ch • Неудача Intel c 64-битной архитектурой Itanium. • Огромное количество БОЛЬШИХ библиотек. Пример: библиотека ACIS.
  • 8. Ресурсоемкие вычисления • Активно используется Фортран. Си/Си++ рассматриваются для таких задач в перспективе. Intel активно работает над включением матриц в стандарт языка Си++. • Си/Си++ позволяют максимально полно использовать доступную память. • Си самый быстрый (после Фортрана). Не верьте рекламным измерениям скорости.
  • 9. Экономия энергии • Макро. Для датацентра с тысячами обращений в секунду важно, работает алгоритм 100 или 150 микросекунд. • Микро. Важно для встраиваемых систем, работающих долгое время.
  • 10. Ограничения встраиваемых и мобильных систем • Нужно работать быстро, чтобы уменьшить потребление энергии. • Ограничения объема памяти. • Новое направление – робототехника на дому. • Лучше потратить деньги на оптимизацию ПО, чем увеличить стоимость аппаратной части миллионов устройств.
  • 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. Си/Си++ не только жив, но и постоянно развивается
  • 13. О новом в языке (будем говорить только про Си++)
  • 14. Делегирующие конструкторы class File { public: File(char const * filename, char const * mode) : file_(fopen(filename, mode)) { } ~File() { fclose(file_); } Теперь нам хочется сделать что-то сложное в конструкторе, что может бросить исключение.
  • 15. Делегирующие конструкторы class File { File(FILE * file) : file_(file) {} public: File(char const * filename, char const * mode) : File(fopen(filename, mode)) { Foo(); } Другое применение – можно избавиться от функции Init().
  • 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. Управление поведением по умолчанию: 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. enum class – строго типизированные перечисления Объявления “enum class Color { red, blue };” решают проблемы: • Стандартные перечисления (enums) могут неявно преобразовываться к int. • Стандартные перечисления экспортируют свои значения в окружающую область видимости, что приводит к коллизиям имен. • Невозможно указать тип, лежащий в основе стандартных перечислений.
  • 19. сonstexpr – обобщенные гарантировано константные выражения constexpr int Foo(int a, int b) { constexpr int tmp = a + 10; return tmp | b; } int x = Foo(1, 2);
  • 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. Инициализация членов класса при объявлении class A { public: int a = 7; }; Эквивалентно: class A { public: int a; A() : a(7) {} };
  • 22. Статические утверждения static_assert( sizeof(long)>=8, "64-bit code generation required for this library." );
  • 23. nullptr - литерал для задания нулевого указателя void f(int); void f(char*); f(0); // вызов f(int) f(nullptr); // вызов f(char*)
  • 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. Лямбда-выражения 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. Другое • Rvalue ссылки && • Пользовательские литералы • Атрибуты **…++ • Класс array: array<int,6> a = { 1, 2, 3 }; • …
  • 27. Дополнительные ссылки • C++ 11 FAQ от Бьярна Страуструпа (перевод) http://sergeyteplyakov.blogspot.com/2012/05 /c-11-faq.html • «Универсальные» ссылки в C++11 или T&& не всегда означает «Rvalue Reference» http://habrahabr.ru/post/157961/