Обзор докладов прошедшей Zero Cost Conf'2024
Константин ВладимировОбзор начну с двух докладов, о которых писал в своём телеграме отдельно: это мой доклад и доклад Сергея Слотина. Они идут вне общего зачёта, просто оставлю ссылки:
Как устроены память и кеши: https://t.me/cpp_lects_rus/189
Интересные C++ решения в llvm-snippy: https://t.me/cpp_lects_rus/188
Если вы какой-то из них ещё не смотрели, то идите смотреть, они того стоят.
Теперь про конференцию в целом и про все остальные доклады. Необходимый дисклеймер -- всё что ниже это только моя точка зрения и я не буду это постоянно уточнять, скажу один раз тут. У вас может быть другая точка зрения и другие оценки, я не претендую на объективность.
Первое с чего хочу начать это похвала организаторам и программному комитету. Хочу покаяться в том, что я вёл себя с этими добрыми людьми просто по свински -- заявился в последний день, ещё и нахамил на обсуждении. Заболеваю звёздной болезнью, что поделать. Но как раз они-то свою работу сделали на отлично. По сравнению с C++Russia 2024 на конференции не было откровенно провальных выступлений или чего-то полностью не в тему. Программа была сбалансирована, интересна, докладчики были отлично подготовлены. Организация была выше всяких похвал, а уж для бесплатной (!) конференции уровень был невероятным. Спасибо и надеюсь, что не в последний раз.
Немного общих замечаний к докладчикам.
- Очень у многих существенные проблемы с постановкой задачи. То есть человек сразу переходит к решению какой-то проблемы, раньше чем зал собственно понял что это за проблема.
- Тенденция к опасному и неприятному велосипедостроению. Люди пишут свои парсеры вещественных чисел, закладываются на нестандартные возможности компиляторов и линкеров, изобретают какие-то крайне самобытные фреймворки без должного обоснования.

Я буду рассказывать по порядку, без какого-то особого умысла в расположении доклада.
Василий Куликов, Реализация мьютекса в userver https://youtu.be/myaEpjYyx3I
Я не сразу смог понять что происходит в этом докладе. Люди зачем-то (производительность? корректность?) начинают изобретать свой мьютекс, потом используют его вместе со стандартным. Потом оптимизируют, но без замеров. Я уже после доклада примерно догадался, что решается известная проблема, похожая на блокирующие синхронизации в многопоточных очередях, когда заблокированная задача может ждать кого-то кто тупо за ней в очереди (и я не до конца уверен что я прав, а я ведь сидел в зале). Главная беда автора что при этом он закладывается на детали реализации библиотеки и это прямо очень плохо.

Общая оценка 7/10 за интересный местами C++ и динамичное в целом изложение. Но когда такое рассказываешь надо также акцентировать и рассказывать, что местами так делать нельзя. И всё-таки ставить задачу так, чтобы я её мог понять.
Юрий Минаев, Семантика для кремниевых мозгов https://youtu.be/B2ixI_cjSao
Семантика искусственных языков это довольно сложная тема и докладчик с ней не справился. У меня сложилось впечатление, что он сам понял, что не справляется и в последний момент пошёл на запретный приём: вставил котов.

Увы, цельного изложения семантики языка не получилось. Тем не менее в докладе (россыпью) сообщается ряд интересных фактов и приводится кое-что о внутренней жизни компилятора (опять-таки без уточнения что это деталь реализации и всё может быть вообще не так).
Общая оценка 6/10, неплохая попытка. Автор мог бы сделать доклад гораздо сильнее, область необъятная.
Антон Полухин, Новости РГ21 https://youtu.be/rBqOcBvjpu0
Доклад скорее отчётный, чем содержательный. Но у Полухина откровенно плохих докладов не бывает, можно искать по его фамилии на youtube и смотреть вообще всё. Этот тоже держит марку.

Ну и да, нам опять пообещали рефлексию. Без комментариев. Разбудите меня через сто лет и спросите что происходит в C++ и я отвечу: обещают принять рефлексию.
Общая оценка 9/10 а может и выше: материал актуальный рассказано хорошо и компактно. Конечно хотелось бы полноформатный доклад с примерами и обзором предложений.
Иван Ходор, (N)RVO: что такое и как не сломать https://youtu.be/6B2euArRfdI
Доклад про NRVO. Рассказать про NRVO можно за пару минут: применяете на свой страх и риск, компилятор не обязан это делать, может сделать, может нет, может в одной версии делать в другой перестать, доклад окончен.
Вместо этого докладчик лезет в глубины кланга и рассказывает как это там устроено. Хотя объективно там всё может быть переделано завтра и что тогда делать всем кто послушал и на это заложился? Тот же комментарий что и к Куликову, впрочем.

