C++ and other lectures
9.08K subscribers
39 photos
2 files
229 links
Учебный канал в Телеграм: тут будут анонсы и ссылки на лекции и стримы. Написать автору: @Tilir
Download Telegram
Сделали совместно с Владиславом Беловым очень важный доклад на 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://t.me/cpp_lects_rus/216

Настя:
https://t.me/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
🔥284👍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
🔥6817👍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
Немного апдейтов и объявлений.

1. В четверг 6 ноября вечером я выступаю в ИТМО вот на этом мероприятии: https://itmo.events/events/114900 с огненным (по моему мнению) докладом про регаллок. Поговорю о том как обманчивая математическая красота отвлекает от реальности и как сложно иногда в программировании сформулировать настоящую задачу, которую мы решаем (и наоборот -- как просто в процессе решить не ту задачу). Материал сыроват но мне лично кажется очень важным.

2. 7 ноября я выступаю также в ИТМО с довольно классическим докладом про инструменты разработки и RISC-V на YADRO Labs Open Day https://itmo.events/events/115191

3. Хочу похвастаться исследованием, которое мой магистрант Саша Романов сделал на основании задания к первой лекции моего магистерского курса. Сильно выйдя за пределы этого задания, я бы сказал. Итог был опубликован на Хабре: https://habr.com/ru/companies/yadro/articles/961534

4. Александра Миненко из Московского института психоанализа очень просит помочь ей и заполнить обширную анкету на 168 (!) вопросов для её исследования: https://onlinetestpad.com/t/it-success-factors. Очень душную, всё как мы любим. Если вы уже устали отдыхать и вам не лень, то можно помочь девушке с дипломом. Кстати после прохождения там будет некий фидбек относительно вашей стрессоустойчивости, волевого контроля и всего такого.

5. 22 ноября мы с Юлием Тарасовым выступаем с обзорным докладом о корутинных оптимизациях на Yadro System Level meetup вот тут: https://meetups.yadro.com/cpp-kernel-msk-1125 вроде как регистрация пока открыта.

#official
60👍33🔥16🍓2🌭1🍌1
Выложил cедьмую лекцию магистерского курса на английском.

https://youtu.be/VlkNCGiT-YE

В этой лекции мы начнём длинный и обстоятельный разговор о модулях. Сначала мы обсудим такие свойства объектов как storage и linkage, погрузимся в детали ODR и детально рассмотрим ключевое слово inline. Далее мы поговорим о компонентном подходе к физической организации кода и оценим как его сложно поддерживать без модулей. В частности мы столкнемся с проблемами слишком долгой компиляции и попробуем их решить через предварительно скомпилированные хедера. Увы, на этом пути мы увидим проблемы с контролем экспорта и с проникновением макросостояния в код. В конце лекции появятся собственно модули как органичное развитие идеи предкомпилированных хедеров. Ну а их детальное рассмотрение мы отложим до следующего раза.

00:00 Introduction: object properties.
06:45 Storage and linkage.
14:44 ODR and subtleties.
18:42 Inline: exception from ODR.
24:58 ODR-usage and discarded statements.
29:20 Component approach.
40:58 Precompiled headers.
50:00 Uncontrolled export and modules introduction.
56:22 Inversion of dependencies

#cpp_postgraduate
49👍30🔥13🥰2🤩1
Немного образовательного контента в рамках пятничного зачилла. Не знаю, куда вставить в лекции, но считаю это крайне милым фактом относительно языка.

struct S {};
template <typename T> void bar(T& t) {}

int main() {
using CS = const S;
using CI = const int;
bar(CS{}); // working
bar(CI{}); // not working
}


https://godbolt.org/z/GsMab56oT

Пункт стандарта скину в комментарии если никто не напишет его там в первые 15 минут ))

#questions
🐳25🔥184🤔4🤯2😱2💅2🤷‍♂1👌1🦄1
Выложил восьмую лекцию магистерского курса на английском.

https://youtu.be/aY69noAq2Bk

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

00:00 Module linkage
06:20 Macro state and dependency graphs
14:17 Rules of export
24:56 Attached names and importable headers
36:18 Global module fragment
39:46 Reachability and decl-reachability
49:40 Deers again: specializations and reachability. Private fragments.
56:10 Back to the Component-based approach. Partitions.
01:03:13 BMI, dependenices and collate.
01:13:30 CMake support
01:17:04 Homework (course project) and bibliography.

#cpp_postgraduate
31👍24🔥17🌭4🍌4🍓3
Выложил девятую лекцию магистерского курса на английском

https://youtu.be/IClwPgYFwkk

