Тёмный

Улучшаем и усложняем C++ код: функции, исключения, ranges и корутины 

Истовый Инженер
Подписаться 6 тыс.
Просмотров 10 тыс.
50% 1

20 марта 2024 компания YADRO провела большой C++ митап в Санкт-Петербурге. Константин Владимиров из Syntacore рассказал, какая стоимость абстракции принципиально устранима (например, грамотным использованием или улучшением компилятора), а какая неизбежна.
00:00 - представление докладчика
00:45 - самый простой механизм абстракции: исправляем вызов функции, и наоборот
06:00 - проблемы при отсутствии инлайна
07:10 - бенчмарки и стоимость микроархитектуры
08:30 - компилятор и его влияние на стоимость абстракции
12:40 - разбираемся с виртуальными функциями, их проблемами и оптимизацией стоимости
22:00 - исключения: пожалуй, самый критикуемый механизм C++
28:50 - почему исключения не бесплатны, даже если их не кидать
32:45 - корутины: замеры на базовом примере и не только
38:40 - почему оптимизации корутин сильно зависят от компилятора
39:35 - пробуем разные версии ranges и... проигрываем
46:00 - как повторить исследование Константина
47:40 - вопросы докладчику
Слайды drive.yadro.com/s/NTy3jDHtsLe...

Наука

Опубликовано:

 