Оценка 6/10: решаемая задача чуть более понятна, чем у Куликова с его мьютексом, но совершенно безнадёжна и лежит скорее в области стандартизации NRVO чем в области каталогизации с чем кланг конкретной версии справился, а с чем нет.
Данила Демидов, Как отказаться от динамического распределения памяти в C++ https://youtu.be/Z_rE4SWTvH0
По большому счёту доклад о том, как отказаться от C++. Автор пишет вещи на каком-то в принципе другом (по ментальной модели) языке, чем-то напоминающем испорченный Rust с плюсовым синтаксисом. Это называется Misra и служит, как я понимаю, своего рода легальным прикрытием для разработчика критических систем. Вы что-то написали, самолёт с 200 пассажирами разбился. К вам приходят с паяльником, а вы говорите: вот всё по стандарту. И люди с паяльником уходят.

Конечно на реальное качество кода весь этот бред не влияет и влиять не может, ошибки там такие же, что и везде, просто читать и писать это чуть больнее. Ну и да, стабильность лучше, потому что там обкладываются тоннами тестирования. Могли бы это делать на нормальном C++ с тем же эффектом.
Мой студент Владик хотел выяснить как они контролируют запрет обобщённой рекурсии в присутствии индиректных вызовов. Задача кажется неразрешимой в общем случае. Ответ докладчика можно послушать на видео.
Оценка: 4/10 но снизил я не за качество доклада, который на семерочку, а за подачу. На ютубе на скорости 2.0 доклад звучит сносно, но в зале было очень тоскливо.
Алексей Веселовский -- Санитайзеры и трюки компоновщика https://youtu.be/sUzdjbahQ2s
Предчувствия вас не обманывают. Уважаемый докладчик заглядывает в потроха к линкеру и да... закладывается на его нестандартное поведение. Но тут у докладчика есть причины.

С одной стороны на вопрос "возможен ли strong alias на weak function" правильный ответ такой: всего этого не существует, это детали реализации линкера, эти правила нигде не прописаны, это завтра изменится. Но увы, если вы автор санитайзера вы не можете дать такой ответ и да, они их переписывают и подстраивают под детали реализации.
В итоге если вы хотите разрабатывать санитайзер или лучше понимать как они работают, то доклад хорош как вводный экскурс по теме. Схема отличная:

Общая оценка 8/10 за подачу и обстоятельность. Может быть даже 9/10. Мне понравилось, я может быть что-то переиспользую в лекциях по тулчейну.
Константин Облаков -- Детективные истории в GDB, https://youtu.be/aXoRdut84xs
Первая же детективная история от автора переносит нас в 2012-й год, во времена gcc-4.2. Серьёзно? У меня в запасе много таких баек из прошлого, но в 2024-м году я бы на конференцию это нести постеснялся. Впрочем автор и сам над этим посмеивается.

С другой стороны детектив жанр вневременной, зачитываются же люди Эркюлем Пуаро, а там вообще уже более ста лет прошло.
Из плюсов -- автор хорош в использовании GDB и сами истории полезны и поучительны. Изложены тоже ок. Интегральная оценка 8/10, снизил я понятно за что. Опять-таки есть идеи кое-что угнать для обновлённого курса по тулчейну.
Замечу в сторону что исследование разных сторон тулчейна было лейтмотивом конференции, не знаю случайно это получилось или нет. Исследование у разных авторов было местами довольно глубокое и я местами узнал нечто новое, это всегда приятно.
Павел Новиков -- JSON in C++: escaping and serialization https://www.youtube.com/watch?v=1THwOpon4vg
Удивительно, что на конференциях ещё появляются люди, рассказывающие про свои блестящие самобытные библиотеки перекладывания JSON-ов.
Какая исключительно не избитая тема.

Такой код каждый хотел бы увидеть в своём проекте, да. Ну и да, смотреть это надо минимум на скорости 2.0.
Интегральная оценка 4/10, можно поднять до 5 за краткий курс UTF8 в районе 27-го слайда.
С другой стороны много ли тут вины докладчика? Скорее тема взята специфичная. Я в своё время выкинул лекцию по unicode поддержке из своего бакалаврского курса именно потому что после нескольких лет попыток отчаялся сделать её хотя бы минимально интересной. А тут и unicode и json -- боксёрская двоечка.
Александр Боргардт, Otterbrix — опенсорс-система хранения и обработки https://youtu.be/Rf8F99gCzvg
Серьёзнейшие проблемы с постановкой задачи. Из путанных объяснений про особый мир инженеров данных я не понял какую задачу решает система и ради чего делается всё что дальше делается.
Позабавило, что автор заново открывает для себя тот факт что std::unique_ptr не allocator-aware. Мне казалось Санкель всё рассказал и показал ещё в 2018-м, но автор судя по всему с классическими примерами Санкеля не знаком.

