C++ and other lectures
8.46K subscribers
39 photos
2 files
210 links
Учебный канал в Телеграм: тут будут анонсы и ссылки на лекции и стримы. Написать автору: @Tilir
Download Telegram
Пятница, вечер. Время чилаута и развлекательного C++.

Представим у вас есть куча специализаций некоего шаблона функции foo.

template <typename T> int foo() { return 1; } 
template <> int foo<int>() { return 2; }
template <> int foo<float>() { return 4; }


И функция sumfoos которая подставляет по ним пачку типов и как-то её сворачивает. Ну скажем складывает.

template <typename ...T>
int sumfoos() { return (foo<T>() + ...); }


Вы хотели бы написать шаблон функции apply_sumfoos с вот такой сигнатурой

template <typename Tuple> auto apply_sumfoos();


Идея в том что он принимает кортеж, разворачивает его и для его содержимого вызывает sumfoos.

std::tuple<int, float, double> t;
assert(apply_sumfoos<decltype(t)>() == 7);


Можно предложить кривой и косой, уродливый как черт с рогами, но рабочий вариант с dummy-аргументом.

https://godbolt.org/z/zxY1qf9hT

Но это не наш метод. Я утверждаю что есть более красивые способы (и даже можно обойтись без сворачивания с index sequence).

Наливайте себе чаю с булочкой или пивка с орешками и подключайтесь. Попробуйте придумать как это решали бы вы, а потом смотрите в комментарии и ставьте лайки лучшим вариантам. Ну и если вашего там не будет — смело постите. Если никто не угадает мой вариант, скажу его завтра.

UPD: мой вариант вычислили за 20 минут. Горжусь своим каналом ))

UPD2: выношу из комментариев самые интересные варианты.

0. Просто уход от nullptr за счёт type_identity, но всё ещё dummy arg https://godbolt.org/z/P41eeTcfK via @PaRat07
1. Биндинг свёртки: https://godbolt.org/z/85EhzdWve совместно @savvatelegram и @xray_3d
2. Рефлексия: https://godbolt.org/z/Pdqd75nxq via @xray_3d
3. Вывод типов и deduction guides: https://godbolt.org/z/6zTT6M8zh via @redPergament
3a. Его разновидность через оператор приведения: https://godbolt.org/z/cTh1W3r3e от него же
4. Hana-style (я добавил к решению подписчика пару consteval потому что смог): https://godbolt.org/z/GxcqKnWMK via @n13625124998637487500
4a. Его очень красивая и лакончиная разновидность через decltype (я тоже добавил consteval от себя) https://godbolt.org/z/zjErr58zz via @alamat1
5. Виртуозный std::apply https://godbolt.org/z/Ydd5e86oP via @savvatelegram
5a. То же самое руками через index sequence https://godbolt.org/z/6feh3fvex via @vmishanin
6. Сохранение промежуточного адреса инстанцированной функции https://godbolt.org/z/racKGYnW1 опять @xray_3d
7. in_place_type подход https://godbolt.org/z/Gq9G9n773 via @alamat1

Ну и самый наивный вариант: https://godbolt.org/z/48jnhKz45 здесь в редакции @ePilnikoff но вообще до него многие дошли и он совпадает с моим решением.

Наивный вариант очень интересно улучшил @s_i_g_a до состояния https://godbolt.org/z/GePnj8qE1 чтобы функция принимала любой tuple-like тип вроде того же std::array. Понятно что так можно улучшить каждый из предложенных вариантов.

Итого мы с вами нашли десять нетривиальных и принципиально разных способов добиться цели. Очень круто.

#questions
🔥7185👍3🤔2🆒1💊1
Media is too big
VIEW IN TELEGRAM
Всем привет. Открыта регистрация на Zero Cost Conf этого года. Выступаем с Владиславом Беловым на вечнозелёную тему алиасинга.

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

https://cppzerocostconf.yandex.ru/2025

Пост временный, сотру как выложу видео (они обычно быстро выкладывают). А может и оставлю ради гифки. Гифка от организаторов уж очень хороша.

#conference
👍68🔥17😍62🐳1
Вечер пятницы и время чилаута в области C++. На этот раз мы снова сыграем в увлекательную игру "кто из компиляторов прав".

Я вытащил этот пример из переписки со студентом более чем годичной давности и проверил на свежих gcc и clang. Они всё ещё не согласны друг с другом.

https://godbolt.org/z/fe14q8aoz

Это упражнение на чтение стандарта, так что ссылки на стандарт обязательны.

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

#questions
👍246🔥2🐳2
На канале sysconf выложили первое сольное видео моей студентки и постоянной содокладчицы Анастасии Черниковой с детальным рассказом про llvm-exegesis и компиляторный бенчмаркинг.

https://www.youtube.com/watch?v=5Bsa1nBQRQU

00:00 Начало. RISC-V и LLVM
05:24 Компиляторный бенчмаркинг
09:14 Использование и возможности llvm-exegesis
18:03 История инструмента, его разнообразные применения и его путь в RISC-V
25:22 llvm-jit его устройство и использование: как отдельно так и внутри инструментов
29:56 Ответы на вопросы
35:00 Моё камео: ответ про соотношение llvm-mca и llvm-exegesis. Далее Настя продолжает отвечать сама.

Давайте поддержим Настю лайками и комментариями на youtube. У меня будет ещё несколько видео моих студентов с конференции sysconf, буду тут их анонсировать по мере выкладки.

P. S. И уже в эту субботу 2 августа мы с Владиком Беловым выступим на Zero Cost Conf, всех буду рад там увидеть.

#conference
👍9331🔥13💩3🐳3👎1😁1😱1🕊1🙉1
Сделали совместно с Владиславом Беловым очень важный доклад на C++ Zero Cost Conf про restrict и вообще алиасинг. Тема оказалась неожиданно глубокая и очень ёмкая для компиляторных оптимизаций. И конечно таящая в себе кучу подводных камней. Мне кажется получилось очень классно. Для Владика это первое публичное выступление, давайте накидаем на ютуб лайков и комментариев.

00:00 Начало. Компилятор хочет вам помочь
03:00 Strict aliasing в C++ и его реализация в компиляторах
08:00 Выберите свой язык: производительность или безопасность? Есть пять вариантов...
09:36 Там где нет механизмов, там вас ждут опасности
13:42 Появление Владислава. Язык C как язык "пятого типа" в связи с наличием restrict.
17:40 Пугающий restrict.
20:55 Рестрикт на пальцах.
27:25 Четыре простых вопроса для вашего размышления.
32:26 А почему этого нет в C++ кроме GNU extension? Я возвращаюсь на сцену и пугаю людей.
37:45 Развитие передовой мысли: обзор серьёзных попыток стандартизации restrict в C++.
41:30 Call for action и вопросы.

https://www.youtube.com/watch?v=MQf98rOc1TE

Предложение Владика в стандарт C: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3659.pdf

На этот раз немного ухудшился монтаж: много где я начинаю говорить, видно меня но не слайд о котором я говорю. Презентацию можно скачать отдельно: https://github.com/tilir/cpp-masters/releases/download/zerocost2023/aliasing.pdf

#conference
🔥57👍236🍓3🙏1🤪1