c++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и...

122

Upload: others

Post on 06-Jun-2020

17 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для
Page 2: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Antony Polukhin

Полухин Антон

Незаменимый C++

Page 3: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Disclaimer

Незаменимый C++ 3 / 122

Page 4: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Содержание

● На C++ больше не пишут?● C++ vs. Asm● C++ vs. Rust● C++ vs. Go● C++ vs. (Java + C#)● Слабые места C++● Что с этим делать

Незаменимый C++

Asm

C++20

Page 5: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Заблуждение №1На C++ больше не пишут программ

Незаменимый C++

Page 6: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы

Незаменимый C++ 6 / 122

Page 7: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки

Незаменимый C++ 7 / 122

Page 8: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)

Незаменимый C++ 8 / 122

Page 9: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры

Незаменимый C++ 9 / 122

Page 10: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры

Незаменимый C++ 10 / 122

Page 11: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры● Спецэффекты и анимация

Незаменимый C++ 11 / 122

Page 12: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры● Спецэффекты и анимация● Компиляторы (не только компиляторы для С++)

Незаменимый C++ 12 / 122

Page 13: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры● Спецэффекты и анимация● Компиляторы (не только компиляторы для С++)● «Виртуальные машины»

Незаменимый C++ 13 / 122

Page 14: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры● Спецэффекты и анимация● Компиляторы (не только компиляторы для С++)● «Виртуальные машины»● Научные программы (CERN и Бозон Хиггса)

Незаменимый C++ 14 / 122

Page 15: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры● Спецэффекты и анимация● Компиляторы (не только компиляторы для С++)● «Виртуальные машины»● Научные программы (CERN и Бозон Хиггса)● Части ОС (Драйверы, userspace)

Незаменимый C++ 15 / 122

Page 16: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры● Спецэффекты и анимация● Компиляторы (не только компиляторы для С++)● «Виртуальные машины»● Научные программы (CERN и Бозон Хиггса)● Части ОС (Драйверы, userspace)● Автопром

Незаменимый C++ 16 / 122

Page 17: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры● Спецэффекты и анимация● Компиляторы (не только компиляторы для С++)● «Виртуальные машины»● Научные программы (CERN и Бозон Хиггса)● Части ОС (Драйверы, userspace)● Автопром● Заводы

Незаменимый C++ 17 / 122

Page 18: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры● Спецэффекты и анимация● Компиляторы (не только компиляторы для С++)● «Виртуальные машины»● Научные программы (CERN и Бозон Хиггса)● Части ОС (Драйверы, userspace)● Автопром● Заводы● Биржа

Незаменимый C++ 18 / 122

Page 19: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Программы ● Поисковые движки● Большинство высоконагруженных програм (Такси)● Игры● Браузеры● Спецэффекты и анимация● Компиляторы (не только компиляторы для С++)● «Виртуальные машины»● Научные программы (CERN и Бозон Хиггса)● Части ОС (Драйверы, userspace)● Автопром● Заводы● Биржа● Офисные приложения

Незаменимый C++ 19 / 122

Page 20: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

ОК, чем C++ привлекает сегодня?

Незаменимый C++

Page 21: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++

Незаменимый C++ 21 / 122

Page 22: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ + zero-overhead

Незаменимый C++ 22 / 122

Page 23: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ + zero-overhead

+ неограниченные возможности

Незаменимый C++ 23 / 122

Page 24: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ + zero-overhead

+ неограниченные возможности

+ поддержка огромного количества платформ

Незаменимый C++ 24 / 122

Page 25: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ + zero-overhead

+ неограниченные возможности

+ поддержка огромного количества платформ

+ безопасность

Незаменимый C++ 25 / 122

Page 26: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ + zero-overhead

+ неограниченные возможности

+ поддержка огромного количества платформ

+ безопасность?

Незаменимый C++ 26 / 122

Page 27: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ + zero-overhead

+ неограниченные возможности

+ поддержка огромного количества платформ

+ безопасность?

+ небольшой рантайм

Незаменимый C++ 27 / 122

Page 28: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Сравним с другими языками!

Незаменимый C++

Page 29: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

С++ vs. Asm

Незаменимый C++

Page 30: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Asm

Незаменимый C++ 30 / 122

Page 31: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Asm + Ассемблер позволяет выжать максимум из железа

Незаменимый C++ 31 / 122

Page 32: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Asm + Ассемблер позволяет выжать максимум из железа

- непереносимый код

Незаменимый C++ 32 / 122

Page 33: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Asm + Ассемблер позволяет выжать максимум из железа

