C++ and other lectures – Telegram
C++ and other lectures
9.11K subscribers
40 photos
2 files
230 links
Учебный канал в Телеграм: тут будут анонсы и ссылки на лекции и стримы. Написать автору: @Tilir
Download Telegram
Всем привет. Напоминаю, что на ближайших выходных я приезжаю в Казань провести там встречу с читателями. Встреча будет в классическом формате и в основном в режиме живого диалога. Можно будет затронуть как обычно широкий круг вопросов.

Дата и время: суббота, 5 июля в 14 часов. Место: магазин "Книга плюс" (ТРЦ Южный, Проспект Победы, 91).

Территориально локация не очень удобная: это как если бы в Москве встреча была где-то на МКАДе. Зато локация вроде бы большая, хорошая. Транспортная доступность, в общем, тоже не худшая из всего, что бывало в других городах. И, как обычно, неизвестно когда я вообще ещё окажусь в Казани. Книжки можно приносить свои, можно будет купить на месте гарантированно актуальный тираж.

Магазин прислал свою ссылку на регистрацию: https://forms.gle/18MF1qctrqwG6cwe6

Пожалуйста зарегистрируйтесь по ней. По моей ссылке из прошлого поста зарегистрировалось существенно меньше людей, чем проголосовали вот тут https://news.1rj.ru/str/cpp_lects_rus/283. Там было 80 голосов, а по моей ссылке я пока вижу только 20 регистраций. Мне интересно где все проголосовавшие? Вероятно будут на встрече, не могут же люди просто так тыкать в рандомные города ))

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

P. S. пост временный, снесу по проведении мероприятия.

#author_event
👍30👌43
Выложили мой доклад, посвящённый компиляторным технологиям в верификации, сделанный на конференции Sysconf этого года. Мы продолжаем развивать проект llvm-snippy и я продолжаю про него рассказывать, освещая новые возможности инструмента. На этот раз я несколько сместил акценты: я рассматриваю не только железо, а весь спектр моделей RISC-V разного уровня -- от функциональных симуляторов до потактовых моделей. На самом деле на работе мы тестируем с помощью snippy даже отладчики и валгринд.

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

00:00 Intro
01:28 Начало: моделирование RISC-V
06:45 Идея и проблемы генератора потока инструкций
11:48 Компиляторы спешат на помощь: LLVM и llvm-snippy
15:06 Базовые возможности llvm-snippy
20:24 Сложность операций с памятью
25:12 Поток управления и вызовы функций
33:30 Использование в опен-сорс и учебных проектах и призыв к действию
36:45 Вопросы и завершение

Вообще в этом году Sysconf была, пожалуй, пока что самой сильной по составу конференцией из тех, где я был. Там было много отличных докладов и про компиляторы и про отладчики и про операционные системы. Когда всё выложат надо будет сделать обзор лучших. Конференция проходит первый год и у них на канале всего 66 подписчиков. Если вы интересуетесь такими темами, вы знаете что делать ))

Альтернативное видео: https://vkvideo.ru/video-228047553_456239026

#conference #snippy
🔥9015👍124💩2🐳1🦄1
Провёл встречу с читателями в Казани. Обсудили детали сосуществования ML-guided и profile-guuded оптимизаций, компиляторы для разработки аппаратуры, перспективы нейросетей и состояние преподавания информатики.

Было довольно камерно, в топе не более 20 человек (не все в кадре, некоторые опоздали к началу, многие ушли до общей фотки в конце). Мне понравилась исключительно приветливая площадка, нас терпели три часа и потом меня ещё и поблагодарили. Огромное спасибо всему персоналу магазина Книга-плюс особенно ведущей Саше (на моих фотках нет, я выложу в комментарии когда мне скинут фотки от площадки если она там будет).

Сама Казань очень интересна, мне ещё предстоит её исследовать сегодня и завтра. Какие то путевые заметки тоже положу в комментарии.

Спасибо всем кто пришёл за то что пришли и за отличные вопросы, было супер.

#author_event
👍124🔥4410👌4👾1
Пятница, вечер. Время чилаута и развлекательного 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
🔥7195👍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
👍9531🔥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
🔥90👍3310🍓3🙏1🤪1
И снова пятница и время чиллаута со стандартом нашего любимого языка.

Вашему разбору предлагается пример от @sibedir где два основных компилятора снова друг с другом не согласны.

https://godbolt.org/z/c9j6qr8hx

Нужно:
1. Со ссылками на стандарт обосновать правоту одного из них.
2. Починить gcc добавив что угодно в структуру TNullPtr но не меняя существующего кода (это возможно).