14 май 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 70   
@AlexisVaBel
@AlexisVaBel Месяц назад
Однозначно плюсую за очередную лекцию.
@SmoukingMouse
@SmoukingMouse 26 дней назад
Спасибо за доклад, Константин как всегда рассказывает живо и интересно.
@KIR_Engineer
@KIR_Engineer Месяц назад
Как всегда интересно, увлекательно, познавательно. Спасибо за лекцию.
@evgeniybeschastnov4627
@evgeniybeschastnov4627 29 дней назад
Хороший доклад, спасибо
@user-sf5wt4lf6i
@user-sf5wt4lf6i Месяц назад
Очень познавательный доклад, глубокие темы. Спасибо большое!
@safocl9768
@safocl9768 Месяц назад
аплодирую стоя (сидя) -- балдежно балдежный доклад!!! я постоянно запрашиваю у людей, которые пишут на си, ответы почему они считают до сих пор, что си++ медленнее... ну и ессесна не получаю никаких доводов... тут же просто разнос от авторитетного учителя.
@nullptr_or_null8301
@nullptr_or_null8301 Месяц назад
В С++ много лишнего в библиотеках, все что есть в библиотеках С++, можно реализовать во первых быстрее на С (при знаниях соответствующих), во вторых не надо отслеживать что в этих библиотеках есть лишнее, что не использует программа, а так да, если грамотно писать на С++ и отслеживать все лишнее, убирая это, то С++ не медленнее. P.S. Это лично мое мнение, возможно не прав.
@isadora-6th
@isadora-6th Месяц назад
​​@@nullptr_or_null8301Так что не используешь в итоговый бинарь не попадает, что в Си, что в Си++. Ну максимум оверхеды на время сборки неиспользуемых файлов, но на фоне как минимум удобно возвращаемых значений из функций и всяких скоуп-гардов, что не дает утечь, вообще не понятно, что там такого лишнего. Ну а если вы придумаете как реализовать qsort на си быстрее чем текущая реализация на c++, пожалуйста занесите её в стд
@Kerojey
@Kerojey Месяц назад
@@nullptr_or_null8301 если ты про std библиотеку, то её быстрее не напишешь, там шарящие люди всё уже давно оптимизировали(проверенно)
@TheKozladoy
@TheKozladoy 27 дней назад
​@@nullptr_or_null8301 В том то и дело что плюсы не то что медленнее С, а в некоторых случаях быстрее, например инлайн предикатов.
@Sky-pg8ot
@Sky-pg8ot 8 дней назад
​@@nullptr_or_null8301почему так сложно, что здесь написано, я только мысль понял, вроде как правильно или нет?
@MikhailGoncharov-tl4cr
@MikhailGoncharov-tl4cr Месяц назад
вы лучший. я так поинмаю нас впереди ожидает серия выпусков на данную тематику. было бы очень интересно.
@linkernick5379
@linkernick5379 Месяц назад
Каждый подобный доклад с конфы по C++ выглядит как сверхусилия для движения в совершенно ошибочном направлении: проблемы, вызванные C++ исправляются с помощью более сложных средств всё того же C++, что привносит потенциально более сложные и глубокие проблемы. Но докладчик очень хорош и в плане подачи, и структуры доклада 👍
@user53242
@user53242 22 дня назад
C++ -- это разрастающаяся кряхтящая матка ксеноморфа, которая вот-вот породит яйцо, внутри которого будет свежий язык со всеми решёнными проблемами, но ждать осталось ещё лет 20. Подождём...
@safocl9768
@safocl9768 Месяц назад
27:22 -- я вот думаю, что если вылетело исключение (при правильном их использовании ессесна) -- то уже не стоит думать про производительность и сколько времени потрачено, поскольку программа совершила "поворот нетуда" (некорректную работу)...
@vladimir0rus
@vladimir0rus 8 дней назад
19:09 "override final" писать не нужно, достаточно одного final. Это прописано в C++ Core Guidelines: C.128: Virtual functions should specify exactly one of virtual, override, or final
@Zayac316
@Zayac316 Месяц назад
Здарова Тиллир)
@linkernick5379
@linkernick5379 Месяц назад
Осколки старой RSDN-гвардии находят друг друга на ютубе? 😅
@Zayac316
@Zayac316 29 дней назад
@@linkernick5379 все гораздо веселее=)
@tianned
@tianned Месяц назад
А разве не переменная является самым простым механизмом абстракции? Это же буквально абстракция куска памяти, что может быть примитивнее
@user-rx7uq6mk1d
@user-rx7uq6mk1d Месяц назад
Переменные в языке не имеют какого либо оверхеда. Тут скорее всего автор хотел подвести все под абстракцию, которая может навредить перфомансу
@MsMrlightning
@MsMrlightning Месяц назад
Каждый раз когда я смотрю подобные видео, то приисполняюсь чувством возвышенного. Кресты это самый человеческий язык, где сосредоточена амбивалентность нашей жизни. Любовь и ненависть. Печаль и радость. Скажи свой язык и я скажу кто ты. Ява - ты почему то решил, что всё в воли человека. Си - ты монах и делаешь свой Сизов труд. Питон - ты предаешься грехопадению и безудержному наслаждению. ЖС - плывёшь по течению. Хаскель - ты грязный джанки плюющий на всю традицию и наследие. Но в нашей христианской традиции только кресты и ничего больше.
@linkernick5379
@linkernick5379 Месяц назад
5 лет назад я нашёл время изучить и освоить Rust и с тех пор вообще перестал видеть смысл брать C++ для чего бы то ни было (хотя C есть смысл брать в ряде сценариев). Да, Rust очень непрост, но понятно, ради чего все эти сложности - чтобы получить безопасные и легковесные модули, а проект RustBelt позволяет получать гарантии даже. В случае же C++ мы в конечном итоге получаем "амбивалентность" 😂
@alexandrgonzales6503
@alexandrgonzales6503 Месяц назад
35:14 какие 2,5 раза? Из чего вытекает?
@user-tp1qn2wt6t
@user-tp1qn2wt6t Месяц назад
касательно исключений я бы сделал следующий ход, я бы обложил его условным препроцессором и запускал его и валидация происходила бы только в режиме дебага, в релизном режиме можно в принципе не использовать обработчик исключений
@isadora-6th
@isadora-6th Месяц назад
А как возвращать ошибку через 10 функций от того, что лог файлик не записать, диск read+only? abort? Зачем делать ручное прокидывание по каналу return (std::expected), если используете исключения? Они же про делать меньше работы, а перформанс хит у вас на случаи когда прям произошла фигня и работать дальше не сменив курс не выйдет
@user-tp1qn2wt6t
@user-tp1qn2wt6t Месяц назад
@@isadora-6th ну наверное, идея в том, что будет программу можно собрать для отладочного режим и для рабочего
@isadora-6th
@isadora-6th Месяц назад
@@user-tp1qn2wt6t Так теперь поведение в дебаг сборке и релизе фундаментально отличается механикой обработки ошибок. У вас буквально с expected все вызовы функций будут обернуты лапшой по передаче еррор-кодов вверх, зачем тут тогда экспешены. А если просто "убрать экспешены" в релиз билде, без перепила всего проекта, то получим std::terminate на безобидное "нет места на диске". Как не использовать обработчик исключений если исключительные ситуации это не сегфолты, а нормальное поведение?
@vr360_progress4
@vr360_progress4 Месяц назад
@@user-tp1qn2wt6t И попросим окружающую вселенную, чтобы в рабочем режиме исключительных ситуаций не возникало.
@vr360_progress4
@vr360_progress4 Месяц назад
@@user-tp1qn2wt6t И в рабочем режиме либо не проверять ошибки, либо тупо аборт по любому исключению. Идея не очень, по-моему.
@_sergeevich5827
@_sergeevich5827 Месяц назад
Такое ощущение, что С++ создан, чтобы бороться с самим собой. Если на других языках пишут программы и рассказывают о том как решают задачи, то про С++ только и речь, о том как бороться с его косяками.
@user-qt5hy3vn5p
@user-qt5hy3vn5p Месяц назад
Главным косяком С++ уже давно стал С++ 😊
@isadora-6th
@isadora-6th Месяц назад
Задачи разные. Нужно быть сильно более упоротым чтобы в контексте Java доехать до оверхедов виртуализации и сделать с этим что-то осмысленное. Вы смотрите задротский видос про оверхеды абстракций и жалуетесь что не рассказывают как мы запустили проект с котиками в вебе
@alexmid
@alexmid Месяц назад
С++ это вещь в себе, существует только ради себя и для себя
@ufabiz
@ufabiz Месяц назад
В этом докладе ни слова о борьбе с косяками C++. У C++тоже возможно есть косяки, как и у любого другого языка. Но доклад не об этом. Вы даже не разобрались в теме и пришли лить грязь на то, в чëм не разбираетесь.
@_sergeevich5827
@_sergeevich5827 Месяц назад
@@ufabiz чего такой агрессивный ? Никто тут грязь не льёт, успокойся.
@vr360_progress4
@vr360_progress4 Месяц назад
Я доклад господина Русяева не видел, но то, что исключения не бесплатны, даже если их не кидать - не сказать, что очень глубокая мысль. Не бесплатны по сравнению с чем? С отсутствием проверки ошибок? Любая функциональность не бесплатна, если её использовать. Главное-то не то, что "не бесплатно", а то, что программа с исключениями дешевле, чем программа с проверками кодов возврата.
@linkernick5379
@linkernick5379 Месяц назад
Небесплатны в сравнении с проверкой кодов возврата или ранним return.
@vr360_progress4
@vr360_progress4 Месяц назад
@@linkernick5379 То есть, проверка кодов возврата бесплатна? Вроде бы в этом самом докладе показано, что коды возврата дороже (если вы не helloworld пишете). Ранний return тоже сам по себе не появится, для того, чтобы его сделать, надо проверить код возврата - и так на всех 15 уровнях вложения.
@mezmay12
@mezmay12 17 дней назад
Имхо реальные программы на си ПЛАС ПЛАС никогда не бывают быстрее программ на c# (написанные за одинаковое время одинаковым количеством людей). Быстрее только бенчмарки с функциями по 10 строк кода (а тут по 1 строчные приводят - фейспалм). Главный принцип разработки ПО это управление сложностью. Где упрощение и где си плас плас...
@Sky-pg8ot
@Sky-pg8ot 8 дней назад
Имхо, сложные программы, ядра или проекты проще и быстрее именно на cpp, на c# уже логику можно прописывать как принято
@alexmid
@alexmid Месяц назад
вот что я скажу ребята: не для того придумывали высокоуровневые языки, чтобы на них было сложнее писать чем на машинных кодах. те кто довел с++ до всего этого по-моему окончательно оторванные от этого мира люди, они делают этот язык ради самого языка, их вообще не интересует как им пользоваться в реальной жизни. Очень хочется применить куда более выразительные глаголы
@isadora-6th
@isadora-6th Месяц назад
C++, выиграл гонку вооружений через скорость работы. Если вы действительно хотите высокоуровневый код - пишите на JS, там полиморфизм и типы на рантайме. Перформанс это сложно, не выходит у человечества сложные вещи выражать просто.
@user-hh2qp6ez4d
@user-hh2qp6ez4d Месяц назад
Как сладостно лектор произносит "си плас плас", мммм, как он доволен собой, как он играет, как любуется собой. А вы про простоту. У них там три игрока бичмаркают, а вы...
@phusicus_404
@phusicus_404 Месяц назад
Тут борятся за каждую наносекунду. А непроизводительный код написать легко и на чём угодно. Да и ничего сложного в презентации нет.
@alexmid
@alexmid Месяц назад
Как и в любой другой области деятельности - когда разберешься, то ничего сложного нет, особенно когда разжуют и в рот положат, но не ошибись ли вы языком, если наносекунды важны? Вопрос, однако...
@phusicus_404
@phusicus_404 Месяц назад
@@alexmid Если вы про С, то плюсы могут быть быстрее него, и С топорный язык, в котором очень сложно сделать абстракции. А в этой лекции и обсуждаются абстракции без потери производительности. Ну и лекции по углубленному С++ есть в открытом доступе.
@yohohowowowo9471
@yohohowowowo9471 16 дней назад
Всё хорошо, но лекция для людей, которые хорошо разбираются в слэнге: "итерсвап", "из интов" - попахивает каким-то лютым снобизмом. Похоже на гайды по варкрафту от школьников "пуржим шилд, рапчей накладываем блиды и сало отдаём в нову"...
Далее
КОРОЧЕ ГОВОРЯ, 100 ДНЕЙ В СССР
09:31
Will Ada Replace C/C++?
44:57
Просмотров 67 тыс.
🤯Самая КРУТАЯ Функция #shorts
0:58
🤯Самая КРУТАЯ Функция #shorts
0:58
Best Gun Stock for VR gaming. #vr #vrgaming  #glistco
0:15
Распаковал Xiaomi SU7
0:59
Просмотров 2,8 млн