Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация...

131

Transcript of Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация...

Page 1: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные
Page 2: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Antony Polukhin

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

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

Page 3: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Содержание

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

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

Asm

C++20

Page 4: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 5: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Программы

Незаменимый C++ 5 / 131

Page 6: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 7: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 8: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 9: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 10: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 11: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 12: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 13: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 14: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 15: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 16: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 17: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 18: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 19: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 20: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++

Незаменимый C++ 20 / 131

Page 21: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ + zero-overhead

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

Page 22: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ + zero-overhead

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

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

Page 23: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ + zero-overhead

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

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

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

Page 24: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ + zero-overhead

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

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

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

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

Page 25: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ + zero-overhead

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

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

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

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

Page 26: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ + zero-overhead

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

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

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

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

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

Page 27: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 28: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

С++ vs. Asm

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

Page 29: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ vs. Asm

Незаменимый C++ 29 / 131

Page 30: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 31: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 32: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

Page 33: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

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

Page 34: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

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

Page 35: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 36: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

x % 2361 == 7

Незаменимый C++ 36 / 131

Page 37: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 38: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 39: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

С++ vs. Rust

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

Page 40: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ vs. Rust

Незаменимый C++ 40 / 131

Page 41: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 42: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 43: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 44: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

С++С Rust ...

Middle end

Ada Go

IR

IR

Power PCx86 Alpha ...Arm x86_64

44 / 131

Page 45: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ vs. Rust

Незаменимый C++ 45 / 131

Page 46: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Где UB ?

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

Page 47: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ vs. Rust

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

Page 48: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ vs. Rust

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

Page 49: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ vs. Rust

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

Page 50: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ vs. Rust

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

Page 51: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 52: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 53: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Oh, wait!..

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

Page 54: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Oh, wait!..

C C++ — noop→

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

Незаменимый C++ 54 / 131

Page 55: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 56: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 57: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 58: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 59: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 60: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

С++ vs. Go

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

Page 61: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++ vs. Go

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

Page 62: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 63: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 64: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

● Boost.Fibers

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

Page 65: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

● Boost.Fibers● Yandex.Taxi userver

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

Page 66: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

● Boost.Fibers● Yandex.Taxi userver● Quantum

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

Page 67: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

Page 68: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Незаменимый C++ 68 / 131

Page 69: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Незаменимый C++ 69 / 131

Page 70: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 71: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 72: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 73: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 74: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 75: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Незаменимый C++ 75 / 131

Page 76: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 77: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 78: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 79: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Mark and sweep

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

Page 80: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

structures

struct list_node {

list_node* next;

list_node* prev;

};

struct slist_node {

slist_node* next;

};

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

Page 81: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

structures

vector<void*> root;

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

Page 82: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

structures

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

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

Page 83: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

structures

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

vector<Object*> root;

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

Page 84: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

structures

struct list_node {

__meta vptr;

list_node* next;

list_node* prev;

};

struct slist_node {

__meta vptr;

slist_node* next;

};

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

Page 85: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 86: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 87: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 88: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 89: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

Page 90: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

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

Page 91: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

No stop the world

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

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

Page 92: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

No stop the world

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

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

Page 93: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

No stop the world

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

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

Page 94: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

No stop the world

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

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

Page 95: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

No stop the world

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

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

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

Page 96: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

No stop the world

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

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

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

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

Page 97: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

No stop the world

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

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

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

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

Page 98: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 99: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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++ 99 / 131

Page 100: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

shared_ptr<Object> some;

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

Page 101: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Незаменимый C++ 101 / 131

Page 102: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

Page 103: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

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

Page 104: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Trade-offs

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

Page 105: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Trade-offs ● Плавающий мусор

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

Page 106: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Trade-offs ● Плавающий мусор● … или удар по производительности

Незаменимый C++ 106 / 131

Page 107: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Trade-offs ● Плавающий мусор● … или удар по производительности

● Останавливать все потоки и тормозить с непредсказуемыми задержками

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

Page 108: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Trade-offs ● Плавающий мусор● … или удар по производительности

● Останавливать все потоки и тормозить с непредсказуемыми задержками

● … или ничего не останавливать и тратить CPU такты впустую

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

Page 109: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Trade-offs ● Плавающий мусор● … или удар по производительности

● Останавливать все потоки и тормозить с непредсказуемыми задержками

● … или ничего не останавливать и тратить CPU такты впустую

● Плата за Object*

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

Page 110: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

С++ vs. (Java + C#)

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

Page 111: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C# ?? Java

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

Page 112: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

Незаменимый C++ 112 / 131

Page 113: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

Page 114: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

Page 115: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 116: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

C++

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

Page 117: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Page 118: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

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

Page 119: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Page 120: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

Page 121: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Итоги

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

Page 122: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Итоги

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

Page 123: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

Незаменимый C++ 123 / 131

Page 124: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

Незаменимый C++ 124 / 131

Page 125: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Незаменимый C++ 125 / 131

Page 126: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

Незаменимый C++ 126 / 131

Page 127: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Незаменимый C++ 127 / 131

Page 128: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

Незаменимый C++ 128 / 131

Page 129: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

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

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

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

Незаменимый C++ 129 / 131

Page 130: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

Спасибо

Page 131: Antony Polukhin - GitHub Pages+... · Браузеры Спецэффекты и анимация Компиляторы (не только компиляторы для С++) «Виртуальные

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

[email protected]

[email protected]

https://github.com/apolukhin

https://stdcpp.ru/