SlideShare una empresa de Scribd logo
1 de 27
Жив ли Си++?
Прошлое, настоящее, будущее.

Карпов Андрей Николаевич
к.ф.-м.н., 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/

Más contenido relacionado

La actualidad más candente

Functional Programing
Functional ProgramingFunctional Programing
Functional ProgramingMax 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_gatesssuser3ad198
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функцийDEVTYPE
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CVladimir Parfinenko
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3Andrei 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-fullssuser3ad198
 
4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методовDEVTYPE
 
презентация лекции №10
презентация лекции №10презентация лекции №10
презентация лекции №10student_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-shortssuser3ad198
 
Системы счисления
Системы счисленияСистемы счисления
Системы счисленияAndrey Dolinin
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаTatyanazaxarova
 

La actualidad más candente (20)

Functional Programing
Functional ProgramingFunctional Programing
Functional Programing
 
Представление информации в компьютере
Представление информации в компьютереПредставление информации в компьютере
Представление информации в компьютере
 
Лекция 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)
 
Лекция 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)
 
S2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gatesS2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gates
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функций
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык C
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3
 
Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.
 
4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методы
 
S3 karnaugh maps-full
S3 karnaugh maps-fullS3 karnaugh maps-full
S3 karnaugh maps-full
 
4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов4.4 Таблица виртуальных методов
4.4 Таблица виртуальных методов
 
презентация лекции №10
презентация лекции №10презентация лекции №10
презентация лекции №10
 
Scala #3
Scala #3Scala #3
Scala #3
 
Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!
 
Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).Представление графов в памяти компьютера (c++).
Представление графов в памяти компьютера (c++).
 
S3 karnaugh maps-short
S3 karnaugh maps-shortS3 karnaugh maps-short
S3 karnaugh maps-short
 
алфавит
алфавиталфавит
алфавит
 
Системы счисления
Системы счисленияСистемы счисления
Системы счисления
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
 

Destacado

РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВРАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ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 tuladevPavel Tsukanov
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИPavel Tsukanov
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMPavel 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 WebDriverPavel Tsukanov
 
Реализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFРеализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFPavel Tsukanov
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Pavel Tsukanov
 

Destacado (20)

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

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

Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima 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
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кодаTatyanazaxarova
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаAndrey Karpov
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Большой брат помогает тебе
Большой брат помогает тебеБольшой брат помогает тебе
Большой брат помогает тебеTatyanazaxarova
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++Andrey Karpov
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Yandex
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаTatyanazaxarova
 

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

Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
C language. Introduction
C language. IntroductionC language. Introduction
C language. Introduction
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 
About Python
About PythonAbout Python
About Python
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Большой брат помогает тебе
Большой брат помогает тебеБольшой брат помогает тебе
Большой брат помогает тебе
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
 

Más de Pavel Tsukanov

МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVМАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVPavel Tsukanov
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYPavel Tsukanov
 
СОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯСОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯPavel Tsukanov
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5Pavel 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
Как писать красивый код или основы SOLIDPavel Tsukanov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Pavel Tsukanov
 

Más de Pavel Tsukanov (11)

МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVМАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
 
СОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯСОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯ
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5
 
ХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫ
 
ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.
 
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)
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
 

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

  • 1. Жив ли Си++? Прошлое, настоящее, будущее. Карпов Андрей Николаевич к.ф.-м.н., MVP (Visual C++), технический директор ООО «СиПроВер» Сайт: www.viva64.com E-Mail: karpov@viva64.com
  • 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/