P. S. В комментариях уже разобрали так что туда смотрите только если сдаётесь ))

#questions
19👍9🤔3
Всем привет.

Время для важного апдейта: мы начинаем раннюю апробацию нового курса на Степике. Вы можете поучаствовать, это будет бесплатно.

https://stepik.org/course/241399

А теперь детали.

Как многие знают, я вхожу в Академический комитет Российского Альянса RISC-V. Также я часто читаю лекции по разным аспектам открытой и расширяемой. Но всё это было как-то разрозненно.

Поэтому этой весной появилась идея сделать один большой вводный курс по RISC-V, ассемблеру и средствам разработки. Этот курс было решено делать при поддержке Альянса, но при этом сохранить его открытым, бесплатным и после периода апробации, внедрять в те ВУЗы страны, где он вызовет интерес. Уже сейчас интерес к организации у себя пилотного проекта проявили СПБГУ, ННГУ, МИЭТ, ЛЭТИ и многие другие. Возможно потом присоединится более широкий круг ВУЗов со всей России.

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

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

Курс готовили в основном Марк Гончаров и Настя Черникова (вы их уже видели на этом канале), делалось это под моим общим и научным руководством. Я там тоже иногда появляюсь в кадре и читаю парочку лекций, причём не только вводные. Кроме того, мы переиспользовали немного материала по ассемблеру из моего курса в МФТИ, углубив и переведя его на RISC-V, так что некоторые задачи вы узнаете, если проходили курс по C.

Если вы вдруг забыли про Марка и Настю:

Марк:
https://news.1rj.ru/str/cpp_lects_rus/216

Настя:
https://news.1rj.ru/str/cpp_lects_rus/275

Сейчас курс, возможно, сыроватый, зато пока что мы можем в широких пределах его менять: переснимать целые модули, добавлять задачи и т. д. И я приглашаю моих уважаемых подписчиков поучаствовать в его ранней апробации: начать проходить и писать сюда (или в чат на Степике, но лучше сюда) о замеченных проблемах. Мы их планируем до нового года оперативно править.

Надеюсь курс будет встречен хорошо и будет полезен.

#riscv #toolchain #c_graduate
173🔥130👍42👏6❤‍🔥4🏆4🆒1
Вот и наступил сентябрь, начало учебного года.

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

https://discord.gg/w73eVVraKg

Ссылки на стрим постятся до начала лекции на дискорд-сервер в каналы с соответствующими названиями (магистратура-2025-26 и бакалавриат-2025-26), так что вы можете участвовать онлайн в реальном времени. Вопросы по теме лекции из чата стрима зачитываются в аудитории. В основном канале дискорд-сервера обычно помещается организационная информация. Есть также канал для оффтопик общения. Как вы понимаете, я нигде не размещаю рекламу, ничего не монетизирую и не собираю донаты.

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

#official
112👍46🔥18🙏5🤩1🏆1
Всем привет. Выложили доклад моего коллеги Никиты Руденко, в котором он рассказывает про некоторые особенности внедрения пакетного менеджера Conan в реальную корпоративную среду.

События этого доклада происходили больше двух лет и принесли нам бесконечное количество нового опыта. А опыт, как известно, это то, что ты получаешь, когда хочешь чего-то другого.

С моей точки зрения -- один из лучших непрофильных докладов на C++Russia этого года. И лучший по Conan на русском языке.

https://youtu.be/ENmSapNzs4I?si=M3OVYwC_ihRjwQdv

00:00 Начало. Мы решили внедрить конан.
05:09 Devops часть внедрения: конфиги, профили и т.д.
12:52 Приключение на пять минут.
26:43 Приключения продолжаются: скачивание пакетов.
36:22 Версионирование
42:25 Черная магия спешит на помощь
46:23 Вопросы

#conference
49👍26🔥14👏14😁3💅3❤‍🔥1
В этом году я буду выкладывать мой обновлённый магистерский курс по C++ на английском языке. Мне поступало довольно много запросов от людей из разных стран (Индии, Китая, Ирана и даже ЮАР) которые очень хотели бы посмотреть мой курс, но не знают русского языка.

Выкладка будет каждую неделю по субботам в 19 часов. В эту субботу мы начинаем сразу с двух лекций, далее выкладка будет по одной.

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

https://youtu.be/X6GVR_3FCHU

Вторая лекция вводит первый строительный блок обобщённого программирования. На примере строк мы изобретём обобщённые типы и разберём несколько важных проблем проектирования и эффективности.

https://youtu.be/RV6e7Sq0RmM

Плейлист: https://www.youtube.com/playlist?list=PL3BR09unfgcjSJXcCn7Y6VBdGfyqeix5w

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

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

