C++ and other lectures
9.33K subscribers
40 photos
3 files
238 links
Учебный канал в Телеграм: тут будут анонсы и ссылки на лекции и стримы. Написать автору: @Tilir
Download Telegram
Всем привет. Минутка дружественного пиара. В компании 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
🐳26🔥194🤔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👍25🔥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👍16🍾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
🔥9797👍6🦄2😁1🏆1
Немного анонсов.

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

Программа:

https://osdevconf.ontico.ru/abstracts

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

https://t.iss.one/osdevconf_channel/21

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

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

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
👍32🔥2111🦄1
Всем привет.

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

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

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

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

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

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

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

#author_event
🔥5833🙏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
🔥61👍14😐75🤯1
Провёл последнюю в этом году встречу с читателями. В Москве в офисе Yadro. Было не очень много людей, но кажется прошло довольно неплохо. Из тех кто ходит на встречи, книгу так никто за год и не прочитал. Зато обсудили всё остальное: NixOS, задачи компиляторов, проблемы RISC-V Vector Extension и когда я наконец заведу канал на Boosty и начну там поглавную выкладку книги про C++. Пора бы уже, конечно.

#author_event
👍135🔥5723😢3💩2😱1
Выложил двенадцатую лекцию магистерского курса на английском

https://youtu.be/Xvdcz_vnddw

На этой лекции мы поговорим про лямбды и всё, что с ними связано. Мы начнём с их введения как обычных анонимных функторов. Далее окажется, что каждый объект лямбды это объект специального класса-замыкания. Ненадолго мы вернёмся в пещеру чудес и рассмотрим как лямбды работают в невычислимом контексте. Особое внимание мы уделим захвату в замыкание и решим интересную задачу проброса списка захвата: так мы изобретём кортежи. В конце лекции нас ждёт погружение в стирание типов -- начав от более простых механизмов вроде std::any мы дойдём до std::function. И конечно в процессе мы отроем технику deducing this и далее неоднократно к ней вернёмся.

Timeline
00:00 Intro: Anonymous Functors.
04:22 Universal Way to Call Anything
11:45 Lambdas, Closures and Concepts
19:30 Unevaluated Contexts
23:00 Capturing Arguments
30:45 Move Capture and Forwarding
36:00 Deducing This
40:18 Variadic Captures
49:40 Forwarding Capture: Inception of Tuples
55:07 Ways to Create a Tuple
01:01:45 Type Erasure: std::any, std::variant
01:08:00 Type Erasure with std::function
01:14:10 Homework and Bibliogrpahy

#cpp_postgraduate
❤‍🔥40👍14🔥1284
Продолжаю хвастаться своими студентами.

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

Илья Гаврилин учится в магистратуре на нашей кафедре и работает у меня в команде рантаймов. Его доклад посвящён Chromium и интерпретатору V8. Илья участвовал в портировании V8 и Maglev на архитектуру RISC-V и мне кажется доклад стал отличным обобщением этой работы. Он не сосредоточен именно на RISC-V. Для вас он может быть просто очень интересной экскурсией внутрь вашего браузера.

Timeline:
00:00 Введение, представление докладчика и т.д.
05:07 V8: движок для оптимизации JavaScript, TypeScript и WebAssembly.
10:50 Проблемы исполнения JavaScript в браузере и оптимизирующий компилятор TurboFan в составе V8.
24:03 Добавляем билтины к байткоду: шаблонный компилятор SparkPlug
27:40 Компилятор Maglev как золотая середина: самый быстрый оптимизирующий JIT-компилятор.
33:00 Немного о портировании Maglev на RISC-V и немного о котопсах.
39:20 Ответы на вопросы.

#conference #talks
👍64🔥4310😎6🦄32👏2
Выложил тринадцатую лекцию магистерского курса на английском

https://youtu.be/8C2u9QrGygY

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

Timeline
00:00 Intro: When the Standard Library Was Young
05:00 Sentinels
09:58 Hierarchical Range Concepts
16:35 Dangling Iterators and Borrowed Ranges
22:22 Views: Lightweight Ranges
26:01 CRTP and view_interface
30:15 Why string_view Is a Poor View
35:27 Curious Uses of Sentinels
46:50 Infinite Views and Their Finite Parts
49:41 Constness Propagation -- End of Part I

