Обзор докладов прошедшей Zero Cost Conf'2024

Обзор докладов прошедшей Zero Cost Conf'2024

Константин Владимиров

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

Как устроены память и кеши: https://t.me/cpp_lects_rus/189

Интересные C++ решения в llvm-snippy: https://t.me/cpp_lects_rus/188

Если вы какой-то из них ещё не смотрели, то идите смотреть, они того стоят.

Теперь про конференцию в целом и про все остальные доклады. Необходимый дисклеймер -- всё что ниже это только моя точка зрения и я не буду это постоянно уточнять, скажу один раз тут. У вас может быть другая точка зрения и другие оценки, я не претендую на объективность.

Первое с чего хочу начать это похвала организаторам и программному комитету. Хочу покаяться в том, что я вёл себя с этими добрыми людьми просто по свински -- заявился в последний день, ещё и нахамил на обсуждении. Заболеваю звёздной болезнью, что поделать. Но как раз они-то свою работу сделали на отлично. По сравнению с C++Russia 2024 на конференции не было откровенно провальных выступлений или чего-то полностью не в тему. Программа была сбалансирована, интересна, докладчики были отлично подготовлены. Организация была выше всяких похвал, а уж для бесплатной (!) конференции уровень был невероятным. Спасибо и надеюсь, что не в последний раз.

Немного общих замечаний к докладчикам.

  1. Очень у многих существенные проблемы с постановкой задачи. То есть человек сразу переходит к решению какой-то проблемы, раньше чем зал собственно понял что это за проблема.
  2. Тенденция к опасному и неприятному велосипедостроению. Люди пишут свои парсеры вещественных чисел, закладываются на нестандартные возможности компиляторов и линкеров, изобретают какие-то крайне самобытные фреймворки без должного обоснования.
Все мы знаем чем это заканчивается

Я буду рассказывать по порядку, без какого-то особого умысла в расположении доклада.

Василий Куликов, Реализация мьютекса в userver https://youtu.be/myaEpjYyx3I

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

А что будет когда в стандартной библиотеке версии X всё это выкинут? Навсегда останетесь на версии X - 1? Обложитесь ifdef-ами?

Общая оценка 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 можно за пару минут: применяете на свой страх и риск, компилятор не обязан это делать, может сделать, может нет, может в одной версии делать в другой перестать, доклад окончен.

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

Вам этого всего никто не обещал. Если вы не разработчик clang, смотреть в его код вредно.

Оценка 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.

TSocket, TProtocolMessage

Доклад немного не сбалансирован. Примерно половину тайминга (16.5 минут) занимает просто вводная лекция в корутины. Слишком короткая для тех кто про корутины не знает и несколько утомительная для тех кто знает.

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

TFuture

Реимплементация libevent на своей библиотеке это интересно, но из графиков как раз видно, что особо обогнать не удалось.

Интегрально 6/10, хорошая попытка, но можно было лучше.

Андрей Аксёнов, Когда тормозит память: парсим гигабайты в секунду https://youtu.be/Ie3pK1Adm4U
Мне очень не нравится в этом докладе всё: манера подачи материала автором, сам материал, решения к которым автор прибегает.

У него всё тормозит, но при этом нигде не приводится профиль, из которого было бы видно, что тормозят всё-таки критикуемые автором компоненты, а не автор.

Идея писать свой парсер для вещественных чисел или собственную хеш-функцию (если вы не эксперт в этом) лежит далеко за гранью добра и зла. Почему тогда не законтрибьютить в библиотеку если вы можете лучше?

План такой: написать годный парсер на 50 строк, потом пять лет чинить в нём баги, а потом выкинуть и взять нормальный.

Также утверждается ускорение в разы, но не приводится ни техники бенчмаркинга ни результатов бенчмарков ни ссылок на них (сравните со Слотиным например). Вероятно джентельменам верят на слово, но я почему то не верю. Да у вас может быть NDA код который вы ускоряете, но всегда можно выдрать из него ключевые обезличенные фрагменты и согласовать публикацию.

У меня такое чувство что автор получил тактический выигрыш на конкретном продукте и конкретных сценариях, но при этом напихал таких кривых костылей которые теперь его коллегам будут аукаться годами. Хорошо если я не прав, но я видел много таких историй.

Это последний доклад в этом обзоре, но единственный где я не смог дослушать до конца и просто долистал по слайдам. Интегральная оценка 4/10, может быть даже 3/10.

Заключение

Несмотря на фактическую однотрековость конференции, мне не было скучно в зале в Москве и как я понимаю в Ереване скучно тоже не было. Организаторы молодцы что предусмотрели конской величины перерывы для нетворкинга и всего такого. Огромное спасибо и компании Yandex и всем докладчикам независимо от моей оценки их докладов -- вы все сделали эту конференцию такой, какой она получилась, а она получилась превосходной.

Но особое отдельное и огромное спасибо за оперативную публичную выкладку. В чём главная проблема того же C++Russia -- я всегда после конференции хочу написать такой же пост, но доклады выходят через год и я сам забываю что и про кого хотел написать. Да и актуальность уходит. А тут всё, сразу и бесплатно.

Хотелось бы также сказать спасибо всем зрителям, которые пришли поддержать мой доклад. У меня была прекрасная группа поддержки и для меня лично эта конференция закончилась в 6 утра где-то на Пятницкой.

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

Поэтому их всегда хочется больше: интересных и разных.

Report Page