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

แชร์
ฝัง
  • เผยแพร่เมื่อ 3 ม.ค. 2025

ความคิดเห็น • 82

  • @KIR_Engineer
    @KIR_Engineer 8 หลายเดือนก่อน +3

    Как всегда интересно, увлекательно, познавательно. Спасибо за лекцию.

  • @safocl9768
    @safocl9768 8 หลายเดือนก่อน +22

    аплодирую стоя (сидя) -- балдежно балдежный доклад!!!
    я постоянно запрашиваю у людей, которые пишут на си, ответы почему они считают до сих пор, что си++ медленнее... ну и ессесна не получаю никаких доводов...
    тут же просто разнос от авторитетного учителя.

    • @nullptr_or_null8301
      @nullptr_or_null8301 8 หลายเดือนก่อน +1

      В С++ много лишнего в библиотеках, все что есть в библиотеках С++, можно реализовать во первых быстрее на С (при знаниях соответствующих), во вторых не надо отслеживать что в этих библиотеках есть лишнее, что не использует программа, а так да, если грамотно писать на С++ и отслеживать все лишнее, убирая это, то С++ не медленнее.
      P.S. Это лично мое мнение, возможно не прав.

    • @isadora-6th
      @isadora-6th 8 หลายเดือนก่อน

      ​​@@nullptr_or_null8301Так что не используешь в итоговый бинарь не попадает, что в Си, что в Си++. Ну максимум оверхеды на время сборки неиспользуемых файлов, но на фоне как минимум удобно возвращаемых значений из функций и всяких скоуп-гардов, что не дает утечь, вообще не понятно, что там такого лишнего.
      Ну а если вы придумаете как реализовать qsort на си быстрее чем текущая реализация на c++, пожалуйста занесите её в стд

    • @Kerojey
      @Kerojey 8 หลายเดือนก่อน

      @@nullptr_or_null8301 если ты про std библиотеку, то её быстрее не напишешь, там шарящие люди всё уже давно оптимизировали(проверенно)

    • @TheKozladoy
      @TheKozladoy 8 หลายเดือนก่อน

      ​@@nullptr_or_null8301 В том то и дело что плюсы не то что медленнее С, а в некоторых случаях быстрее, например инлайн предикатов.

    • @Sky-pg8ot
      @Sky-pg8ot 8 หลายเดือนก่อน

      ​@@nullptr_or_null8301почему так сложно, что здесь написано, я только мысль понял, вроде как правильно или нет?

  • @ВалерийЗайнуллин-щ8у
    @ВалерийЗайнуллин-щ8у 8 หลายเดือนก่อน +1

    Очень познавательный доклад, глубокие темы. Спасибо большое!

  • @AlexisVaBel
    @AlexisVaBel 8 หลายเดือนก่อน +18

    Однозначно плюсую за очередную лекцию.

  • @SmoukingMouse
    @SmoukingMouse 8 หลายเดือนก่อน +5

    Спасибо за доклад, Константин как всегда рассказывает живо и интересно.

  • @MikhailGoncharov-tl4cr
    @MikhailGoncharov-tl4cr 8 หลายเดือนก่อน +2

    вы лучший. я так поинмаю нас впереди ожидает серия выпусков на данную тематику. было бы очень интересно.

  • @4tigeek24
    @4tigeek24 5 หลายเดือนก่อน

    Очень интересный и полезный доклад, спасибо!

  • @vladimir0rus
    @vladimir0rus 4 วันที่ผ่านมา +1

    19:05 "Можно сделать вопрос на собеседовании: "когда override final имеют смысл вместе?""
    Да никогда они не имеют смысла вместе, достаточно final написать. Гуру облажался.

  • @safocl9768
    @safocl9768 8 หลายเดือนก่อน +5

    27:22 -- я вот думаю, что если вылетело исключение (при правильном их использовании ессесна) -- то уже не стоит думать про производительность и сколько времени потрачено, поскольку программа совершила "поворот нетуда" (некорректную работу)...

  • @vladimir0rus
    @vladimir0rus 8 หลายเดือนก่อน +2

    19:09 "override final" писать не нужно, достаточно одного final. Это прописано в C++ Core Guidelines:
    C.128: Virtual functions should specify exactly one of virtual, override, or final

    • @ЯнЯнковский-э3м
      @ЯнЯнковский-э3м 4 วันที่ผ่านมา

      В лучших практиках было много чего написано) поищите версию 2019-2020 года- без пены, спокойно читать не получиться. Компиляторы не подчиняются до буквенно стандарту- и это всегда нужно помнитб

    • @vladimir0rus
      @vladimir0rus 4 วันที่ผ่านมา

      @ЯнЯнковский-э3м какой смысл писать "override final" кроме траты времени и ухудшения читаемости?

  • @dominuspiritus
    @dominuspiritus 5 หลายเดือนก่อน

    Спасибо ща доклад

  • @evgeniybeschastnov4627
    @evgeniybeschastnov4627 8 หลายเดือนก่อน

    Хороший доклад, спасибо

  • @MsMrlightning
    @MsMrlightning 8 หลายเดือนก่อน +11

    Каждый раз когда я смотрю подобные видео, то приисполняюсь чувством возвышенного. Кресты это самый человеческий язык, где сосредоточена амбивалентность нашей жизни. Любовь и ненависть. Печаль и радость. Скажи свой язык и я скажу кто ты. Ява - ты почему то решил, что всё в воли человека. Си - ты монах и делаешь свой Сизов труд. Питон - ты предаешься грехопадению и безудержному наслаждению. ЖС - плывёшь по течению. Хаскель - ты грязный джанки плюющий на всю традицию и наследие. Но в нашей христианской традиции только кресты и ничего больше.

    • @linkernick5379
      @linkernick5379 8 หลายเดือนก่อน

      5 лет назад я нашёл время изучить и освоить Rust и с тех пор вообще перестал видеть смысл брать C++ для чего бы то ни было (хотя C есть смысл брать в ряде сценариев). Да, Rust очень непрост, но понятно, ради чего все эти сложности - чтобы получить безопасные и легковесные модули, а проект RustBelt позволяет получать гарантии даже.
      В случае же C++ мы в конечном итоге получаем "амбивалентность" 😂

  • @orefkov
    @orefkov 5 หลายเดือนก่อน

    Один момент упущен -зависимость стоимости есть ещё и от ОС. В частности, исключения в Windows x86 - даже при их "небросании" будут иметь определенную стоимость - там при входе в функцию обновляется указатель на текущий обработчик:
    push offset SEH_70004E50
    mov eax, large fs:0
    push eax
    mov large fs:0, esp
    В отличии от linux и Win-x64, где применяется табличный способ обработки исключений

  • @DeltaZavr.
    @DeltaZavr. 4 หลายเดือนก่อน

    Если мы будем Swap интераторы.
    Не получится ли, что данные лежат в разных местах, и линейна их будет тяжело считывать.
    Чтение памяти, не сильно дружит с перепрыгиванием на разные адресса.

  • @tianned
    @tianned 8 หลายเดือนก่อน +2

    А разве не переменная является самым простым механизмом абстракции? Это же буквально абстракция куска памяти, что может быть примитивнее

    • @ОмарМунчаев-м2и
      @ОмарМунчаев-м2и 8 หลายเดือนก่อน +1

      Переменные в языке не имеют какого либо оверхеда. Тут скорее всего автор хотел подвести все под абстракцию, которая может навредить перфомансу

  • @linkernick5379
    @linkernick5379 8 หลายเดือนก่อน +3

    Каждый подобный доклад с конфы по C++ выглядит как сверхусилия для движения в совершенно ошибочном направлении: проблемы, вызванные C++ исправляются с помощью более сложных средств всё того же C++, что привносит потенциально более сложные и глубокие проблемы.
    Но докладчик очень хорош и в плане подачи, и структуры доклада 👍

  • @alexandrgonzales6503
    @alexandrgonzales6503 8 หลายเดือนก่อน

    35:14 какие 2,5 раза? Из чего вытекает?

  • @vr360_progress4
    @vr360_progress4 8 หลายเดือนก่อน +4

    Я доклад господина Русяева не видел, но то, что исключения не бесплатны, даже если их не кидать - не сказать, что очень глубокая мысль. Не бесплатны по сравнению с чем? С отсутствием проверки ошибок?
    Любая функциональность не бесплатна, если её использовать. Главное-то не то, что "не бесплатно", а то, что программа с исключениями дешевле, чем программа с проверками кодов возврата.

    • @linkernick5379
      @linkernick5379 8 หลายเดือนก่อน

      Небесплатны в сравнении с проверкой кодов возврата или ранним return.

    • @vr360_progress4
      @vr360_progress4 8 หลายเดือนก่อน

      @@linkernick5379 То есть, проверка кодов возврата бесплатна?
      Вроде бы в этом самом докладе показано, что коды возврата дороже (если вы не helloworld пишете).
      Ранний return тоже сам по себе не появится, для того, чтобы его сделать, надо проверить код возврата - и так на всех 15 уровнях вложения.

  • @Zayac316
    @Zayac316 8 หลายเดือนก่อน +1

    Здарова Тиллир)

    • @linkernick5379
      @linkernick5379 8 หลายเดือนก่อน

      Осколки старой RSDN-гвардии находят друг друга на ютубе? 😅

    • @Zayac316
      @Zayac316 8 หลายเดือนก่อน

      @@linkernick5379 все гораздо веселее=)

  • @rasimbot
    @rasimbot 5 หลายเดือนก่อน

    Зачем усложнять C++-код?

  • @_sergeevich5827
    @_sergeevich5827 8 หลายเดือนก่อน +11

    Такое ощущение, что С++ создан, чтобы бороться с самим собой. Если на других языках пишут программы и рассказывают о том как решают задачи, то про С++ только и речь, о том как бороться с его косяками.

    • @Александр-ф9в4ю
      @Александр-ф9в4ю 8 หลายเดือนก่อน +1

      Главным косяком С++ уже давно стал С++ 😊

    • @isadora-6th
      @isadora-6th 8 หลายเดือนก่อน +12

      Задачи разные. Нужно быть сильно более упоротым чтобы в контексте Java доехать до оверхедов виртуализации и сделать с этим что-то осмысленное.
      Вы смотрите задротский видос про оверхеды абстракций и жалуетесь что не рассказывают как мы запустили проект с котиками в вебе

    • @alexmid
      @alexmid 8 หลายเดือนก่อน +6

      С++ это вещь в себе, существует только ради себя и для себя

    • @ufabiz
      @ufabiz 8 หลายเดือนก่อน +6

      В этом докладе ни слова о борьбе с косяками C++. У C++тоже возможно есть косяки, как и у любого другого языка. Но доклад не об этом. Вы даже не разобрались в теме и пришли лить грязь на то, в чëм не разбираетесь.

    • @_sergeevich5827
      @_sergeevich5827 8 หลายเดือนก่อน +1

      @@ufabiz чего такой агрессивный ? Никто тут грязь не льёт, успокойся.

  • @ИльдарБулатов-т4х
    @ИльдарБулатов-т4х 8 หลายเดือนก่อน

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

    • @isadora-6th
      @isadora-6th 8 หลายเดือนก่อน +1

      А как возвращать ошибку через 10 функций от того, что лог файлик не записать, диск read+only? abort?
      Зачем делать ручное прокидывание по каналу return (std::expected), если используете исключения? Они же про делать меньше работы, а перформанс хит у вас на случаи когда прям произошла фигня и работать дальше не сменив курс не выйдет

    • @ИльдарБулатов-т4х
      @ИльдарБулатов-т4х 8 หลายเดือนก่อน

      @@isadora-6th ну наверное, идея в том, что будет программу можно собрать для отладочного режим и для рабочего

    • @isadora-6th
      @isadora-6th 8 หลายเดือนก่อน

      @@ИльдарБулатов-т4х Так теперь поведение в дебаг сборке и релизе фундаментально отличается механикой обработки ошибок.
      У вас буквально с expected все вызовы функций будут обернуты лапшой по передаче еррор-кодов вверх, зачем тут тогда экспешены. А если просто "убрать экспешены" в релиз билде, без перепила всего проекта, то получим std::terminate на безобидное "нет места на диске".
      Как не использовать обработчик исключений если исключительные ситуации это не сегфолты, а нормальное поведение?

    • @vr360_progress4
      @vr360_progress4 8 หลายเดือนก่อน

      @@ИльдарБулатов-т4х И попросим окружающую вселенную, чтобы в рабочем режиме исключительных ситуаций не возникало.

    • @vr360_progress4
      @vr360_progress4 8 หลายเดือนก่อน

      @@ИльдарБулатов-т4х И в рабочем режиме либо не проверять ошибки, либо тупо аборт по любому исключению. Идея не очень, по-моему.

  • @usergnusmas6879
    @usergnusmas6879 7 หลายเดือนก่อน

    Какие виртуальные функции, люди всякую дичь тянут в проекты на плюсах

  • @alexmid
    @alexmid 8 หลายเดือนก่อน +30

    вот что я скажу ребята: не для того придумывали высокоуровневые языки, чтобы на них было сложнее писать чем на машинных кодах. те кто довел с++ до всего этого по-моему окончательно оторванные от этого мира люди, они делают этот язык ради самого языка, их вообще не интересует как им пользоваться в реальной жизни. Очень хочется применить куда более выразительные глаголы

    • @isadora-6th
      @isadora-6th 8 หลายเดือนก่อน

      C++, выиграл гонку вооружений через скорость работы. Если вы действительно хотите высокоуровневый код - пишите на JS, там полиморфизм и типы на рантайме.
      Перформанс это сложно, не выходит у человечества сложные вещи выражать просто.

    • @Pzqmoxwniceb
      @Pzqmoxwniceb 8 หลายเดือนก่อน +3

      Как сладостно лектор произносит "си плас плас", мммм, как он доволен собой, как он играет, как любуется собой. А вы про простоту. У них там три игрока бичмаркают, а вы...

    • @phusicus_404
      @phusicus_404 8 หลายเดือนก่อน +16

      Тут борятся за каждую наносекунду. А непроизводительный код написать легко и на чём
      угодно.
      Да и ничего сложного в презентации нет.

    • @alexmid
      @alexmid 8 หลายเดือนก่อน +2

      Как и в любой другой области деятельности - когда разберешься, то ничего сложного нет, особенно когда разжуют и в рот положат, но не ошибись ли вы языком, если наносекунды важны? Вопрос, однако...

    • @phusicus_404
      @phusicus_404 8 หลายเดือนก่อน +5

      @@alexmid Если вы про С, то плюсы могут быть быстрее него, и С топорный язык, в котором очень сложно сделать абстракции. А в этой лекции и обсуждаются абстракции без потери производительности.
      Ну и лекции по углубленному С++ есть в открытом доступе.

  • @mezmay12
    @mezmay12 8 หลายเดือนก่อน

    Имхо реальные программы на си ПЛАС ПЛАС никогда не бывают быстрее программ на c# (написанные за одинаковое время одинаковым количеством людей).
    Быстрее только бенчмарки с функциями по 10 строк кода (а тут по 1 строчные приводят - фейспалм).
    Главный принцип разработки ПО это управление сложностью. Где упрощение и где си плас плас...

    • @Sky-pg8ot
      @Sky-pg8ot 8 หลายเดือนก่อน

      Имхо, сложные программы, ядра или проекты проще и быстрее именно на cpp, на c# уже логику можно прописывать как принято

  • @yohohowowowo9471
    @yohohowowowo9471 8 หลายเดือนก่อน +1

    Всё хорошо, но лекция для людей, которые хорошо разбираются в слэнге: "итерсвап", "из интов" - попахивает каким-то лютым снобизмом. Похоже на гайды по варкрафту от школьников "пуржим шилд, рапчей накладываем блиды и сало отдаём в нову"...

    • @orefkov
      @orefkov 5 หลายเดือนก่อน +3

      Какой же это слэнг? Это база. Вернее, зачитывание английских слов напрямую из программ на С++ с русским акцентом.
      Если в коде написано std::vector t ;
      то логично говорить - "это вектор интов". А как ещё то? Вектор из целых чисел? Так целые числа могут разными быть - char, short, uint64_t и т.д. Поэтому логично просто назвать тип элементов, а тип - int. Просто на слух вы не отличите, когда говорят "int", а когда "инт".
      А если вы не знаете базы - то вы просто новичок, и такие лекции вам ещё рановато смотреть. Собственно, материал в этой лекции предполагает, что у вас уже есть знания С++ на уровне выше новичка - обсуждаются абстракции типа виртуальных функций, исключений, корутин и диапазонов.

  • @ИгорьСтепанов-и1п5х
    @ИгорьСтепанов-и1п5х 6 หลายเดือนก่อน

    корутины, точно не надо. дальше исключения