- непереносимый код

- очень медленная разработка

Незаменимый C++ 33 / 122

Page 34: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Asm + Ассемблер позволяет выжать максимум из железа

- непереносимый код

- очень медленная разработка

- не всегда быстрее

Незаменимый C++ 34 / 122

Page 35: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Asm + Ассемблер позволяет выжать максимум из железа

- непереносимый код

- очень медленная разработка

- не всегда быстрее

Незаменимый C++ 35 / 122

Page 36: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Заблуждение №2Большие программы на C++ работают медленнее чем на ASM

Незаменимый C++

Page 37: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Asm (или как завалить Asm разработчика)

x % 2361 == 7

Незаменимый C++ 37 / 122

Page 38: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Asm (или как завалить Asm разработчика)

Незаменимый C++ 38 / 122

Page 39: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Asm (или как завалить Asm разработчика)

Незаменимый C++ 39 / 122

Page 40: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

С++ vs. Rust

Незаменимый C++

Page 41: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Rust

Незаменимый C++ 41 / 122

Page 42: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Rust + Отличная безопасность?

Незаменимый C++ 42 / 122

Page 43: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Rust + Отличная безопасность?

+ Потенциальная возможность оптимизировать лучше C++

Незаменимый C++ 43 / 122

Page 44: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Заблуждение №3Rust более/такой же производительный как C++

Незаменимый C++

Page 45: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Анатомия компилятора (упрощённо)

Незаменимый C++

С++С Rust ...

Middle end

Ada Go

IR

IR

Power PCx86 Alpha ...Arm x86_64

45 / 122

Page 46: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Rust

Незаменимый C++ 46 / 122

Page 47: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Rust Вроде норм.

Незаменимый C++ 47 / 122

Page 48: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Rust Вроде норм.

Переходим на Rust?

Незаменимый C++ 48 / 122

Page 49: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Rust Вроде норм.

Переходим на Rust?

Oh, wait!..

Незаменимый C++ 49 / 122

Page 50: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Rust Вроде норм.

Переходим на Rust?

Oh, wait!..

C C++ — noop→

C Rust — PAIN!!!!!!!→

Незаменимый C++ 50 / 122

Page 51: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C Rust→● unsafe {} нет безопасности→

Незаменимый C++ 51 / 122

Page 52: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C Rust→● unsafe {} нет безопасности→● Нет возможности использовать C headers