Интересно, в каком году автор узнает страшную правду про похожие проблемы в std::function?
Причём решение, которое предлагается, сильно уступает решению Санкеля, потому что автор (например) не делает попытки работать через трейты, а вызывает allocate/deallocate напрямую и его ждёт ещё много приключений и открытий. Также он не инкапсулирует своё решение в специальный класс, не переопределяет там... а, ладно.
К слову, если меня вдруг читают люди склонные к шахматам, вся эта игра в аллокаторы вокруг unqiue pointers и functions чем-то похожа на вариант Найдорфа в Сицилианской защите. Там всё давно исследовано, но от этого не менее опасно. И поэтому там всё нужно просто выучить до двадцатого хода, иначе это гг.
Интегральная оценка: 5/10 за так себе постановку задачи и незнакомство с источниками. Ну и "монотик" вместо "монотоник" мне лично очень режет слух.
Алексей Озерицкий -- Использование корутин в C++20 https://youtu.be/QyUL03JE2Sw
Меня очень растрогал нейминг классов: TFuture, это что-то из нулевых и Delphi.

Доклад немного не сбалансирован. Примерно половину тайминга (16.5 минут) занимает просто вводная лекция в корутины. Слишком короткая для тех кто про корутины не знает и несколько утомительная для тех кто знает.
Потом идёт несколько смятый рассказ про свой исключительно оригинальный фреймворк для корутин. Сравнения с другими фреймворками не проводится, никакие другие фреймворки не упоминаются. Я что-то пропустил или в Ереване отключили интернет?

Реимплементация libevent на своей библиотеке это интересно, но из графиков как раз видно, что особо обогнать не удалось.
Интегрально 6/10, хорошая попытка, но можно было лучше.
Андрей Аксёнов, Когда тормозит память: парсим гигабайты в секунду https://youtu.be/Ie3pK1Adm4U
Мне очень не нравится в этом докладе всё: манера подачи материала автором, сам материал, решения к которым автор прибегает.
У него всё тормозит, но при этом нигде не приводится профиль, из которого было бы видно, что тормозят всё-таки критикуемые автором компоненты, а не автор.
Идея писать свой парсер для вещественных чисел или собственную хеш-функцию (если вы не эксперт в этом) лежит далеко за гранью добра и зла. Почему тогда не законтрибьютить в библиотеку если вы можете лучше?

Также утверждается ускорение в разы, но не приводится ни техники бенчмаркинга ни результатов бенчмарков ни ссылок на них (сравните со Слотиным например). Вероятно джентельменам верят на слово, но я почему то не верю. Да у вас может быть NDA код который вы ускоряете, но всегда можно выдрать из него ключевые обезличенные фрагменты и согласовать публикацию.
У меня такое чувство что автор получил тактический выигрыш на конкретном продукте и конкретных сценариях, но при этом напихал таких кривых костылей которые теперь его коллегам будут аукаться годами. Хорошо если я не прав, но я видел много таких историй.
Это последний доклад в этом обзоре, но единственный где я не смог дослушать до конца и просто долистал по слайдам. Интегральная оценка 4/10, может быть даже 3/10.
Заключение
Несмотря на фактическую однотрековость конференции, мне не было скучно в зале в Москве и как я понимаю в Ереване скучно тоже не было. Организаторы молодцы что предусмотрели конской величины перерывы для нетворкинга и всего такого. Огромное спасибо и компании Yandex и всем докладчикам независимо от моей оценки их докладов -- вы все сделали эту конференцию такой, какой она получилась, а она получилась превосходной.
Но особое отдельное и огромное спасибо за оперативную публичную выкладку. В чём главная проблема того же C++Russia -- я всегда после конференции хочу написать такой же пост, но доклады выходят через год и я сам забываю что и про кого хотел написать. Да и актуальность уходит. А тут всё, сразу и бесплатно.
Хотелось бы также сказать спасибо всем зрителям, которые пришли поддержать мой доклад. У меня была прекрасная группа поддержки и для меня лично эта конференция закончилась в 6 утра где-то на Пятницкой.
Мне часто указывают, что у меня есть мой собственный канал где аудитория больше, чем на каналах большинства конференций, куда я хожу. Не логично ли если я хочу сообщить что-то интересное просто выкладывать это там? Но конференция это не только доклады, это в первую очередь живое и непосредственное общение между людьми, одинаково глубоко увлечёнными одной и той же темой -- нашим лучшим и любимым языком C++ и всем что происходит вокруг него.
Поэтому их всегда хочется больше: интересных и разных.