#common #cpp
0. [fact]
Недавно обнаружил, что, когда делаешь
1. [little book] Продуманная оптимизация.
Я искал чего бы почитать, чтобы расширить горизонты понимания методов оптимизации дефолтного бэкендовского кода. В идеале хотел увидеть что-то вроде:
- сокращайте сетевые походы
- упрощайте запросы в БД
- кешируйте
- и ещё несколько поинтов, про которые я раньше не думал.
Ровно за этими новыми знаниями я и шёл.
Мне подсказали про вот эту небольшую книжку (ссылка выше на перевод) про оптимизацию. Того, чего я искал, я не нашёл, но тем не менее она напоминает про важные моменты: что хорошо и что плохо, -- в каком-то более абстрактном смысле.
2. [post] Founder mode.
Я наткнулся на Ваню Чернова через в одном из его докладов на Highload. Доклад был хорош. Канал тоже приятный. Он иногда пишет про какие-то технические вещи. Иногда про что-то более абстрактное. И пишет интересно.
Тут у него три статьи про т.н. founder mode:
- эссе от Paul Graham про само явление
- статья с критикой эссе выше
- и сбоку, но в дополнение статья про Goodhart's law.
Это конечно какие-то пространные рассуждения, которые местами я понять ещё не справляюсь, просто потому что не хватает картинок в голове (возможно из-за отсутствия опыта). Но всё же интересно.
3. [talk] Peering Forward - C++’s Next Decade.
Это первый из сотни докладов на CppCon 2024.
Herb Sutter пускается в пространные рассуждения о том, насколько круче становятся плюсы в следующих стандартах, концентрируясь на рефлексии и безопасности. Иногда с конкретными примерами. Полезно и слушать приятно.
0. [fact]
Недавно обнаружил, что, когда делаешь
throw Response200 из ручки в userver, ты получаешь честный 499. Это в моменте было не очень удобно, потому что пришлось городить лишний try-catch/проверку на успешность выполнения логики, что не давало красиво спрятать детали внутрь функции. Но зато это напомнило важный принцип про то, что exceptions for exceptional. Я в моменте про это забыл, хотя сам когда-то писал про такое. 1. [little book] Продуманная оптимизация.
Я искал чего бы почитать, чтобы расширить горизонты понимания методов оптимизации дефолтного бэкендовского кода. В идеале хотел увидеть что-то вроде:
- сокращайте сетевые походы
- упрощайте запросы в БД
- кешируйте
- и ещё несколько поинтов, про которые я раньше не думал.
Ровно за этими новыми знаниями я и шёл.
Мне подсказали про вот эту небольшую книжку (ссылка выше на перевод) про оптимизацию. Того, чего я искал, я не нашёл, но тем не менее она напоминает про важные моменты: что хорошо и что плохо, -- в каком-то более абстрактном смысле.
2. [post] Founder mode.
Я наткнулся на Ваню Чернова через в одном из его докладов на Highload. Доклад был хорош. Канал тоже приятный. Он иногда пишет про какие-то технические вещи. Иногда про что-то более абстрактное. И пишет интересно.
Тут у него три статьи про т.н. founder mode:
- эссе от Paul Graham про само явление
- статья с критикой эссе выше
- и сбоку, но в дополнение статья про Goodhart's law.
Это конечно какие-то пространные рассуждения, которые местами я понять ещё не справляюсь, просто потому что не хватает картинок в голове (возможно из-за отсутствия опыта). Но всё же интересно.
3. [talk] Peering Forward - C++’s Next Decade.
Это первый из сотни докладов на CppCon 2024.
Herb Sutter пускается в пространные рассуждения о том, насколько круче становятся плюсы в следующих стандартах, концентрируясь на рефлексии и безопасности. Иногда с конкретными примерами. Полезно и слушать приятно.
❤7👍7🔥1🐳1🌚1
#common #cpp #highload
Сегодня 3 ссылки на знакомых.
0. [article] Саша написал огромнющий пост про юникод.
Комментов не будет. Идите читать)
1. [article] Грязные трюки C++ из userver и Boost.
Антон Полухин выкатил пак плюсовых читов из userver. Пост написан по мотивам доклада на C++ Russia в этом году, так что можете почитать и не смотреть его через 3 месяца, когда наконец выложат.
2. [talk] История развития цикла заказа в Яндекс Лавке.
[Довольно близкий ко мне] коллега на FoodTech туре в Москве рассказывал про то, как в Лавке работает цикл заказа и про то, как его переписывали. Во-первых, мне очень нравится концепция. Там реально сто миллионов проблем ребята решили. Во-вторых, я читал код, и он опупенный. Это просто ещё придумать такое надо было!
Сегодня 3 ссылки на знакомых.
0. [article] Саша написал огромнющий пост про юникод.
Комментов не будет. Идите читать)
1. [article] Грязные трюки C++ из userver и Boost.
Антон Полухин выкатил пак плюсовых читов из userver. Пост написан по мотивам доклада на C++ Russia в этом году, так что можете почитать и не смотреть его через 3 месяца, когда наконец выложат.
2. [talk] История развития цикла заказа в Яндекс Лавке.
[Довольно близкий ко мне] коллега на FoodTech туре в Москве рассказывал про то, как в Лавке работает цикл заказа и про то, как его переписывали. Во-первых, мне очень нравится концепция. Там реально сто миллионов проблем ребята решили. Во-вторых, я читал код, и он опупенный. Это просто ещё придумать такое надо было!
❤8👍5
#cpp #common
0. [talk] Message Handling with Boolean Algebra.
Возвращаясь к прошедшему CppCon.
Ben Deane рассказывает про какую-то свою либу для работы с пакетами данных. Выглядит интересно, но самая прикольная часть про реализацию булевой алгебры в либе и некоторых операций с ней. Вспомнил молодость.
1. [article] Around the World in C++: Exploring Time Zones with std::chrono.
Пояснять тут нечего. Bartlomiej Filipek рассказывает про то, как работает с таймзонами в C++20.
2. [article] Don't Break the Bank: Smart Spending on Software Architecture.
Коротенькая статья, которая напоминает про главный ресурс любой разработки -- деньги. Мы почти никогда, особенно в больших компаниях, про них не думаем. Хотя абсолютно любое решение так или иначе выливается в какие-то денежные дельты: будь-то экономия CPU или неэффективный код.
Такое маленькое напоминание.
3. [article] A list of ternary operators.
Наш любимый
В небольшой статье выше несколько примеров других тернарных операторов в разных языках.
4. [article] Falsehoods Programmers Believe About Job Applicants.
Это даже не статья, а скорее список того, какие некорректные предположения делаются в формах подачи application на работу. Есть пару забавных, например "A job is legal".
5. [article] IMG_0416.
Когда-то на iphone была возможность загрузить видео сразу на youtube, что породило огромное количество видосов вида IMG_XXXX. Статья рассказывает про это.
Можно найти видосик с датой своего дня рождения. Я хотел оставить тут ссылочку на один из своих, но не смог выбрать. Всё забавное попалось.
0. [talk] Message Handling with Boolean Algebra.
Возвращаясь к прошедшему CppCon.
Ben Deane рассказывает про какую-то свою либу для работы с пакетами данных. Выглядит интересно, но самая прикольная часть про реализацию булевой алгебры в либе и некоторых операций с ней. Вспомнил молодость.
1. [article] Around the World in C++: Exploring Time Zones with std::chrono.
Пояснять тут нечего. Bartlomiej Filipek рассказывает про то, как работает с таймзонами в C++20.
2. [article] Don't Break the Bank: Smart Spending on Software Architecture.
Коротенькая статья, которая напоминает про главный ресурс любой разработки -- деньги. Мы почти никогда, особенно в больших компаниях, про них не думаем. Хотя абсолютно любое решение так или иначе выливается в какие-то денежные дельты: будь-то экономия CPU или неэффективный код.
Такое маленькое напоминание.
3. [article] A list of ternary operators.
Наш любимый
? : из плюсов называется тернарным оператором, потому что он принимает 3 аргумента. И т.к. других таких нет, общее имя было оккупировано. В небольшой статье выше несколько примеров других тернарных операторов в разных языках.
4. [article] Falsehoods Programmers Believe About Job Applicants.
Это даже не статья, а скорее список того, какие некорректные предположения делаются в формах подачи application на работу. Есть пару забавных, например "A job is legal".
5. [article] IMG_0416.
Когда-то на iphone была возможность загрузить видео сразу на youtube, что породило огромное количество видосов вида IMG_XXXX. Статья рассказывает про это.
Можно найти видосик с датой своего дня рождения. Я хотел оставить тут ссылочку на один из своих, но не смог выбрать. Всё забавное попалось.
👍11❤1🔥1
#cpp
0. [post] Почитайте пост про баг, который у нас был когда-то.
Если чуть подробнее, то проблема такая:
- после перекладывания объектов из мапки в вектор мы их не сортили
- по этому несорченному вектору мы брали слайс
- отдавали слайс наружу.
Т.к. это std::unordered_map, то понятно, что порядок не гарантируется. И вот почему-то по ночам всё работало идеально. Порядок каждый раз был корректным. После k походов в
1. [article] I've Built My First Successful Side Project, and I Hate It.
Интересный пост про прелести продажи пет-проектов. Он почти совсем не технический, а скорее про интересные ситуации, с которыми столкнулся автор в процессе продажи своего софта. Местами вкусно.
2. [little article] A Shiny New Programming Language.
Небольшая статья про новый ЯП, на котором не нужно явно писать код. Схема такая:
- вы пишете сигнатуру функции
- даёте несколько примеров того, как она должна работать
- на основании этого генерируется js код.
Так сказать example driven development.
В статье есть ссылка на github репозиторий, который можно склонить и со своим OpenAI API ключом запустить штуку локально. Я хотел потыкаться на предмет мощности генерации, но жизнь в Беларуси не позволяет мне это сделать, так что может кто-то заинтересуется и покидает в комменты, что смогло нагенерить, а что нет : )
=================
Пост получится маленький. Почти наверняка до конца года я закину ещё только запись своего выступления со вчерашнего foodtech tour в Минске и ссылочки за весь год, чтобы напомнить про посты этого года. Хочется уже немножко выдохнуть и отдохнуть какое-то время.
А может придёт вдохновение и ещё чего-нибудь да закину.
0. [post] Почитайте пост про баг, который у нас был когда-то.
Если чуть подробнее, то проблема такая:
- после перекладывания объектов из мапки в вектор мы их не сортили
- по этому несорченному вектору мы брали слайс
- отдавали слайс наружу.
Т.к. это std::unordered_map, то понятно, что порядок не гарантируется. И вот почему-то по ночам всё работало идеально. Порядок каждый раз был корректным. После k походов в
/products-data мы получали полное множество всех товаров. По утрам что-то ломалось и подобное перекладывание товаров из std::unordered_map в std::vector и последующий слайс из вектора приводил к тому, что некоторые товары повторялись в разных батчах, а некоторые вообще до клиента не доезжали. Никаких релизов/изменений конфигов, которые могли по утрам приводить к изменению порядка обхода мапки, а вечером снова заставлять работать как надо, не было! Вот уж действительно жирнейшая загадка в моём плюсовом опыте.1. [article] I've Built My First Successful Side Project, and I Hate It.
Интересный пост про прелести продажи пет-проектов. Он почти совсем не технический, а скорее про интересные ситуации, с которыми столкнулся автор в процессе продажи своего софта. Местами вкусно.
2. [little article] A Shiny New Programming Language.
Небольшая статья про новый ЯП, на котором не нужно явно писать код. Схема такая:
- вы пишете сигнатуру функции
- даёте несколько примеров того, как она должна работать
- на основании этого генерируется js код.
Так сказать example driven development.
В статье есть ссылка на github репозиторий, который можно склонить и со своим OpenAI API ключом запустить штуку локально. Я хотел потыкаться на предмет мощности генерации, но жизнь в Беларуси не позволяет мне это сделать, так что может кто-то заинтересуется и покидает в комменты, что смогло нагенерить, а что нет : )
=================
Пост получится маленький. Почти наверняка до конца года я закину ещё только запись своего выступления со вчерашнего foodtech tour в Минске и ссылочки за весь год, чтобы напомнить про посты этого года. Хочется уже немножко выдохнуть и отдохнуть какое-то время.
А может придёт вдохновение и ещё чего-нибудь да закину.
👍15🤯3❤1
#cpp #common #math
1. [talk] C++ Reflection Is Not Contemplation.
Доклад Andrei Alexandrescu с CppCon 2024 про рефлексию. Чуть-чуть посмотрели на базу, посмотрели на несколько последних пропозалов и ушли в сторону в какие-то абстрактные рассуждения. В классической свободной заводной манере. Лайкнул.
2. [talk] Building Cppcheck - What We Learned from 17 Years of Development.
Автор cppcheck рассказывает про то, как развивался проект и про разные вехи на этом пути. Не прям технический доклад. Интересно посмотреть на историю известной тулзы.
3. [article] Preferring throwaway code over design docs.
Автор предлагает почаще кодить прототипы перед тем, как писать дизайн доки/писать финальное решение. Так вы получаете некоторые знания о потенциальных проблемах заранее. А ещё позиционирует смерженные pull request'ы как хорошую "документацию", т.к. они всегда актуальны для какой-то точки в истории. Со вторым я согласен. Но с первым нет. В условиях постоянной гонки и нехватки ресурсов нет времени садиться писать код для большинства фичей. А там, где ошибка стоит дороже всего (большие проекты с жёсткими дедлайнами) такой подход может сильно скушать время, т.к. для большой фичи -- большой прототип.
4. [article] Probability and Games: Damage Rolls.
В статье рассказывают про то, как из рандома делать разные распределения, чтобы потом это можно было использовать в различных игровых механиках. Начинают с базовых бросков кубика и заканчивают произвольным распределением значений. Заодно можно потыкаться во всякое интерактивное, чтобы лучше понять, как что работает.
В дополнение закину вам баянистую таску с собеседований в тему (правда не знаю, куда конкретно; мне её рассказывали много-много лет назад).
У вас есть функция
- rand2?
- rand36?
- rand5?
- rand10?
Все они должны строиться поверх rand6 и производных и должны возращать числа равновероятно.
1. [talk] C++ Reflection Is Not Contemplation.
Доклад Andrei Alexandrescu с CppCon 2024 про рефлексию. Чуть-чуть посмотрели на базу, посмотрели на несколько последних пропозалов и ушли в сторону в какие-то абстрактные рассуждения. В классической свободной заводной манере. Лайкнул.
2. [talk] Building Cppcheck - What We Learned from 17 Years of Development.
Автор cppcheck рассказывает про то, как развивался проект и про разные вехи на этом пути. Не прям технический доклад. Интересно посмотреть на историю известной тулзы.
3. [article] Preferring throwaway code over design docs.
Автор предлагает почаще кодить прототипы перед тем, как писать дизайн доки/писать финальное решение. Так вы получаете некоторые знания о потенциальных проблемах заранее. А ещё позиционирует смерженные pull request'ы как хорошую "документацию", т.к. они всегда актуальны для какой-то точки в истории. Со вторым я согласен. Но с первым нет. В условиях постоянной гонки и нехватки ресурсов нет времени садиться писать код для большинства фичей. А там, где ошибка стоит дороже всего (большие проекты с жёсткими дедлайнами) такой подход может сильно скушать время, т.к. для большой фичи -- большой прототип.
4. [article] Probability and Games: Damage Rolls.
В статье рассказывают про то, как из рандома делать разные распределения, чтобы потом это можно было использовать в различных игровых механиках. Начинают с базовых бросков кубика и заканчивают произвольным распределением значений. Заодно можно потыкаться во всякое интерактивное, чтобы лучше понять, как что работает.
В дополнение закину вам баянистую таску с собеседований в тему (правда не знаю, куда конкретно; мне её рассказывали много-много лет назад).
У вас есть функция
rand6(), которая равновероятно возращает целое число из отрезка [0; 5]. Как из неё сделать:- rand2?
- rand36?
- rand5?
- rand10?
Все они должны строиться поверх rand6 и производных и должны возращать числа равновероятно.
🤔1
#math #cpp #highload #common
0. [talk] YouTube Scalability.
Доклад про то, как скейлился youtube. Чувак рассказывает про основные проблемы, с которыми столкнулась [тогда ещё] небольшая команда, вплоть до невозможности загружать видео на платформу. Между делом бывают забавные вставки. Несмотря на то, что информация не везде знакомая, рассказывают очень понятно.
1. [article] 2D Visibility.
Статья рассказывает базу про то, как работает видимость в 2D пространствах. Хотя контента прям тут не прям много, внутри очень много ссылок на разные доп материалы, так что если вам такое интересно, можно зависнуть.
2. [article] Cognitive load is what matters.
Автор пишет про то, что такое когнитивная нагрузка в программировании, приводит примеры от кода до архитектуры и вбрасывает некоторые рекомендации, как же сделать лучше.
Статья большая, но полезная (хотя там есть short версия).
3. [article] End-to-end Шифрование.
Вастрик написал пост про End-to-end шифрование. В своём классикал стиле и как для тупых.
4. [article] 4 billion if statements.
Автор увидел тик-ток, где кто-то ифал каждое число, чтобы определить чётное оно или нет. И автор решил посмотреть, насколько сложно вообще такое написать. Он начал с простого ифания нескольких чисел, потом пошёл генерить код, после чего пошёл генерить asm. И после некоторых манипуляций всё заработало! Такой минизабавыч в конце.
0. [talk] YouTube Scalability.
Доклад про то, как скейлился youtube. Чувак рассказывает про основные проблемы, с которыми столкнулась [тогда ещё] небольшая команда, вплоть до невозможности загружать видео на платформу. Между делом бывают забавные вставки. Несмотря на то, что информация не везде знакомая, рассказывают очень понятно.
Доклад довольно старый. 2007-ого года. Я в школу в том году пошёл.
1. [article] 2D Visibility.
Статья рассказывает базу про то, как работает видимость в 2D пространствах. Хотя контента прям тут не прям много, внутри очень много ссылок на разные доп материалы, так что если вам такое интересно, можно зависнуть.
2. [article] Cognitive load is what matters.
Автор пишет про то, что такое когнитивная нагрузка в программировании, приводит примеры от кода до архитектуры и вбрасывает некоторые рекомендации, как же сделать лучше.
Статья большая, но полезная (хотя там есть short версия).
3. [article] End-to-end Шифрование.
Вастрик написал пост про End-to-end шифрование. В своём классикал стиле и как для тупых.
4. [article] 4 billion if statements.
Автор увидел тик-ток, где кто-то ифал каждое число, чтобы определить чётное оно или нет. И автор решил посмотреть, насколько сложно вообще такое написать. Он начал с простого ифания нескольких чисел, потом пошёл генерить код, после чего пошёл генерить asm. И после некоторых манипуляций всё заработало! Такой минизабавыч в конце.
❤9🐳2
#highload #cpp #common
0. У меня на днях встретилась абсолютно простая задача (прям как на собесе, а вы говорите, что не нужны эти алгоритмы в жизни): в векторе чисел переместить все нули в конец. Недолго думая я делаю
И для примера
получаю
Где-то есть баг.
Очевидно, что баг был в моей интерпретации алгоритма. Вот как выглядит стандартное использование
В голове я строю последовательность происходящего:
- все нули ушли в конец
- получаю итератор на первый нуль
- удаляю все нули.
И в первом пункте уже ошибка. Ведь нули не ушли в конец. Наоборот, в начало ушли все не нули. Что там в конце, меняебать волновать вообще не должно. Оно всё равно будет удалено.
То есть мы имеем на текущий C++20-й момент:
- удаляем элементы мы с
- если я хочу все нули в конец, то мне нужен
-
1. [talk] Как развивалось прогнозирование в Яндекс Погоде.
Коллега год назад рассказывал про то, как в Погоде предсказывают, неожиданно, погоду. Не то чтобы сложный технически доклад, но интересный с точки зрения незнакомого продукта и базовых деталей.
2. [article] Accelerating LinkedIn’s My Network tab by reducing latency and improving UX.
Суть статьи в названии.
У нас есть какая-то похожая задача, потому было интересно почитать. Жаль только, что они всё же различаются достаточно, чтобы не суметь перенять подход.
3. [article] Your business value.
Очень хорошая статья, которая в каждом предложении напоминает про то, зачем профессия программиста существует. Она, так сказать, постоянно cycle on a subject о вашей личной полезности для бизнеса и разбирает кейсы роста/увольнений в зависимости от разных факторов.
Будьте профитными.
0. У меня на днях встретилась абсолютно простая задача (прям как на собесе, а вы говорите, что не нужны эти алгоритмы в жизни): в векторе чисел переместить все нули в конец. Недолго думая я делаю
std::remove(vec.begin(), vec.end(), 0);
И для примера
vec = {1, 4, 0, 2, 0, 0}
получаю
{1, 4, 2, 2, 0, 0}
Где-то есть баг.
Очевидно, что баг был в моей интерпретации алгоритма. Вот как выглядит стандартное использование
std::remove до C++20:
vec.erase(std::remove(vec.begin(), vec.end(), 0), v.end());
В голове я строю последовательность происходящего:
- все нули ушли в конец
- получаю итератор на первый нуль
- удаляю все нули.
И в первом пункте уже ошибка. Ведь нули не ушли в конец. Наоборот, в начало ушли все не нули. Что там в конце, меня
То есть мы имеем на текущий C++20-й момент:
- удаляем элементы мы с
std::erase/std::erase_if- если я хочу все нули в конец, то мне нужен
std::partition-
std::remove/std::remove_if нужен только ради обратной совместимости, т.к. никакой уникальной задачи он уже не решает. Жаль братка. 1. [talk] Как развивалось прогнозирование в Яндекс Погоде.
Коллега год назад рассказывал про то, как в Погоде предсказывают, неожиданно, погоду. Не то чтобы сложный технически доклад, но интересный с точки зрения незнакомого продукта и базовых деталей.
2. [article] Accelerating LinkedIn’s My Network tab by reducing latency and improving UX.
Суть статьи в названии.
У нас есть какая-то похожая задача, потому было интересно почитать. Жаль только, что они всё же различаются достаточно, чтобы не суметь перенять подход.
3. [article] Your business value.
Очень хорошая статья, которая в каждом предложении напоминает про то, зачем профессия программиста существует. Она, так сказать, постоянно cycle on a subject о вашей личной полезности для бизнеса и разбирает кейсы роста/увольнений в зависимости от разных факторов.
Будьте профитными.
❤12👍3🔥1🤔1
#cpp
Наконец выложили все интересные мне доклады с C++ Russia 2024. Чекаем:
1. [talk] О денотации: разрешение имен и его пересмотр в C++23. Константин Владимиров.
Надо думать, да. Но кайф.
Мне ещё, чисто концептуально, понравился мув сделать список рекомендуемых вопросов и ответов на них. Я такое повторял пару раз и было красиво.
2. [talk] Обзор C++26. Александр Фокин.
Местами кайф. Дай бог дожить до всего этого счастья в проде.
3. [talk] Контракты для С++. Тимур Думлер.
От кого ещё слушать про контракты, если не от одного из авторов пропозала.
4. [talk] LeakSanitizer и менеджмент памяти. Алексей Веселовский.
Немного хардкорчика и внутрянки санитайзеров.
5. [talk] Pets, cattle and automatic operations with code. Святослав Фельдшеров.
Докладчик рассказывает про тулинг кланга, который может помочь в решении задач, которые конечно можно решить более базовыми средствами, но будет не оч приятно.
6. [talk] Дерево смещений: работаем с динамически изменяемыми сегментированными массивами. Роман Панов.
Докладчик взял задачу показывания сообщений в диалоге с некоторыми ограничениями и придумал структуру данных, которая помогает эту задачу эффективно решать. Не развал, но прикольно.
7. [talk] Грязные C++ трюки из userver и Boost. Антон Полухин.
Или можно почитать текстовую версию на habr.
Последние доклады Антона мне нравятся, потому что от технопиара userver он вернулся в технический хардкорчик. Получилось интересно.
8. [talk] Улучшенные версии STL-контейнеров из библиотеки Boost. Илья Мещерин.
Несложно и интересно. Мне вообще вот такое всё интересно. Про контейнеры и штуки около. Думаю, что надо бы вылить своё понимание этой всей мишуры в вас когда-нибудь.
9. [talk] Полезные трюки С++ на примере организации пайплайна. Павел Сухов.
Я уже кидал ссылку на текстовую версию доклада коллег из Доставки.
Понравилось, что речь про реальную задачу и что в этой реальной задаче получилось поюзать нетривиальные возможности плюсов. Всё то, чего мы так сильно хотим, но так редко можем.
10. [talk] JSON в C++: проектируем тип для работы с JSON-значениями. Павел Новиков.
Забавно, что Павел придумал себе проблему и сражается с ней.
У Павла ещё была вторая часть этой эпопеи на C++ Zero Cost Conf, но она мне меньше зашла. Оставлю тут для полной картинки.
11. [talk] Опасность устарела, неопределенность недопустима: undefined behavior в С++20/23/26. Сергей Талантов.
Хороший доклад про undefined behaviour. Имхо этого никогда не бывает много. Мы ж не хотим сегфолтики в проде ловить??
12. [talk] constexpr-аллокатор для контейнеров стандартной библиотеки. Сергей Добычин.
Я люблю контейнеры, люблю аллокаторы (пруфы раз два) и люблю constexpr. Тут всё разом. Доклад немного напряжный. Надо думать. Но имхо резы у чувака крутые.
13. [masterclass] Выше вилки от Ильи @imhired Шишкова.
Очередное напоминание про то, что мы работаем так или иначе ради бабок и что их надо где-то брать. Вот если ребят внимательно послушать, то складывается хорошая картинка.
Онлайн часть C++ Russia 2025 начинается уже завтра. Туда вы можете зарегаться бесплатно в рамках комунити дня.
Я планирую выступать на следующей неделе с, кажется, единственным лайтнингом в этом году и заодно у Паши Сухова на докладе про шаблоны поторчу экспертом. Можете меня где-нибудь найти поболтать, если интересно : )
Наконец выложили все интересные мне доклады с C++ Russia 2024. Чекаем:
1. [talk] О денотации: разрешение имен и его пересмотр в C++23. Константин Владимиров.
Надо думать, да. Но кайф.
Мне ещё, чисто концептуально, понравился мув сделать список рекомендуемых вопросов и ответов на них. Я такое повторял пару раз и было красиво.
2. [talk] Обзор C++26. Александр Фокин.
Местами кайф. Дай бог дожить до всего этого счастья в проде.
3. [talk] Контракты для С++. Тимур Думлер.
От кого ещё слушать про контракты, если не от одного из авторов пропозала.
4. [talk] LeakSanitizer и менеджмент памяти. Алексей Веселовский.
Немного хардкорчика и внутрянки санитайзеров.
5. [talk] Pets, cattle and automatic operations with code. Святослав Фельдшеров.
Докладчик рассказывает про тулинг кланга, который может помочь в решении задач, которые конечно можно решить более базовыми средствами, но будет не оч приятно.
6. [talk] Дерево смещений: работаем с динамически изменяемыми сегментированными массивами. Роман Панов.
Докладчик взял задачу показывания сообщений в диалоге с некоторыми ограничениями и придумал структуру данных, которая помогает эту задачу эффективно решать. Не развал, но прикольно.
7. [talk] Грязные C++ трюки из userver и Boost. Антон Полухин.
Или можно почитать текстовую версию на habr.
Последние доклады Антона мне нравятся, потому что от технопиара userver он вернулся в технический хардкорчик. Получилось интересно.
8. [talk] Улучшенные версии STL-контейнеров из библиотеки Boost. Илья Мещерин.
Несложно и интересно. Мне вообще вот такое всё интересно. Про контейнеры и штуки около. Думаю, что надо бы вылить своё понимание этой всей мишуры в вас когда-нибудь.
9. [talk] Полезные трюки С++ на примере организации пайплайна. Павел Сухов.
Я уже кидал ссылку на текстовую версию доклада коллег из Доставки.
Понравилось, что речь про реальную задачу и что в этой реальной задаче получилось поюзать нетривиальные возможности плюсов. Всё то, чего мы так сильно хотим, но так редко можем.
10. [talk] JSON в C++: проектируем тип для работы с JSON-значениями. Павел Новиков.
Забавно, что Павел придумал себе проблему и сражается с ней.
У Павла ещё была вторая часть этой эпопеи на C++ Zero Cost Conf, но она мне меньше зашла. Оставлю тут для полной картинки.
11. [talk] Опасность устарела, неопределенность недопустима: undefined behavior в С++20/23/26. Сергей Талантов.
Хороший доклад про undefined behaviour. Имхо этого никогда не бывает много. Мы ж не хотим сегфолтики в проде ловить??
12. [talk] constexpr-аллокатор для контейнеров стандартной библиотеки. Сергей Добычин.
Я люблю контейнеры, люблю аллокаторы (пруфы раз два) и люблю constexpr. Тут всё разом. Доклад немного напряжный. Надо думать. Но имхо резы у чувака крутые.
13. [masterclass] Выше вилки от Ильи @imhired Шишкова.
Очередное напоминание про то, что мы работаем так или иначе ради бабок и что их надо где-то брать. Вот если ребят внимательно послушать, то складывается хорошая картинка.
Онлайн часть C++ Russia 2025 начинается уже завтра. Туда вы можете зарегаться бесплатно в рамках комунити дня.
Я планирую выступать на следующей неделе с, кажется, единственным лайтнингом в этом году и заодно у Паши Сухова на докладе про шаблоны поторчу экспертом. Можете меня где-нибудь найти поболтать, если интересно : )
👍20🔥6❤3🐳1
#cpp #highload #common
0. [talk] The Beman Project: Bringing C++ Standard Libraries to the Next Level.
Докладчик рассказывает про bemanproject, который должен помочь во внедрении предложений в стандарт через получение раннего фидбека о потенциальной имплементации пейперов. Если точнее, то сначала про мотивацию, потом про принципы работы и в конце накидывает примерчиков. В конце участники проекта коллективно отвечают на вопросы о проекте.
Имхо очень естественное и красивое дополнение к процессу принятия пейперов. Выглядит ну очень вкусно. Интересно только, кто осмелится затаскивать к себе либу, чтобы тестить потенциальные новинки пораньше и репортить фидбек, ведь это тянет за собой постоянное обновление либы, ресурс на переход на стандартные средства и потенциальное выпиливание outdated кода, который принят не был.
Хочется посмотреть на это через пару лет.
1. [article] The billion docs JSON Challenge: ClickHouse vs. MongoDB, Elasticsearch, and more.
Чуваки из ClickHouse сделали бенчмарк, в котором обрабатывали 5 агрегационных запросов на датасете из 1 млрд реальных JSON. Сравнение было с MongoDB, Elasticsearch, DuckDB и PostgreSQL (думаю, вы уже поняли, кто показал себя лучше всего).
Во-первых, имхо очень хороший пример того, как надо бенчмарки описывать. Во-вторых, я не прям уверен, что сравнение всё-таки корректное, т.к. все рассматриваемые бдшки (кроме DuckDB, это хз что такое) концентрируются на не совсем тех же задачах (в моей голове), так что могут спокойно на конкретных сценариях проигрывать. И это нормально.
В-третьих, тем удивительнее, что эластик не пальцем деланый и результаты по перфу на этой задаче у него уходят недалеко. Новое открытие для меня.
2. [article] My DOs and DON’Ts of Software Architecture.
Вот вроде почитаешь статью и подумаешь, что всё очевидно. И непонятно зачем на это время тратил(-а).
На практике, правда, всё не так clear, и иногда распознать базовые случаи, в которые стоит поступить ровно так, как написано, сложно. Или иногда сложно понять, а как правильно сейчас поступить.
В моей голове эти пунктики очень хороши для вашего роста, если вы хотите расти быстро. Но ещё важно не забывать, что иногда надо не расти, а учиться. И что эти вещи не всегда в моменте совместимы. Вдолгую да, но не всегда сейчас.
0. [talk] The Beman Project: Bringing C++ Standard Libraries to the Next Level.
Докладчик рассказывает про bemanproject, который должен помочь во внедрении предложений в стандарт через получение раннего фидбека о потенциальной имплементации пейперов. Если точнее, то сначала про мотивацию, потом про принципы работы и в конце накидывает примерчиков. В конце участники проекта коллективно отвечают на вопросы о проекте.
Имхо очень естественное и красивое дополнение к процессу принятия пейперов. Выглядит ну очень вкусно. Интересно только, кто осмелится затаскивать к себе либу, чтобы тестить потенциальные новинки пораньше и репортить фидбек, ведь это тянет за собой постоянное обновление либы, ресурс на переход на стандартные средства и потенциальное выпиливание outdated кода, который принят не был.
Хочется посмотреть на это через пару лет.
1. [article] The billion docs JSON Challenge: ClickHouse vs. MongoDB, Elasticsearch, and more.
Чуваки из ClickHouse сделали бенчмарк, в котором обрабатывали 5 агрегационных запросов на датасете из 1 млрд реальных JSON. Сравнение было с MongoDB, Elasticsearch, DuckDB и PostgreSQL (думаю, вы уже поняли, кто показал себя лучше всего).
Во-первых, имхо очень хороший пример того, как надо бенчмарки описывать. Во-вторых, я не прям уверен, что сравнение всё-таки корректное, т.к. все рассматриваемые бдшки (кроме DuckDB, это хз что такое) концентрируются на не совсем тех же задачах (в моей голове), так что могут спокойно на конкретных сценариях проигрывать. И это нормально.
В-третьих, тем удивительнее, что эластик не пальцем деланый и результаты по перфу на этой задаче у него уходят недалеко. Новое открытие для меня.
2. [article] My DOs and DON’Ts of Software Architecture.
Вот вроде почитаешь статью и подумаешь, что всё очевидно. И непонятно зачем на это время тратил(-а).
На практике, правда, всё не так clear, и иногда распознать базовые случаи, в которые стоит поступить ровно так, как написано, сложно. Или иногда сложно понять, а как правильно сейчас поступить.
В моей голове эти пунктики очень хороши для вашего роста, если вы хотите расти быстро. Но ещё важно не забывать, что иногда надо не расти, а учиться. И что эти вещи не всегда в моменте совместимы. Вдолгую да, но не всегда сейчас.
🤔6👍3❤1
#cpp
1. [talk] Gazing Beyond Reflection for C++26.
Daveed Vandervoorde рассказывает про осенний state рефлексии. В докладе огромное кол-во примеров. В том числе не самых тривиальных. В том числе со ссылками на godbolt. За полгода, прошедших с конференции, видимо, многое поменялось, т.к. часть примеров уже не работают, но всё равно можно потыкаться и попробовать всякое разное.
2. [article] Tech Debt doesn't exist, but trade-offs do.
Чувак говорит, что метафора тех долга не прям корректна и надо от неё отказываться, т.к. на самом деле это не долг, который надо обязательно погасить. Это трейд офф и чтобы с ним в будущем разобраться, вам нужно честно ответить себе и бизнесу на k вопросов, которые дадут полное понимание текущих и будущих проблем.
3. [article] How Not To Sort By Average Rating.
Статья 2009 (!!) года про то, как правильно ранжировать айтемы при наличии лайков-дизлайков. Имхо оч забавная, потому что говорит "не надо делать 1 и не надо делать 2, вместо этого делайте 998244353".
4. [article] The Best Programmers I Know.
В конце статьи есть такая цитата
Так что я ничего про содержание не скажу. Читайте сами.
1. [talk] Gazing Beyond Reflection for C++26.
Daveed Vandervoorde рассказывает про осенний state рефлексии. В докладе огромное кол-во примеров. В том числе не самых тривиальных. В том числе со ссылками на godbolt. За полгода, прошедших с конференции, видимо, многое поменялось, т.к. часть примеров уже не работают, но всё равно можно потыкаться и попробовать всякое разное.
Мне очень понравилось, когда на слайде у него было ... как знак неважности происходящего, а в godbolt вместо трёх точек 120 строк какого-то нетривиального кода.2. [article] Tech Debt doesn't exist, but trade-offs do.
Чувак говорит, что метафора тех долга не прям корректна и надо от неё отказываться, т.к. на самом деле это не долг, который надо обязательно погасить. Это трейд офф и чтобы с ним в будущем разобраться, вам нужно честно ответить себе и бизнесу на k вопросов, которые дадут полное понимание текущих и будущих проблем.
3. [article] How Not To Sort By Average Rating.
Статья 2009 (!!) года про то, как правильно ранжировать айтемы при наличии лайков-дизлайков. Имхо оч забавная, потому что говорит "не надо делать 1 и не надо делать 2, вместо этого делайте 998244353".
4. [article] The Best Programmers I Know.
В конце статьи есть такая цитата
don’t trick yourself into thinking that you can skip the hard work. There is no shortcut.
Так что я ничего про содержание не скажу. Читайте сами.
👍16😁4❤3 1
#cpp #python #highload
0. [fact] В С++ можно брать указатели на goto метки.
godbolt.
ChatGpt говорит, что это только у GCC, но с Clang тоже компилится.
Можно, но не нужно❌
1. [talk] Why Is My C++ Build So Slow? Compilation Profiling and Visualization.
Samuel Приветт рассказывает про проблему медленной компиляции, как её детектить и что с ней делать.
Интересно как-нибудь потыкаться, насколько сложно упомянутые им инструменты притягиваются в большие промышленные проекты вроде нашего. Может получится пост!
2. [article] Python's new t-strings.
Одной из (насколько я понял) крутейших фичей в python 3.14 являются t-strings. В статье кратко про то, что это такое и зачем может быть нужно.
Я пока не прям въехал с точки зрения недомашних примеров. Верю, что опыт всё порешает. Если вам ждать не хочется, вот репозиторий из статьи с большим кол-вом примеров.
Рядышком докину статью про то, какие фичи в новом питоне появляются. Или можете официальную документацию посмотреть.
3. [article] Improving Pinterest Search Relevance Using Large Language Models.
Чувак из Pinterest рассказывают про то, как применяют LLM для улучшения качества поиска. Если кратко, то
- на основе разметки выдачи на релевантность людьми учат огромную тяжёлую LLM предсказывать релевантность выдачи
- на основе тяжёлой LLM учат student LLM, чтобы использовать её в онлайне (т.к. она легче и инфересится быстрее)
Ну и всё. Там они ещё порассказывали, какие LLM использовали и какие результаты получились в их экспериментах.
Я не поклонник LLM во всех дырах. И потому статья местами воспринимается как что-то, что написали, потому что надо было показать, какие все передовые. Но может я скептик.
0. [fact] В С++ можно брать указатели на goto метки.
void computed_goto_example(int state) {
static void* dispatch[] = { &&State0, &&State1, &&State2 };
goto *dispatch[state];
State0:
//
return;
State1:
//
return;
State2:
//
return;
}
godbolt.
ChatGpt говорит, что это только у GCC, но с Clang тоже компилится.
Можно, но не нужно
1. [talk] Why Is My C++ Build So Slow? Compilation Profiling and Visualization.
Samuel Приветт рассказывает про проблему медленной компиляции, как её детектить и что с ней делать.
Интересно как-нибудь потыкаться, насколько сложно упомянутые им инструменты притягиваются в большие промышленные проекты вроде нашего. Может получится пост!
2. [article] Python's new t-strings.
Одной из (насколько я понял) крутейших фичей в python 3.14 являются t-strings. В статье кратко про то, что это такое и зачем может быть нужно.
Я пока не прям въехал с точки зрения недомашних примеров. Верю, что опыт всё порешает. Если вам ждать не хочется, вот репозиторий из статьи с большим кол-вом примеров.
Рядышком докину статью про то, какие фичи в новом питоне появляются. Или можете официальную документацию посмотреть.
Если вы посмотрите в официальную доку, найдёте секцию под названием And now for something completely different. В ней есть какой-то факт про число pi. Ссылка, которую я вам оставил, является последней актуальной версией это странички и заканчивается на a7. Можно посмотреть предыдущие версии страницы, подекрементив чиселко и почитать другие факты про pi. Прикольно.
3. [article] Improving Pinterest Search Relevance Using Large Language Models.
Чувак из Pinterest рассказывают про то, как применяют LLM для улучшения качества поиска. Если кратко, то
- на основе разметки выдачи на релевантность людьми учат огромную тяжёлую LLM предсказывать релевантность выдачи
- на основе тяжёлой LLM учат student LLM, чтобы использовать её в онлайне (т.к. она легче и инфересится быстрее)
Ну и всё. Там они ещё порассказывали, какие LLM использовали и какие результаты получились в их экспериментах.
Я не поклонник LLM во всех дырах. И потому статья местами воспринимается как что-то, что написали, потому что надо было показать, какие все передовые. Но может я скептик.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯5👍4🔥2 2
#cpp #common
0. [channel] Я недавно между делом познакомился с Антоном Черноусовым и стал почитывать его канал (@taoplive).
Он иногда рассказывает какие-то новостные штуки, а иногда что-то про управление/психологию/из опыта/что ему захочется.
Один из немногих каналов подобного "широкого" профиля, который у меня прижился. Может и вам понравится.
1. [article] YTsaurus — два года в опенсорсе: чего мы достигли и куда движемся.
Месяц назад коллеги написали про новое в open-source YTsaurus и релизный цикл в последнее время.
2. [article] Interviewing Software Developers: From Junior to Architect in a Single Programming Task.
Вот тут коллега из Google рассказывает про то, как он проверяет уровень кандидата на собеседовании одной единственной задачей: найти сумму чисел.
С одной стороны, мне нравится подход. Вроде у нас есть изначально простая таска, но по факту она настолько глубокая, что можно уйти далеко-далеко.
С другой стороны, ну камон, если ты говоришь "найди сумму чисел" и хочешь, чтобы тебе написали serializable processed state, ну может надо подумать ещё разочек, то ли ты от кандидата хочещь.
И потом мы читаем на habr, что в какой-нибудь большой компании на собеседовании непонятно что хотели. А на конфах под пиво задвигаем друг другу, что "продакт гыгыгы требования непонятные принёс пришлось гыгыгы самому разбираться".
Ой не могу🥳
3. [article] How Discord Indexes Trillions of Messages.
В 2023м я постил статью про то, как в Discord хранят триллионы сообщений. Новая статья -- про их индексацию. Начинают ребята с проблем, которые у них были в последнее время. А потом рассказывают, что они сделали для улучшения. Результаты довольно впечатляющие.
=======================
20 мая заканчивается call for papers на C++ Zero Cost Conf 2025. Ещё есть пару дней, чтобы успеть податься: https://cppzerocostconf.yandex.ru : )
0. [channel] Я недавно между делом познакомился с Антоном Черноусовым и стал почитывать его канал (@taoplive).
Он иногда рассказывает какие-то новостные штуки, а иногда что-то про управление/психологию/из опыта/что ему захочется.
Один из немногих каналов подобного "широкого" профиля, который у меня прижился. Может и вам понравится.
1. [article] YTsaurus — два года в опенсорсе: чего мы достигли и куда движемся.
Месяц назад коллеги написали про новое в open-source YTsaurus и релизный цикл в последнее время.
2. [article] Interviewing Software Developers: From Junior to Architect in a Single Programming Task.
Вот тут коллега из Google рассказывает про то, как он проверяет уровень кандидата на собеседовании одной единственной задачей: найти сумму чисел.
С одной стороны, мне нравится подход. Вроде у нас есть изначально простая таска, но по факту она настолько глубокая, что можно уйти далеко-далеко.
С другой стороны, ну камон, если ты говоришь "найди сумму чисел" и хочешь, чтобы тебе написали serializable processed state, ну может надо подумать ещё разочек, то ли ты от кандидата хочещь.
И потом мы читаем на habr, что в какой-нибудь большой компании на собеседовании непонятно что хотели. А на конфах под пиво задвигаем друг другу, что "продакт гыгыгы требования непонятные принёс пришлось гыгыгы самому разбираться".
Ой не могу
3. [article] How Discord Indexes Trillions of Messages.
В 2023м я постил статью про то, как в Discord хранят триллионы сообщений. Новая статья -- про их индексацию. Начинают ребята с проблем, которые у них были в последнее время. А потом рассказывают, что они сделали для улучшения. Результаты довольно впечатляющие.
=======================
20 мая заканчивается call for papers на C++ Zero Cost Conf 2025. Ещё есть пару дней, чтобы успеть податься: https://cppzerocostconf.yandex.ru : )
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4❤🔥2 1
#cpp
Сегодня подпивасный (если вы зожник, то пиво нулёвочка) пост, ведь в субботу надо отдыхать от прошедшей недели.
Микрогайд по type traits.
https://telegra.ph/Mikrogajd-po-type-traits-06-14
Сегодня подпивасный (если вы зожник, то пиво нулёвочка) пост, ведь в субботу надо отдыхать от прошедшей недели.
Микрогайд по type traits.
https://telegra.ph/Mikrogajd-po-type-traits-06-14
Telegraph
Микрогайд по type_traits
<type_traits> -- хедер стандартной библиотеки, являющийся частью библиотеки для метапрограммирования. Я не буду вам пояснять принципы работы тех или иных трейтов. Мы не будем разбираться в том, что такое using, наследование, как выбирается специализация…
🔥22👍5❤4❤🔥3
#cpp
### Москва
1. Hardening: текущий статус и перспективы развития. Роман Русяев и Юрий Грибов.
Коллеги рассказали про разные атаки на ваш код и защиты от них. Доклад сделан с целью быть обзором с большим кол-вом ссылок на доп материалы. Подразумевается, что потом вы берёте презу и идёте исследовать углубленно далее.
В конце подробнее разобрали механизм фортификации.
Я не поклонник думать про безопасность (иногда приходится, но душа не лежит), но доклад понравился. Ребята подобрали оптимальный уровень погружения, так что вроде и не оч глубоко ушли, но при этом и не только по базе.
Ссылочка на слайды.
2. Алиасинг памяти в компиляторе и в вашей программе. Константин Владимиров. Владислав Белов.
Рассказывали про новую для меня эпопею с restrict в C и проблемами, которые он призван решать. В плюсах этого счастья нет. Аналогов до сих пор нет. Strict aliasing у нас всё ещё боль. Имхо конечно запомнить в char можно, больше ни во что нельзя, не так сложно. Но я всё-таки в рамках сервисов думаю, а кто-то наверняка в рамках байтов. И там это боль и такого правила недостаточно.
3. Perfomance puzzlers от Сергея Слотина.
Всё ещё не поклонник низкоуровневого (C++-программист, хех), но было прикольно. Может начну скоро вкатываться.
И формат мне нравится, который Сергей делает уже второй год подряд. Имхо делать квиз в процессе мотивирует внимательнее слушать доклад. Игрофикация это тема.
4. C++20 Модули — практическое внедрение. Антон Полухин.
Антон завёз модули в пару опенсорсных либ и рассказывал про это. В таком примерно виде:
- что такое модули
- как писать модули для нового проекта
- модуляризация имеющихся проектов на примере частей буста
Единственное что хочу сказать после доклада Антона, это что мы ещё не успели затянуть модули вширокую (мы это мы с вами), а уже приходится какие-то нетривиальные хаки запоминать и делать. Кринжа!!!
Держите arewemodulesyet.org.
### Белград
1. Векторизация 2025. Андрей Аксёнов.
Доклад про векторизацию в классическом стиле автора. В целом всё круто. Раньше я очень любил доклады Андрея, т.к. они оставляют много инфы для изучения. Сейчас ресурса стало меньше, потому хочется более подробных деталей без распыления. Показался немного сумбурным. Но всё ещё очень понравился.
2. Hot and cold memory optimizations in TCMalloc. Алексей Веселовский.
Довольно приятный рассказ (на английском) про hot cold подсказки для аллокации памяти в TCMalloc. Алексей даёт превью фичи. Рассказывает, как её использовать с PGO. Показывает, как работает. И бенчмарки конечно же.
Я когда-то базово залазил в аллокаторы. Мне понравилось.
3. С++20 vs C в роботах. Битва за ресурсы, абстракции и безопасность. Арсентий Гусев.
Обзор про то, как ребята делают роботов. Про плюсы в embedded и разные хаки, которые помогают не страдать от больших бинарников и сложного кода.
4. Быстрые и приближённые ответы. Артур Соловьёв.
Приятный доклад про вероятностные структуры данных. Я когда-то писал про них пост (без ссылки, потому что скоро напишу новый) и по теме в меня попало.
Артур оказался довольно приятным докладчиком. Я давно про него знаю, но послушать не доводилось. А тут вот он какой!
### Санкт-Петербург
Тут записей не было.
Доклады ребят меня не оч вдохновили. Скорее потому что я не поклонник копаться в многопоточке и всём рядом. Но кратенько так:
- Мьютексы для лёгких потоков. Тарас Скаженик.
У Тараса есть научный руководитель Виталий Аксёнов, который выступал ровно с тем же докладом, но на английском, в Белграде: Locks for lightweight threads.
- мой доклад выложу текстом в течение пары недель, если ничего не поменяется.
- LTest: верификатор конкурентных структур данных на C++. Илья Кокорин. Кирилл Гарманов.
Тут ребята рассказывали про что-то вроде формального автоматизированного способа проверять корректность СД. Звучит как концепция оч прикольно, но, конечно, узко.
Неуказанные доклады всё ещё прикольные, просто не попали в меня.
Конфа понравилась. Кайфанул.
### Москва
1. Hardening: текущий статус и перспективы развития. Роман Русяев и Юрий Грибов.
Коллеги рассказали про разные атаки на ваш код и защиты от них. Доклад сделан с целью быть обзором с большим кол-вом ссылок на доп материалы. Подразумевается, что потом вы берёте презу и идёте исследовать углубленно далее.
В конце подробнее разобрали механизм фортификации.
Я не поклонник думать про безопасность (иногда приходится, но душа не лежит), но доклад понравился. Ребята подобрали оптимальный уровень погружения, так что вроде и не оч глубоко ушли, но при этом и не только по базе.
Ссылочка на слайды.
2. Алиасинг памяти в компиляторе и в вашей программе. Константин Владимиров. Владислав Белов.
Рассказывали про новую для меня эпопею с restrict в C и проблемами, которые он призван решать. В плюсах этого счастья нет. Аналогов до сих пор нет. Strict aliasing у нас всё ещё боль. Имхо конечно запомнить в char можно, больше ни во что нельзя, не так сложно. Но я всё-таки в рамках сервисов думаю, а кто-то наверняка в рамках байтов. И там это боль и такого правила недостаточно.
3. Perfomance puzzlers от Сергея Слотина.
Всё ещё не поклонник низкоуровневого (C++-программист, хех), но было прикольно. Может начну скоро вкатываться.
И формат мне нравится, который Сергей делает уже второй год подряд. Имхо делать квиз в процессе мотивирует внимательнее слушать доклад. Игрофикация это тема.
4. C++20 Модули — практическое внедрение. Антон Полухин.
Антон завёз модули в пару опенсорсных либ и рассказывал про это. В таком примерно виде:
- что такое модули
- как писать модули для нового проекта
- модуляризация имеющихся проектов на примере частей буста
Единственное что хочу сказать после доклада Антона, это что мы ещё не успели затянуть модули вширокую (мы это мы с вами), а уже приходится какие-то нетривиальные хаки запоминать и делать. Кринжа!!!
Держите arewemodulesyet.org.
### Белград
1. Векторизация 2025. Андрей Аксёнов.
Доклад про векторизацию в классическом стиле автора. В целом всё круто. Раньше я очень любил доклады Андрея, т.к. они оставляют много инфы для изучения. Сейчас ресурса стало меньше, потому хочется более подробных деталей без распыления. Показался немного сумбурным. Но всё ещё очень понравился.
2. Hot and cold memory optimizations in TCMalloc. Алексей Веселовский.
Довольно приятный рассказ (на английском) про hot cold подсказки для аллокации памяти в TCMalloc. Алексей даёт превью фичи. Рассказывает, как её использовать с PGO. Показывает, как работает. И бенчмарки конечно же.
Я когда-то базово залазил в аллокаторы. Мне понравилось.
3. С++20 vs C в роботах. Битва за ресурсы, абстракции и безопасность. Арсентий Гусев.
Обзор про то, как ребята делают роботов. Про плюсы в embedded и разные хаки, которые помогают не страдать от больших бинарников и сложного кода.
4. Быстрые и приближённые ответы. Артур Соловьёв.
Приятный доклад про вероятностные структуры данных. Я когда-то писал про них пост (без ссылки, потому что скоро напишу новый) и по теме в меня попало.
Артур оказался довольно приятным докладчиком. Я давно про него знаю, но послушать не доводилось. А тут вот он какой!
### Санкт-Петербург
Тут записей не было.
Доклады ребят меня не оч вдохновили. Скорее потому что я не поклонник копаться в многопоточке и всём рядом. Но кратенько так:
- Мьютексы для лёгких потоков. Тарас Скаженик.
У Тараса есть научный руководитель Виталий Аксёнов, который выступал ровно с тем же докладом, но на английском, в Белграде: Locks for lightweight threads.
- мой доклад выложу текстом в течение пары недель, если ничего не поменяется.
- LTest: верификатор конкурентных структур данных на C++. Илья Кокорин. Кирилл Гарманов.
Тут ребята рассказывали про что-то вроде формального автоматизированного способа проверять корректность СД. Звучит как концепция оч прикольно, но, конечно, узко.
Неуказанные доклады всё ещё прикольные, просто не попали в меня.
Конфа понравилась. Кайфанул.
#cpp
Напишем make_index_sequence.
https://graph.org/index-sequence-08-07
Рядом упомяну пост про type_traits в общем: https://xn--r1a.website/thisnotes/341
Напишем make_index_sequence.
https://graph.org/index-sequence-08-07
Рядом упомяну пост про type_traits в общем: https://xn--r1a.website/thisnotes/341
Telegraph
integer_sequence
Хочу написать этот пост отдельно, чтобы другой получился короче. Напишем index_sequence и попробуем сделать так, чтобы он компилировался как можно быстрее. Конечно же, никаких дефолтных хедеров не подключаем. Это замедляет компиляцию (может я 🤡🤡🤡, а может…
🔥7👍2
#cpp
Ещё есть такой коллега у меня Паша Сухов. Ну как коллега. Он в Доставке вообще работает, но ведь это всё ещё Яндекс. Так что коллега.
Пашу вы могли видеть на C++ Russia:
- Полезные трюки С++ на примере организации пайплайна
- Как заставить шаблоны компилироваться быстро и выглядеть опрятно
Ещё с Пашей мы вместе [грубо говоря] делали несколько внешних мероприятий. Не грубо говоря, [в составе небольшой группы из нескольких яндексолег] делали ещё несколько внутренних. Вместе занимаемся плюсовым коммьюнити внутри.
У Паши очень широкий кругозор. Сильнейшие лапищи программиста. Он большой оригинал и довольно креативный дядька. Огромная куча интересных историй и крутейший рабочий опыт и деятельность в целом. Паша неприлично много читает (100-150 книг в год; Паша попросил отметить, что читает он всякую фигню).
Паша поделился ещё некоторыми фактами для внешнего читателя, но я их приберегу на будущее.
И Паша подготовил очень интересный доклад на один из наших внутренних C++ митапов. Доклад, с разрешения автора, привожу вам в текстовом формате. Конечно же, не полностью, т.к., во-первых, не хочется делать объёмный материал, а, во-вторых, хочется оставить некоторую загадку.
Всё близко к тексту с минимальным количеством редакции от Пашиного лица.
Военный синус: когда C++ показывает свой характер.
https://github.com/dasfex/articles/blob/trunk/sin.md
Ещё есть такой коллега у меня Паша Сухов. Ну как коллега. Он в Доставке вообще работает, но ведь это всё ещё Яндекс. Так что коллега.
Пашу вы могли видеть на C++ Russia:
- Полезные трюки С++ на примере организации пайплайна
- Как заставить шаблоны компилироваться быстро и выглядеть опрятно
Ещё с Пашей мы вместе [грубо говоря] делали несколько внешних мероприятий. Не грубо говоря, [в составе небольшой группы из нескольких яндексолег] делали ещё несколько внутренних. Вместе занимаемся плюсовым коммьюнити внутри.
У Паши очень широкий кругозор. Сильнейшие лапищи программиста. Он большой оригинал и довольно креативный дядька. Огромная куча интересных историй и крутейший рабочий опыт и деятельность в целом. Паша неприлично много читает (100-150 книг в год; Паша попросил отметить, что читает он всякую фигню).
Паша поделился ещё некоторыми фактами для внешнего читателя, но я их приберегу на будущее.
И Паша подготовил очень интересный доклад на один из наших внутренних C++ митапов. Доклад, с разрешения автора, привожу вам в текстовом формате. Конечно же, не полностью, т.к., во-первых, не хочется делать объёмный материал, а, во-вторых, хочется оставить некоторую загадку.
Всё близко к тексту с минимальным количеством редакции от Пашиного лица.
Военный синус: когда C++ показывает свой характер.
https://github.com/dasfex/articles/blob/trunk/sin.md
Я решил не юзать больше телеграф. И я понимаю, что возможно вам читать будет чуть неудобнее, но так я хотя бы буду уверен, что контент не потеряется, т.к. уже несколько раз наталкивался на потерянные куски и картинки в постах. + редактор в md более приятный, чем телеграф рандом.
1🔥33👍8❤4😁2
#books #cpp
Вредные советы для C++ программистов. Андрей Карпов. (2023г.)
Книжка строится в следующем формате:
- даётся какой-то вредный совет вида "делайте плохо"
- даётся объяснение, почему совет вредный и как же стоит делать правильно.
Некоторые советы довольно базовые, например не сравнивать double с double через ==, не расширять пространство std просто так или не пользоваться C-style cast. Ничего нового вы здесь скорее всего не найдёте, если уже пару лет на плюсах пописали.
Были какие-то довольно абстрактные общие советы, которые относятся к программированию в общем или связанным с ним штукам (не используйте магические числа, пользуйтесь анализаторами или про правила общения на форумах). Они тоже получаются с опытом (не шибко большим) и являются скорее здравым смыслом.
Были отдельные места, в которых я не разбираюсь просто потому что не встречался (конкретно про stdafx.h и precompiled headers). За эту часть спасибо.
Общее впечатление: книга довольно базовая. По ощущениям даже скорее маркетинговая, т.к. всё пропитано стилем PVS студии. Возможно для этого она и была задумана.
Тем не менее, автору успехов в будущих литературных движениях. И благодарность за то, что когда-то в 2023м на Highload он мне эту самую книжку вручил.
Вредный совет их трёх.
Залинкую заодно более подробный обзор от Константина Владимирова: https://xn--r1a.website/cpp_lects_rus/288
Вредные советы для C++ программистов. Андрей Карпов. (2023г.)
Книжка строится в следующем формате:
- даётся какой-то вредный совет вида "делайте плохо"
- даётся объяснение, почему совет вредный и как же стоит делать правильно.
Некоторые советы довольно базовые, например не сравнивать double с double через ==, не расширять пространство std просто так или не пользоваться C-style cast. Ничего нового вы здесь скорее всего не найдёте, если уже пару лет на плюсах пописали.
Были какие-то довольно абстрактные общие советы, которые относятся к программированию в общем или связанным с ним штукам (не используйте магические числа, пользуйтесь анализаторами или про правила общения на форумах). Они тоже получаются с опытом (не шибко большим) и являются скорее здравым смыслом.
Были отдельные места, в которых я не разбираюсь просто потому что не встречался (конкретно про stdafx.h и precompiled headers). За эту часть спасибо.
Общее впечатление: книга довольно базовая. По ощущениям даже скорее маркетинговая, т.к. всё пропитано стилем PVS студии. Возможно для этого она и была задумана.
Тем не менее, автору успехов в будущих литературных движениях. И благодарность за то, что когда-то в 2023м на Highload он мне эту самую книжку вручил.
Вредный совет их трёх.
Залинкую заодно более подробный обзор от Константина Владимирова: https://xn--r1a.website/cpp_lects_rus/288
3👍21❤5
#cpp
Сегодня небольшой рассказ про недавний баг.
Опять UB моими руками.
https://github.com/dasfex/articles/blob/trunk/one_more_ub.md
Сегодня небольшой рассказ про недавний баг.
Опять UB моими руками.
https://github.com/dasfex/articles/blob/trunk/one_more_ub.md
❤18👍5🔥5❤🔥1🥴1
#cpp
Время -- деньги.
Стандарт говорит [упрощая], что компиляторы должны поддерживать только наблюдаемое поведение. А как он там это делает, это уже его дело.
Есть несколько уровней оптимизаций.
O0 (о ноль)
База. Компилятор делает минимальный анализ и минимальное кол-во оптимизаций. Сохраняется полная семантика программы. Дефолтный вариант. Идеально для дебага.
O1
Компилятор применяет простые оптимизации без сложного анализа: dead code elimination, constant propagation, basic inlining.
У GCC тут уже 48 оптимизаций.
Используется редко, когда не хочется сильно замедлить компиляцию очень больших программ (друг отметил, что это нужно только маргиналам).
O2
Самый народный уровень.
Множество оптимизаций без speed-space трейдофа: unroll loops, vectorization, strict aliasing.
O3
Включаем максимальный перфоманс отдельной программы. Всё ради скорости. Более агрессивно оптимизируем циклы, больше инлайним, больше векторизируем. Из-за сильной векторизации и инлайнинга бинарник может сильно раздуваться. В том числе поэтому перф может падать, так что на практике не всегда является более оптимальным (при небольшом instruction cache вы станете чаще кешмиссить).
Если увлекаетесь, можно включать при компиляции отдельных файлов, код в которых точно в плюсе. Не задевая всё остальное.
Ofast
Как O3, но включаются опасные оптимизации. Например
Почему опасные? Потому что скорость получается за счёт точности. Про артефакты можно почитать в Beware of fast-math.
Og (оуджи)
Og = O0 + некоторые оптимизации из O1, не ухудшающие debug experience.
Os
Os = оптимизации из O2, не увеличивающие размер кода + некоторые дополнительные, позволяющие сократить размер исполняемого кода. Трейдофим немного, но в меру.
Oz
Когда у вас мощнейшие ограничения по размеру бинарника и использованию памяти, выбираем Oz. Заодно можно просадить и перф. Но иногда в embedded только так.
Может увеличить кол-во исполняемых инструкций, если их можно закодировать меньшим кол-вом байтов.
Дебагать может быть тоже уже нереально больно. Но как есть.
Мы не говорим про LTO (и ThinLTO) и PGO. Мы не говорим про -march=... и другие. Может когда-нибудь потом..
Доклад в тему: What GCC optimization level is best for you?
В докладе про сами оптимизации и много сравнения с LLVM в разных плоскостях по разным оптимизациям. Может быть полезно, если хотите осознать, какой компилятор лучше под ваши конкретные нужды, т.к. трейдофы выбирают разные.
Время -- деньги.
Стандарт говорит [упрощая], что компиляторы должны поддерживать только наблюдаемое поведение. А как он там это делает, это уже его дело.
Есть несколько уровней оптимизаций.
O0 (о ноль)
База. Компилятор делает минимальный анализ и минимальное кол-во оптимизаций. Сохраняется полная семантика программы. Дефолтный вариант. Идеально для дебага.
O1
Компилятор применяет простые оптимизации без сложного анализа: dead code elimination, constant propagation, basic inlining.
У GCC тут уже 48 оптимизаций.
Используется редко, когда не хочется сильно замедлить компиляцию очень больших программ (друг отметил, что это нужно только маргиналам).
O2
Самый народный уровень.
Множество оптимизаций без speed-space трейдофа: unroll loops, vectorization, strict aliasing.
O3
Включаем максимальный перфоманс отдельной программы. Всё ради скорости. Более агрессивно оптимизируем циклы, больше инлайним, больше векторизируем. Из-за сильной векторизации и инлайнинга бинарник может сильно раздуваться. В том числе поэтому перф может падать, так что на практике не всегда является более оптимальным (при небольшом instruction cache вы станете чаще кешмиссить).
Если увлекаетесь, можно включать при компиляции отдельных файлов, код в которых точно в плюсе. Не задевая всё остальное.
Ofast
Как O3, но включаются опасные оптимизации. Например
--ffast-math.Почему опасные? Потому что скорость получается за счёт точности. Про артефакты можно почитать в Beware of fast-math.
Og (оуджи)
Og = O0 + некоторые оптимизации из O1, не ухудшающие debug experience.
Os
Os = оптимизации из O2, не увеличивающие размер кода + некоторые дополнительные, позволяющие сократить размер исполняемого кода. Трейдофим немного, но в меру.
Oz
Когда у вас мощнейшие ограничения по размеру бинарника и использованию памяти, выбираем Oz. Заодно можно просадить и перф. Но иногда в embedded только так.
Может увеличить кол-во исполняемых инструкций, если их можно закодировать меньшим кол-вом байтов.
Дебагать может быть тоже уже нереально больно. Но как есть.
Мы не говорим про LTO (и ThinLTO) и PGO. Мы не говорим про -march=... и другие. Может когда-нибудь потом..
Доклад в тему: What GCC optimization level is best for you?
В докладе про сами оптимизации и много сравнения с LLVM в разных плоскостях по разным оптимизациям. Может быть полезно, если хотите осознать, какой компилятор лучше под ваши конкретные нужды, т.к. трейдофы выбирают разные.
👍32🔥17❤8🥴1