● Надо генерировать свои– Обновление библиотек — БОЛЬ!– Надо headers руками допатчивать– Мучительные страдания с borrow checker на сложных С проектах [https://hackernoon.com/why-im-dropping-rust-fd1c32986c88]

Незаменимый C++ 52 / 122

Page 53: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C С++→Берёте и используете C headers

● Оборачиваете в классы по необходимости

Незаменимый C++ 53 / 122

Page 54: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Заблуждение №4Программа написанная на языке Rust X не содержит ошибок

Незаменимый C++

Page 55: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Anything● unsafe или аналоги нет безопасности→

Незаменимый C++ 55 / 122

Page 56: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Anything● unsafe или аналоги нет безопасности→● если ваша программа компилится, это ещё не

значит что всё ОК

Незаменимый C++ 56 / 122

Page 57: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

С++ vs. Go

Незаменимый C++

Page 58: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Go

Незаменимый C++ 58 / 122

Page 59: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Go - <великое множество>

Незаменимый C++ 59 / 122

Page 60: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Go - <великое множество>

+ Асинхронность и многопточность на основе корутин

Незаменимый C++ 60 / 122

Page 61: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Go - <великое множество>

+ Асинхронность и многопточность на основе корутин

● Boost.Fibers

Незаменимый C++ 61 / 122

Page 62: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Go - <великое множество>

+ Асинхронность и многопточность на основе корутин

● Boost.Fibers● Yandex.Taxi userver

Незаменимый C++ 62 / 122

Page 63: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Go - <великое множество>

+ Асинхронность и многопточность на основе корутин

● Boost.Fibers● Yandex.Taxi userver● Quantum

Незаменимый C++ 63 / 122

Page 64: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Go - <великое множество>

+ Асинхронность и многопточность на основе корутин

● Boost.Fibers● Yandex.Taxi userver● Quantum● Folly fibers

Незаменимый C++ 64 / 122

Page 65: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Go - <великое множество>

+ Асинхронность и многопточность на основе корутин

● Boost.Fibers● Yandex.Taxi userver● Quantum● Folly fibers● Coroutines TS

Незаменимый C++ 65 / 122

Page 66: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ vs. Go - <великое множество>

+ Асинхронность и многопточность на основе корутин

● Boost.Fibers● Yandex.Taxi userver● Quantum● Folly fibers● Coroutines TS● C++20

Незаменимый C++ 66 / 122

Page 67: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Python vs. Go Go скорее конкурент Python, чем C++

Незаменимый C++ 67 / 122

Page 68: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Заблуждение №5Бенчмарки показывают что прогарммы на X быстрее C++

Незаменимый C++

Page 69: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Добро пожаловать в мир «честных» бенчмарков!

Незаменимый C++

Page 70: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Типичные ошибки

● Отключается сборщик мусора

Незаменимый C++ 70 / 122

Page 71: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Типичные ошибки

● Отключается сборщик мусора● Код написан не на C++

Незаменимый C++ 71 / 122

Page 72: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Типичные ошибки

● Отключается сборщик мусора● Код на C++ написан в стиле float* f = new float;

Незаменимый C++ 72 / 122

Page 73: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Типичные ошибки

● Отключается сборщик мусора● Код на C++ написан в стиле float* f = new float;● На Х написана другая программа

Незаменимый C++ 73 / 122

Page 74: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Типичные ошибки

● Отключается сборщик мусора● Код на C++ написан в стиле float* f = new float;● На Х написана другая программа● Тестируется библиотека а не язык

Незаменимый C++ 74 / 122

Page 75: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Заблуждение №6Сборщик мусора не добавляет накладных расходов

Незаменимый C++

Page 76: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Mark and sweep

Незаменимый C++ 76 / 122

Page 77: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

structures

struct list_node {

list_node* next;

list_node* prev;

};

struct slist_node {

slist_node* next;

};

Незаменимый C++ 77 / 122

Page 78: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

structures

vector<void*> root;

Незаменимый C++ 78 / 122

Page 79: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

structures

vector<void*> root; // root[0] — это slist_node или list_node?

Незаменимый C++ 79 / 122

Page 80: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

structures

vector<void*> root; // Сколько указателей и где они?

vector<Object*> root;

Незаменимый C++ 80 / 122

Page 81: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

structures

struct list_node {

__meta vptr;

list_node* next;

list_node* prev;

};

struct slist_node {

__meta vptr;

slist_node* next;

};

Незаменимый C++ 81 / 122

Page 82: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Stop the world ● Все потоки останавливаются

Незаменимый C++ 82 / 122

Page 83: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Stop the world ● Все потоки останавливаются● Проходим по всем узлам графа, помечая

достижимые узлы

Незаменимый C++ 83 / 122

Page 84: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Stop the world ● Все потоки останавливаются● Проходим по всем узлам графа, помечая

достижимые узлы● ????

Незаменимый C++ 84 / 122

Page 85: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Stop the world ● Все потоки останавливаются● Проходим по всем узлам графа, помечая

достижимые узлы● ????● Profit

Незаменимый C++ 85 / 122

Page 86: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Stop the world ● Все потоки останавливаются● Проходим по всем узлам графа, помечая

достижимые узлы● ????● Profit

● На современном железе больше 1 ядра!

Незаменимый C++ 86 / 122

Page 87: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Stop the world ● Все потоки останавливаются● Проходим по всем узлам графа, помечая

достижимые узлы● ????● Profit

● На современном железе больше 1 ядра!● При каждой сборке мусора мы проходимся по

всем узлам постоянно перепроверяя живые →узлы

Незаменимый C++ 87 / 122

Page 88: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

No stop the world

● Ничего не останавливается

Незаменимый C++ 88 / 122

Page 89: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

No stop the world

● Ничего не останавливается● Многопоточно разбираем мусор

Незаменимый C++ 89 / 122

Page 90: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

No stop the world

● Ничего не останавливается● Многопоточно разбираем мусор● Ура!

Незаменимый C++ 90 / 122

Page 91: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

No stop the world

● Ничего не останавливается● Многопоточно разбираем мусор● Ура!● НО

Незаменимый C++ 91 / 122

Page 92: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

No stop the world

● Ничего не останавливается● Многопоточно разбираем мусор● Ура!● НО● Нам нужно синхронизировать все потоки через

атомарные инструкции

Незаменимый C++ 92 / 122

Page 93: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

No stop the world

● Ничего не останавливается● Многопоточно разбираем мусор● Ура!● НО● Нам нужно синхронизировать все потоки через

атомарные инструкции● Это очень дорого, если не мы последними

трогали ресурс

Незаменимый C++ 93 / 122

Page 94: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

No stop the world

● Ничего не останавливается● Многопоточно разбираем мусор● Ура!● НО● Нам нужно синхронизировать все потоки через

атомарные инструкции● Это очень дорого, если не мы последними

трогали ресурс● Мы делаем это при каждой сборке мусора!

Незаменимый C++ 94 / 122

Page 95: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

+ Не проходим лишние разы

Незаменимый C++ 95 / 122

Page 96: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

structures

struct list_node {

shared_ptr<list_node> next; // atomic refcounter

shared_ptr<list_node> prev; // atomic refcounter

};

struct slist_node {

shared_ptr<slist_node> next; // atomic refcounter

};

Незаменимый C++ 96 / 122

Page 97: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Это ещё не всё!

shared_ptr<Object> some;

Незаменимый C++ 97 / 122

Page 98: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Это ещё не всё!

shared_ptr<Object> some; // Скоро будет больно!

Незаменимый C++ 98 / 122

Page 99: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Это ещё не всё!

shared_ptr<Object> some; // Скоро будет больно!

shared_ptr<Object> prev = some.a; // ...

Незаменимый C++ 99 / 122

Page 100: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Это ещё не всё!

shared_ptr<Object> some; // Скоро будет больно!

shared_ptr<Object> prev = some.a; // ...

prev.a = some; // Циклические ссылки!

Незаменимый C++ 100 / 122

Page 101: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

С++ vs. (Java + C#)

Незаменимый C++

Page 102: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C# ?? Java

Незаменимый C++ 102 / 122

Page 103: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C# ?? Java ● См. «Сборщики Мусора»

Незаменимый C++ 103 / 122

Page 104: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Logstash – Программа для сбора, трансформации и складирования логов.

Бесплатное и очень популярное Open Source приложение на Java.

Что может пойти не так?

Незаменимый C++ 104 / 122

Page 105: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Logstash – Программа для сбора, трансформации и складирования логов.

Бесплатное и очень популярное Open Source приложение на Java.

Что может пойти не так?

Незаменимый C++ 105 / 122

Page 106: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Слабые места C++

Незаменимый C++

Page 107: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++

Незаменимый C++ 107 / 122

Page 108: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ - скрытый высокий порог вхождения

- неограниченные возможности- проблемы с безопасностью

Незаменимый C++ 108 / 122

Page 109: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

C++ - скрытый высокий порог вхождения

- неограниченные возможности- проблемы с безопасностью

- отсутствие изкоробочности

- крошечная стандартная библиотека- отсутствие готовой инфраструктуры

Незаменимый C++ 109 / 122

Page 110: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

ОК, а что делать то?

Незаменимый C++

Page 111: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Незаменимый C++ 111 / 122

Page 112: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Итоги

Незаменимый C++

Page 113: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Итоги

Незаменимый C++ 113 / 122

Page 114: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Итоги ● C++ везде

Незаменимый C++ 114 / 122

Page 115: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Итоги ● C++ везде ● C++ крайне популярен

Незаменимый C++ 115 / 122

Page 116: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Итоги ● C++ везде ● C++ крайне популярен● С++ - самый производительный инструмент для

написания больших приложений

Незаменимый C++ 116 / 122

Page 117: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Итоги ● C++ везде ● C++ крайне популярен● С++ - самый производительный инструмент для

написания больших приложений● Относитесь со скепсисом к бенчмаркам

Незаменимый C++ 117 / 122

Page 118: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Итоги ● C++ везде ● C++ крайне популярен● С++ - самый производительный инструмент для

написания больших приложений● Относитесь со скепсисом к бенчмаркам● Не верьте managed языкам, которые говорят что

они быстрее C++

Незаменимый C++ 118 / 122

Page 119: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Итоги ● C++ везде ● C++ крайне популярен● С++ - самый производительный инструмент для

написания больших приложений● Относитесь со скепсисом к бенчмаркам● Не верьте managed языкам, которые говорят что

они быстрее C++● С++ не идеален!..

Незаменимый C++ 119 / 122

Page 120: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Итоги ● C++ везде ● C++ крайне популярен● С++ - самый производительный инструмент для

написания больших приложений● Относитесь со скепсисом к бенчмаркам● Не верьте managed языкам, которые говорят что

они быстрее C++● С++ не идеален!..

● ...но это исправимо

Незаменимый C++ 120 / 122

Page 121: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Спасибо

Page 122: C++ на практике+ irreplaceable.pdf · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для

Полухин АнтонСтарший разработчик Yandex.Taxi

[email protected]

[email protected]

https://github.com/apolukhin

https://stdcpp.ru/