В этой лекции мы начнём путешествие в мир метапрограммирования. Сначала мы применим (там где это возможно) шаблонную специализацию для того чтобы реализовать определители и модификаторы типов. Далее мы рассмотрим фундаментальную идиому SFINAE и некоторые её исторические применения, включая void_t и enable_if_t. В процессе мы увидим как современный C++ решает те же проблемы гораздо проще. В конце лекции мы изобретём классическое метапрограммирование и пройдём историю развития человеческой мысли, рассмотрев основные библиотеки, существенно повлиявшие на эту область. Мы остановимся незадолго до C++11 и появления полноценных вычислений времени компиляции.

00:00 Intro: trivially copyable
10:55 Type And Value Domains
15:50 Writing your own type traits
22:52 Type modifiers: add_lref riddle
28:36 SFINAE and fundamental domains
33:20 Paper Over the Cracks: void_t and enable_if_t
39:45 SFINAE-OUT: excercise in semantic processes
44:40 Bad reputation of aliases: void_t again
48:44 Case study: move only function
59:36 Classical metaprogramming
01:05:22 Historical detour: Loki, MPL and Fusion
01:12:15 Conclusion: mixed computations, homework and bibliography

#cpp_postgraduate
40🔥23👍15🍾1
Выложили моё выступление в ИТМО. Попробовал поговорить о настоящей сложности распределения регистров и вообще — про обманчиво простые задачи.

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

00:00 Начало. Кто использует стек?
04:50 Задача распределения регистров и подход через раскраску графов.
10:20 Покраска через клеточные автоматы
12:43 Учёт иррегулярности архитектур и PBQP
15:12 Эвристики для спиллов и рематериализация.
23:05 Слияние и разбиение интервалов активности.
29:28 Немного о настоящей сложности задачи
33:18 Литература и ответы на вопросы

#compilers #conference
🔥9597👍5🦄2😁1🏆1
Немного анонсов.

На OSDev Conf ещё остались места для оффлайн-участия и открыта регистрация.

Программа:

https://osdevconf.ontico.ru/abstracts

Официальный анонс:

https://t.me/osdevconf_channel/21

Я там ранее выступал см. https://t.me/cpp_lects_rus/142, очень приятное мероприятие (для разработчиков операционных систем в основном). В этот раз также будут выступать несколько моих коллег. Участие, разумеется, бесплатное.

#official
🔥26👍1110
Выложил десятую лекцию магистерского курса на английском

https://youtu.be/cg1D-t_7ZSk

В этой лекции мы начнём разговор о вычислениях на этапе компиляции. Мы начнём с определения константно-выраженных переменных и функций, рассмотрим детали константно-выраженного потока управления. Также мы разберемся как работает в контексте компиляции неопределённое поведение и какую пользу мы сможем из этого извлечь. Далее мы познакомимся с концепцией constexpr all the things и с историей "констекспризации" стандартной библиотеки. В конце лекции нам предстоит зайти в пещеру чудес, познакомиться с охраняющим её джином и научиться показывать фокус с пальцем: нас ждут такие странные вещи, как виртуальные функции и выделение динамической памяти времени компиляции.

Timeline
00:00 Introduction: constant expressions
06:53 constinit and constexpr variables
13:04 Control flow in constexpr contexts
17:02 constexpr functions
25:29 Implementing countl_zero
34:15 Core constant expressions
40:04 Undefined behavior in consteval functions
45:02 User-defined literal types and suffixes
55:25 Constexpr all the things
01:00:50 constexpr arrays
01:05:10 Virtual constexpr functions: sleight of hand
01:09:47 constexpr new and the Cave of Wonders
01:16:45 Homework and bibliography

#cpp_postgraduate
👍29🔥1610🦄1
Всем привет.

Если кто-то из новых читателей этого канала не знает, у меня год назад вышла книжка: https://t.me/cpp_lects_rus/191 и неплохо разошлась.

В этом году я проводил встречи с читателями в разных городах и зачастую в офисах разных компаний, например в VK меня позвали ещё весной. Надо какое-то красивое завершение года, финальная встреча. И я думаю вы уже поняли где она пройдёт.

https://meetups.yadro.com/autograph-session-k-vladimirov

Да, это будет встреча с читателями в офисе Yadro в Москве, причём двери будут открыты для всех, вам не обязательно быть сотрудником. Ну а уж если вы сотрудник то вообще просто — спускаетесь к общедоступному ресепшену на первом этаже (где столовая) и всё там. Карту для остальных куда подходить приложу в комментариях. Встречаемся в среду 10 декабря, в 20:00. Как обычно могу пообещать максимум общения с залом при максимально открытых интеллектуальных шлюзах. И даже будет какое-то количество еды.

Встреча пройдёт в довольно большом помещении, 50 мест точно есть. Обычно народа столько не бывает. Но мало ли, лучше регистрируйтесь заранее.

UPD: ответного письма после регистрации ждать не обязательно, можно просто отправить форму и приходить.

#author_event
🔥4729🙏4💩2👏1🎉1🤮1🐳1💅1🦄1