#cpp_postgraduate
👍3721🔥10❤‍🔥2🤯2👀1
Опубликовали наше с Юлием Тарасовым выступление по корутинным оптимизациям в LLVM. Всегда интересно заглянуть как это там под капотом. Прекрасный способ провести пятничный вечер, я считаю ))

https://youtu.be/UH2Y1I2HuBE

Timeline:
01:00 Intro: Routine, Subroutine
05:36 Thread Routines and Coroutines
10:20 Stackfull and Stackless Coroutines
14:11 C++ Coroutines Flexibility And Thread Independence
17:10 What Compiler Shall Do?
20:50 Yuly Appears: Clang/LLVM Coroutines
25:40 How C++ Coroutines Transformed in LLVM
31:25 How To Help Compiler With Elide?
36:13 Wrap-up and Q&A

#conference
🔥53👍138❤‍🔥3
Выложил последнюю лекцию первой части англоязычного магистерского курса.

https://youtu.be/ME1PJmOSMYg

Эта лекция продолжает разговор о диапазонах. Мы посмотрим как устроены изнутри стандартные отображения и на какие компромиссы приходится идти при работе с ними. Также мы углубимся в pull model и разберём некоторые её неочевидные последствия. Далее нас ждёт главное преимущество диапазонов -- возможность их бесшовной адаптации и склеивания с помощью специальных функцие-подобных объектов -- Ниблоидов. И в самом конце я покажу какие ошибки могут возникать при работе с диапазонами и как выглядит борьба с этими ошибками.

00:00 Intro: Views as Projections
05:52 Inside transform_view and More Dangling
12:27 Hesitant Behavior
16:41 Inside filter_view and Caching
22:48 Quirks of the Pull Model
30:25 Range Adaptation and Niebloids
37:20 Case Study: Trimming a String
46:55 CRTP Base for Adaptors
52:42 Bug Hunt: Dealing with Ranges in Practice
01:04:45 Lessons Learned and Bibliography

#cpp_graduate
🔥5416👍9
Из докладов System Level Meetup могу также порекомендовать доклад Насти Черниковой (вы её уже видели на этом канале) про чекеры в clang-tidy.

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

00:00 Intro: что делать с UB?
06:50 Статический анализ.
11:48 Как выглядит AST и что такое матчеры.
18:10 Пишем собственный чекер.
25:38 Ограничения статического анализа и выводы
30:05 Ответы на вопросы.

Он частично развивает и дополняет мою уже довольно древнюю лекцию про clang internals, раскрывая её с несколько более практичной стороны.

P. S. Хотя бы полистайте по таймстемпам посмотрите разных драконов. Мне кажется получилось гениально (дракон официальный маскот clang).

#conference
🔥44👍147🍌3💅2🦄2
Пост итогов 2025-го года.

Новый год уже стучится в двери. В этом посте я подведу свои итоги. Призываю всех в комментариях делиться своими ощущениями от года и нашего канала. Или просто поздравлять меня и друг друга. Особенно круто поздравлять непосредственно в новогоднюю ночь. В эту новогоднюю ночь я буду далеко от цивилизации (в лесу) и присоединюсь к вашим поздравлениям в лучшем случае утром. И, поскольку у всех жителей нашей страны от Владивостока до Калининграда новогодняя ночь наступает по разному, я выложил этот пост чуточку заранее.

К слову о нашей необъятной стране -- за этот год я основательно её объездил (благодаря вышедшей книге). Встречи с читателями были мной проведены в Санкт-Петербурге, Москве, Новосибирске, Минске, Нижнем Новгороде, Ростове на Дону, Йошкар Оле, Великом Новгороде, Екатеринбурге, Казани, и в конце года ещё разок в Москве. Суммарно на встречах со мной и на гостевых лекциях побывало человек 350-400. Для меня это был важный опыт и я наконец-то посмотрел Россию. Россия замечательная страна, если вы не знали. У меня немного не сложилось с Владивостоком, с Магасом и с Нижним Тагилом, во все три меня в общем звали но я не доехал по разным причинам. Может быть ещё сложится.

