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

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
32👍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
41🔥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
🔥9697👍6🦄2😁1🏆1
Немного анонсов.

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

Программа:

https://osdevconf.ontico.ru/abstracts

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

https://news.1rj.ru/str/osdevconf_channel/21

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

#official
🔥28👍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
👍31🔥2011🦄1
Всем привет.

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

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

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

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

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

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

UPD2: регистрации частично идут с ошибками. Если у вас такая возникла, просто отправьте свой email мне в лс, протолкнём руками ))

#author_event
🔥5131🙏4💩3👏1🎉1🤮1🐳1💅1🦄1
Выложил одиннадцатую лекцию магистерского курса на английском.

https://youtu.be/o765J7jlWNg

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

Timeline
00:00 Introduction: Trits
06:40 Consteval-Constructible Trits
12:30 A Bit of C++26: Template For and the Ears Operator
19:30 Catgirls in the Cave of Wonders
24:13 Case Study: Is It an Object Type?
29:40 Constexpr for Metaprogramming
39:00 A Variety of Metaprogramming Styles: The Sumfoos Riddle
46:23 Another Example: Physical Quantities
50:45 Boost.Hana and the Idea of "Normal" Compile-Time Programming
58:30 Homework and Bibliography

#cpp_postgraduate
🔥55👍12😐75🤯1