#cpp_postgraduate
🔥285👍3530🤯133🥰3😱3🤩1💩1
Выложил третью лекцию магистерского курса на английском.

https://youtu.be/AMyzI58JkE8

Лекция посвящена строительным блокам обобщённого программирования -- множествам перегрузки. Сначала мы разберёмся с их проектированием а дальше рассмотрим механизм ограничений и concepts и то как отношение subsumes позволяет с помощью вычисления дизъюнктивных нормальных форм строить действительно интерсеные и обобщённые множества перегрузки.

00:00 Raising number to a power
08:36 Overload sets
14:30 Winter's rules and their applications
22:08 Type requirements
31:31 Complex constraints and concepts
38:00 Details of requires expression and concept syntax
49:50 Partial order on concepts and subsuming
01:05:40 Dreams of early concepts, homework and bibliography

#cpp_postgraduate
🔥8617👍17🥰32😱2💩2
Выложил четвертую лекцию магистерского курса на английском.

https://youtu.be/rn1Z8JJwb7I

Лекция посвящена двум фундаментальным механизмам языка: поиску имён и разрешению перегрузки. Она вводит понятие "семантического процесса", не являющееся стандартным, но с точки зрения автора позволяющее распутать существенное колчиество неясных мест в языке. Мы поговорим про исчезновение алиасов, ADL и скрытых друзей. На русском я про всё это рассказывал на C++ Russia прошлого года, ссылка есть на этом канале.

00:00 The binding of names to entities
06:30 Syntax and language grammars recap
10:01 Context dependency and ambiguities
19:00 Overloadable names
26:30 Name hiding
29:08 Qualified and unqualified names
34:25 General rules for name lookup
42:45 Notion of semantic process
47:35 Argument-dependent lookup
57:30 The rest of overload resolution rules
01:09:50 Summary of sematic processes so far, homework and bibliography

#cpp_postgraduate
🔥7622👍10🤗1
Выложил пятую лекцию магистерского курса на английском.

https://youtu.be/M8Zv6BCNOhE

Лекция посвящена выводу типов. Мы начнём внезапно не с C++, а с Haskell и рассмотрим как устроен вывод типов, основанный на унификации Хиндли-Милнера. Далее я объясню почему этого нет в C++ и мы начнём собственно путешествие по auto, decltype, категориям выражений и правилам того вывода типов, который у нас есть. В конце мы исследуем сложное взаимодействие вывода типов с остальными семантическими процессами и рассмотрим как он используется, чтобы установить частичный порядок шаблонов функций.

00:00 Why there is no HM-style inference in C++
09:10 Auto-style type deduction
17:17 Deduction of elaborated types
23:46 Rvalues and rvalue references recap
32:05 Collapsing and deduction for references
40:08 Decltype and its rules
45:17 Declval
48:56 Decltype(auto) and our way to transparent wrapper
01:04:20 Class template argument deduction
01:12:02 Interaction with overload resolution
01:17:40 Partial order of function templates
01:22:26 Homework and bibliography

#cpp_postgraduate
🔥6818👍13🥰2😱2
Всем привет. Минутка дружественного пиара. В компании Yadro есть удивительно милый и старомодный почти журнальный формат: почтовая рассылка для разработчиков:

https://engineer.yadro.com/engineering-letters

Я сам в ней неоднократно участвовал и регулярно участвуют мои студенты и коллеги. На письма можно реагировать. Часто такого рода ответные письма становятся основой для новых рассылок или ответ посылается индивидуально и т.д.

Когда делали рассылку о моей книге, даже разыгрывали одну книгу между читателями ))

Увы авторы даже не ведут архива этого своеобразного мейлинга.

Вот пример одного из моих уже вышедших там писем. Эту историю вы наблюдали на моём канале, но многое вполне оригинально: https://lk.dashamail.ru/stat/preview.php?m=test&campaign=4338442

#official
59🔥28😱4👍3👎3
Выложил шестую лекцию магистерского курса на английском.

https://youtu.be/1DFPzHlHmkE

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

00:00 Link between instantiation and specialization
06:10 Explicit instantiation
11:50 Visibility issues
16:16 Explicit specialization
27:43 Deers and Crocodiles: interaction with type inference
34:34 Interaction with Name Lookup
42:48 Associated entity namespaces ADL during instantiation
55:47 Types can't be overloaded
01:04:41 Partial specialization
01:09:09 Ordering of specializations
01:13:58 Member template challenges
01:18:16 Semantic processes again, homework and bibliography

#cpp_postgraduate
🔥45👍106😱3🍓3