Среди докладов этого года самые важные это доклад про модули на C++ Russia и доклад на SnowOne про ограничения статических компиляторов. Также много позитивных отзывов собрали моя лекция про коэволюцию языков, компиляторов и инструментов разработки в iSpring и про распределение регистров в ИТМО.

Как обычно, я продолжаю выводить в свет своих учеников и коллег. Среди тех, кого хочется отметить, конечно, Настя Черникова (со мной и без меня и ещё разок без меня), Илья Андреев, Владислав Белов, Никита Руденко, Илья Гаврилин и Юлий Тарасов.

Гигантским достижением этого года я считаю курс на Stepik по RISC-V, сделанный совместно с Марком Гончаровым и Настей Черниковой. Он взят на вооружение в пяти университетах, и на него уже более тысячи регистраций.

Своим чередом развивался мой любимый проект генератора llvm-snippy. Я прочитал пару докладов (например этот), мы выпустили опен-сорс релиз и сделали документацию на github pages. Генератор был принят в симулятор spike (он же riscv-isa-sim) для тестирования модели случайными тестами.

Главной авантюрой этого года я считаю начало выкладки англоязычного курса. Я не был уверен, что из этого вообще получится что-то хорошее. Отмечу, что влияние этой выкладки на мой Linkedin было колоссальным: моя профессиональная сеть выросла до 2.4к (+1.5к) за счёт добавляющихся в друзья разработчиков из дружественных стран. Теперь, если что, я точно найду себе работу. По крайней мере -- в Индии. По просмотрам пока не так радужно, но лиха беда начало. Громадная благодарность Владиславу Белову, Насте Черниковой и Даниилу Авдееву за постоянную поддержку. Без них я бы не справился.

В целом, мой телеграм-канал вырос до более чем 9к человек (+2.5к), а мой youtube-канал до более чем 29к (+5к). Хочется выразить огромную благодарность Владиславу Белову и Максиму Москальцу за неусыпную модерацию нашего сообщества.

Планы на следующий год пока не ясны -- у меня с ними традиционно сложно. Но, возможно, в начале года что-то расскажу насчёт книги по C++, которую от меня все так долго ждали. Концепция у меня уже есть, кое-что уже готово. Может быть, я даже попрошу вашей помощи.

Я хотел бы пожелать всем моим уважаемым друзьям на этом канале (всем более чем девяти тысячам), чтобы в наступающем году у вас было много амбициозных планов, много мотивации и сил для их претворения и чтобы не было проблем с внешними обстоятельствами.

Всех с наступающим Новым Годом!

P. S. Бонусом -- мнение микроволновки о моих итогах года. В комментариях можете пошарить мнение вашего пылесоса о вас.

#official #happynewyear
180🎄73🔥19🍾16👏53👍3🙏2
draft-26-01-11.pdf
3.2 MB
Всем привет! Хотелось бы начать новый год с какого-то большого и важного анонса.

Многие спрашивали, будет ли у меня всё-таки книга по C++. Мне бы и самому хотелось это знать. Поэтому я решил выложить драфт -- первые три главы потенциальной книги. Объём -- примерно 20 страниц на главу, плюс ещё страниц 10–15 константного оверхеда, потому что выкладываю одним куском вместе с обложкой. К слову, обложкой искренне горжусь, очень концептуальная, очень.

Подчеркну: это демо-версия потенциальной книги. Я пока даже не очень уверен в её составе на уровне крупных разделов. И уж точно у меня пока нет контракта с издательством и всего такого.

Почитайте и напишите в комментариях, что думаете. А я через некоторое время вернусь с информацией (и опросом) на тему того, как вы сможете помочь этой книге состояться — если вам её идея покажется интересной. По первым трём главам, мне кажется, уже можно сделать какие-то выводы.

#official #cpp_graduate #cpp_postgraduate
🔥30944👍29👏7❤‍🔥3🙏3🤔2