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

https://www.youtube.com/watch?v=1ZMasi_9g_A

Ну и гитхаб господина докладчика с собственным движком на Vulkan тоже очень поучительный. Почему-то в описании к видео постеснялись приложить, упомяну здесь: https://github.com/hlavacs

#talks
🔥52👍1
Посмотрел выступление Страуструпа на CppCon'22

https://youtu.be/2BuJjaGuInI

Мой таймлайн для этого доклада:
00:00 Вступление: борьба со сложностью, ограниченные среды выполнения, заблуждения о языке
18:10 Основания и принципы языка C++: механизмы абстракции, RAII, сдвиг вычислений в компиляцию,
40:34 C++ Core guidelines
56:28 Обработка ошибок и исключения
01:09:19 Мысли о настоящем и будущем
01:16:55 Ответы на вопросы

Снова подумал что надо бы хоть раз заглянуть в core guidelines. Последний раз заглядывал туда кажется в 2016-м году, увидел там рекомендацию везде использовать array_view, закрыл и больше не открывал. Может быть они и впрямь привели проект в полезное и актуальное состояние, то что я услышал от Страуструпа в этом докладе мне понравилось.

Увы, опять педалируется мысль что можно учить C++ не потратив до этого как минимум год на изучение C. Мне кажется методически это ошибка. У студента с нуля как раз год уходит чтобы понять указатели, массивы, структуры, циклы и рекурсию, выучить какие-нибудь простые алгоритмы и понять как работает архитектура и как используют тулчейны. А уже потом поверх этого можно накладывать ссылки, классы, шаблоны и прочее. Иначе всё смешивается и человек просто ничего не поймёт.

#talks
👍581🥰1😈1
Посмотрел доклад "What’s New in C++23" - Sy Brand - CppCon 2022

http://youtube.com/watch?v=vbHWDvY59SQ

Мой таймлайн к докладу:

00:00 Вводное безумие (пропустите это)
03:45 Часть про ranges: chunk(_by), repeat_range_n, zip, ranges::to. Также std::print и always_inline.
14:30 Часть про std::optional и std::expected: and_then, or_else
19:45 Краткий рассказ про deducing this
24:06 Вопросы (промежуточные)
26:10 Часть про корутины: std::generator
30:50 Умные указатели: static op(), std::out_ptr, std::to_underlying, etc.
35:12 Move-only functions
37:15 std::unreachable и создание целенаправленного UB
38:30 std::mdspan
41:00 Пример с пересылкой по сети: std::byteswap, if consteval, ospanstream, stacktrace
46:00 Снова ranges: join_with, iota, shift_left
49:15 import std и завершение

При рассказе про deducing this уважаемый докладчик ссылался на крайне интересный доклад Бена Дина: https://youtu.be/jXf--bazhJw
Очень скоро лекция, в которой будет разбор этой техники, также появится в моём магистерском курсе (как только мы с магистрантами этого года дойдём до систематического обсуждения правых ссылок).
Пожалуй deducing this и if consteval это самое интересное и самое перспективное в 23-м стандарте.

#talks
🔥28👍14
Всем привет. Я сегодня посмотрел лучшее в этом году видео по C++ (я учитываю только англоязычные). Я не скажу какое до лекции по ranges иначе, боюсь, вы увидите в моём творчестве слишком много ремейков. Но я приглашаю всех в этом чате т.к. год в плане C++ событий заканчивается, написать какое из видео с зарубежных конференций этого 2022 года было самым полезным для вас.

P. S. Если никто не угадает, то до конца года выложу что это за доклад и его таймлайн.

#questions #talks
👍32😁3🤔3🤯2😱2👨‍💻2💋1👀1
Это закреплённый пост, начните с его прочтения.

Прецедентные правила канала (просто почитайте и соотнесите с ними то что вы хотите написать): https://t.me/cpp_lects_rus/169

В качестве технического дополнения: пожалуйста не оставляйте в группе канала постов, не прикреплённых к веткам обсуждения.

Для сбора запросов на новые ветки используйте direct messages на канале, они бесплатны. Информация как их найти тут: https://t.me/cpp_lects_rus/287

На канале введена система тегов для навигации. Ниже теги изложены в алфавитном порядке.

#author_event -- встречи с читателями
#books -- обзоры чужих книг
#c_graduate -- изложение на C для первого курса
#conference -- что-то касающееся конференций в которых я участвую
#combinatorics -- что-то про комбинаторику
#compilers -- алгоритмы оптимизирующей компиляции
#computability -- что-то про вычислимость
#cpp_graduate -- изложение на C++ для второго курса
#cpp_postgraduate -- изложение на C++ для магистратуры
#interview -- интервью со мной в разных местах
#graphics -- что-то про GPU или GPGPU
#happynewyear -- традиционное подведение итогов года
#knuth -- вольные переводы Дональда Кнута
#llm -- общение с микроволновками
#official -- под этим тегом я говорю от своего лица, обычно какие-то технические вещи и объявления
#publications -- публикации в научных журналах и не только
#riscv — нечто про открытую и расширяемую архитектуру RISC-V
#talks -- обзоры чужих докладов
#toolchain -- что-то про системы компиляции, а также ассемблеры линкеры и всё такое
#torrent -- публичная выкладка пакетами
#questions -- предложения что-то обсудить

Размечены все существующие посты. Если найдёте ошибки в разметке сообщайте.

Ютуб-канал с моими лекциями: https://www.youtube.com/@tilir
Рутуб-канал с ними же: https://rutube.ru/u/cpplectsrus/

Курс по языку C: https://youtube.com/playlist?list=PL3BR09unfgchRxdDws74aY4mlSk9eYGEs
Базовый курс по C++: https://www.youtube.com/playlist?list=PL3BR09unfgciJ1_K_E914nohpiOiHnpsK
Магистерский курс по C++: https://www.youtube.com/playlist?list=PL3BR09unfgcgf7R88ZQRQqWOdLy4pRW2h
Оптимизирующие компиляторы: https://www.youtube.com/playlist?list=PL3BR09unfgcjBG1H9xRUesaQX6nCsobs1

#official
🔥107👍346❤‍🔥6
Вести с полей систем сборки и управления пакетами.

1. Наконец-то cmake 3.28 + clang 17 позволяют использовать модули.

https://www.kitware.com/import-cmake-the-experiment-is-over/

2. Выложили (пока что по ссылке) доклад на CppCon'23 где тот же Хоффман содокладчик по Common Package Specification.

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

Таймлайн. В скобках -- мои примечания.

00:00 Начало и цели доклада
05:16 Зачем вообще управлять зависимостями: результаты интересного опроса что самое болезненное в C++, обзор наиболее неприятных проблем.
13:50 План исправления ситуации: замена зоопарка пекеджей единым стандартом. Плавный переход с CMake. Модули добавляют срочности этому плану.
21:43 Локальный максимум управления зависимостями: в больших компаниях уже функционирует нечто самописное (и всё что я видел было невероятно уродливым), в маленьких компаниях люди джедайствуют как могут (обычно у каждого свой build shell script врапает частые строчки для вызова CMake). Проблемы монореп и сабмодулей.
30:30 Решение: международный стандарт для экосистемы C++.

Тут микрофон уходит к Хоффману.

32:20 Что такое вообще библиотека?
34:30 Взаимодействие системы сборки с менеджментом зависимостей (я бы тут усилил тезис: почему все ненавидят менеджмент зависимостей). Подход через autotools. Эволюция CMake. Уроки которые мы выучили из модулей CMake. Пример FindQT4 и почему в CMake нет FindQT6 как отдельной команды.
48:45 Спецификация Common Package Specification и простое демо CPS в CMake. Некоторые планы на будущее развитие CMake в этом направлении.
59:20 Более высокоуровневые цели для будущей экосистемы в целом и ответы на вопросы.

Собственно спецификацию можно посмотреть вот тут:

https://cps-org.github.io/cps/index.html

#talks
👍5519🔥14
Недавно посмотрел превосходный и очень глубокий доклад Кевлина Хени который называется "Шесть невозможных вещей".

У Льюиса Кэрола в "Алисе в Зазеркалье", Белая Королева говорила что может поверить в шесть невозможных вещей -- и это только до обеда. Сам доклад выстроен в том же стиле -- мы никогда не можем угадать куда нас вынесет мысль автора и чем дальше тем всё становится чудесатее. Но оторваться невозможно.

00:00 Начало. Можно пропустить.

03:13 Шестое. Представления могут быть бесконечными.
Автор рассматривает бесконечности, их физический и логический смысл. На семнадцатой минуте автор пинает ногами любителей доказывать свойства программ. Также вы узнаете что такое std::midpoint.

24:39 Пятое. На любой вопрос можно найти ответ.
В начале автор пинает ногами ChatGPT, строго по фактам. По делу, строго по делу. Дальше немного говорит о таймзонах, а потом начинается длинный но очень интересный экскурс в то как NaN'ы играют со стандартными контейнерами и это чистое восхищение. Я утащу в свои лекции. После короткого блока ответов на вопросы автор пишет богосорт и рассуждает что такое алгоритмы. Он вообще что хочет то и творит.

01:16:41 Четвёртое. Каждая истина может быть установлена там где она применима.
Автор начинает с проблемы останова и Гёделевской неполноты, но потом переходит на strlen. Дальше немного пинает machine learning в целом.

01:24:25 Третье. Будущее может быть известно до того как случится.
Допустим вы проектируете таблицу для базы данных винного магазина. Вы называете её "вина". К вам приходят и говорят: но это не будет масштабироваться если мы добавим пиво, давай её назовём "напитки". Что тут надо ответить? Очевидно "напитки" не будут масштабироваться на лёд, а тем более на услуги. Возможно стоит назвать её table1 =)
Автор проходится по предсказанию переходов в железе, а потом вдруг воспаряет на менеджерские высоты и долго и больно пинает концепцию роадмапа. О да, я тоже всегда так хотел.

01:35:20 Второе. Распределённые системы познаваемы.
Если вы не знали, распределённая система это такая в который ваш компьютер может стать бесполезен из-за отказа другого компьютера о котором вы ничего не знали.

01:44:02 Первое. Технический долг так же исчислим как и финансовый.
И блестящий финальный аккорд. Автор опять воспаряет на высоты духа и объясняет что такое на самом деле так называемый "технический долг". Завершение внезапное и превосходное.

01:55:29 Завершение и вопросы. Можно прочитать цитату на таймстемпе и дальше пропустить.

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

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

P. S. выложу последний в этом году семинар 4.3 для первого курса в субботу. Также скоро будет большое интервью со мной (выйдет видимо двумя частями), тоже тут анонсирую.

#talks
55👍32🔥18👏2
Пример неожиданной полемики.

У меня в ленте подписок следующие два доклада идут рядом. Они были сделаны на разных конференциях, выложены на youtube практически одномоментно и в целом я думаю тут нельзя подозревать никакого умысла. Каждый пел о том, о чём пел, а полифония возникла сама.

1. Phisl Nash, "Rewiring your brain with test driven thinking in C++", Meeting C++ 2023, https://youtu.be/Hx-1Wtvhvgw
2. Ian Cooper, "TDD Revisited", NDC Porto 2023, https://youtu.be/IN9lftH0cJc

Смотреть именно в таком порядке. Первый доклад это не доклад, это проповедь. У уважаемого докладчика горят глаза. Он уличает аудиторию в недостаточном следовании учению, а потом на восхитительно дурацком примере (начало в 20:25) показывает как приходят к спасению. За десять минут. У меня правда есть вопрос к 29:45 -- а почему собственно он прекратил писать тесты в этот момент? Может там ещё что осталось невыловленное? Я имею в виду -- у него до этого каждый новый тест ловил по багу. Он написал пятый и бросил. Но за общие презентационные скиллы всё это можно простить, доклад очень хорош и я могу его очень порекомендовать.

Правда после него остаются более фундаментальные вопросы. Например такой: TDD это мягко скажем не новая практика. Оно известно давно. Оно очень и очень мало где применяется в чистом виде. Может быть это само по себе означает что в нём есть какое-то место где всё идёт не по плану? Ну например самое простое: большое количество написанных юнит-тестов делает дизайн негибким, а программирование это всё ещё исследовательская область. Или там -- зачем вообще тратить время программистов на юнит-тесты, может мы лучше сделаем генератор и сгенерируем миллиард таких тестов автоматически из спецификации? И сделаем это после того как основные бизнес-задачи решены чтобы просто почистить перед релизом? Ну и прочие вопросы.

Второй доклад гораздо глубже и интереснее. Там почти нет специфики конкретного языка (я не удивлюсь если докладчик вообще пишет на каком-нибудь js). Там нет примеров кода. Но он вскрывает именно глубокие и сложные моменты TDD, действительную (и очень существенную) полезность этой методологии, но кроме того и те подводные камни которые там действительно есть и как её можно использовать неправильно или даже совсем неправильно.

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

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

Просто это два очень разных жанра. Примерно как прочитать про некоего героя любовный роман, где повествуется о его нежных чувствах. А потом прочитать про него же детектив. Где его нежные чувства тщательно расследуются. И раскрываются совсем по новому.

#talks
👍6910🔥8
Недавно посмотрел видео, которое кажется мне незаслуженно обойдённым вниманием широкой аудитории.

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

Ссылка и мой таймлайн доклада.

https://youtu.be/iUg0MmHyM-Y?si=oMw87KvpGPswy9HS

00:00 Как сложно быть владельцем сайта на котором можно проверить хакнули ли тебя.
06:51 Что обычно делают владельцы таких сайтов с теми кто туда приходит
12:22 История про утечку данных с сайта фурри
16:15 Киберпреступность молодеет: история про форум BF
25:57 Заказ дерьма онлайн и история про утечку данных с него.
33:11 История про утечку данных с сайта знакомств для гомосексуалистов
40:02 История про утечки куков с пройденной двухфакторкой

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

#talks
😁34👍11🤡11👏10👎7🤔64😢2
Продолжаем тему Zero Cost Conference этого года (благо почти все видео уже выложены).

Прежде, чем я перейду к общему обзору, давайте немного поговорим про лучший доклад. Обычно, когда я выступаю на какой-то конференции, лучшим докладом там я считаю, конечно, свой. Так было на этой C++ Russia и много ещё где. Есть понятные исключения, когда я просто прихожу на огонёк поболтать про открытую и расширяемую и т.п. (кстати зовите), там, разумеется, я ни на что не претендую, я сейчас про содержательные доклады.

Итак я всегда иду с предположением что я лучший. Но, с другой стороны, мне всегда очень приятно ошибаться в этом предположении. И вот как раз на ZCC'24 был доклад, который я считаю несомненно лучшим, чем даже мой, причём лучшим с отрывом и с гандикапом. Он прекрасен и по композиции и по глубине и по раскрытию темы.

Встречайте, Сергей Слотин.

https://youtu.be/Lrjjqc1bRHo

Timeline (моя версия)
00:00 Начало и правила игры
06:00 Первый вопрос
11:30 Memory sharing
19:20 Пропускная способность
29:52 Ассоциативность
37:50 Виртуальная память
47:40 Завершение

В опросе, который проводился в процессе доклада, я по итогу занял 13-е место. Я бы удержался в десятке, но я ответил "about the same" на первый вопрос, так как именно в таком эксперименте мне никогда не удавалось пронаблюдать лесенку. После конференции обсудили с Сергеем его способ бенчмаркинга. Исходники для желающих перемерить:

https://github.com/sslotin/amh-code/tree/main/cpu-cache

Сергей, как выяснилось, также является автором вот этого превосходного материала, который я многие годы использовал при подготовке разного уровня лекций.

https://en.algorithmica.org/hpc/

Прекрасный материал, прекрасный доклад, очень рекомендую.

#talks
🔥92👍247
Ну и завершая тему Zero Cost Conference написал (довольно длинный) обзор всего остального что там было по обоим трекам и в Москве и в Ереване (ну кроме откровенно странных штук типа геогессинга).

https://telegra.ph/Obzor-dokladov-proshedshej-Zero-Cost-Conf2024-08-11

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

#conference #talks
40👍33🔥18🫡2
В качестве, видимо, новогоднего подарка мне, на канале NDC выложили прекрасный доклад Шона Парента:

Locknote: Local Reasoning in C++ - Sean Parent - NDC TechTown 2024 https://youtu.be/bhizxAXQlWc

Ниже мой конспект этого доклада. Разумеется я также рекомендую вам посмотреть и составить собственное мнение, но может быть этот конспект поможет сделать правильные акценты, т.к. доклад сложный и насыщенный.

---

00:00 Failed software projects.

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

10:00 Local reasoning.

Что такое возможность рассуждать о свойствах программы локально? Это возможность убедиться в корректности части кода, независимо от контекста в котором эта часть будет использована. Ключ к такой возможности это корректное использование API на стороне client и его разумное проектирование на стороне implementor.

Также немного о предусловиях: тщательно выписываем предусловия конкретных функций, выносим общие предусловия.

15:56 Mutation

Почему мы вообще хотим использовать модифицируемые переменные? Нищета программирования с иммутабельными структурами на примере замены двигателя. Очень часто именно мутабельные переменные проще для доказательства свойств. Дуализм трансформации и действия.

void a(T& x) { x = t(x); } // a from t
T t(T x) { a(x); return x; } // t from a


Но см. ниже, этот дуализм работает не всегда.

18:38 Laws of exclusivity

std::vector a{0, 1, 1, 0};
erase(a, a[0]);
println("{}", a);


Не запуская годболт, догадайтесь что будет на экране. Потом посмотрите пример. Удивительно, но это даже не UB.

Далее Парент приводит правила исключения одновременных ссылок для Swift и Rust. Фактически то же правило есть в C++ (если вы не хотите проблем), но убедиться в его соблюдении -- задача разработчика.

29:05 Projections and Objects

Проекция это получение ссылки на часть объекта. Проекции могут быть инвалидированы как итераторы для контейнера или как отображение или как повисшая ссылка и т.д.

Оказывается дуализм между действием и трансформацией, описанный выше работает только для инкапсулированных (contained) объектов, но не для их проекций. Нам нужно чтобы выполнялся equational reasoning -- свободная замена равных подвыражений в выражениях.

Главное при проектировании типа для объектов это отношение часть/целое. Это отношение обладает свойствами связанности, ацикличности, сепарабельности и владения.

Если бы у нас были только отношения части и целого, то проблема, поставленная в начале, была бы решена. Увы, мир сложнее.

45:20 Extrinsic relashionships

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

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

54:40 Structural complexity

Проблема трёх тел как пример внешних взаимосвязей, приводящих к непредсказуемости системы. Виды структурной зависимости: деревья, полидеревья, DAG, полные графы. Фактически только структурная зависимость в форме деревьев решает поставленную проблему.

01:05:24 Summary

---

От себя добавлю что именно такого рода разматывание внешних связей между сущностями и то, как это привело к гораздо лучшему проектированию генератора llvm-snippy, я показывал на Zero-cost conf прошлого года. Но там от меня это был конкретный пример проектирования, к тому же изрядно перемешанный с деталями предметной области. Здесь же Шон Парент даёт очищенную эссенцию такого подхода, практически с математической точностью формулировок.

#talks
🔥99👍3611👏1🙏1
Наконец-то выложили один доклад на C++Russia прошлого года, который я хотел бы всем порекомендовать.

Увы, на конференции в прошлом году было очень много шлака, не имеющего даже отношения к C++. И тем ценнее увидеть очень серьёзный и интересный доклад, в целом мирового уровня. Тем более от столь молодого спикера.

Итак, встречаем:

Сергей Добычин — constexpr-аллокатор для контейнеров стандартной библиотеки

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

2:55 Начало. Transient выделения памяти при компиляции. Невозможность non-transient в C++
8:45 Подробный разбор предложения P0639 по CE аллокатору
11:30 Проблемы с размером буфера
18:16 Двухэтапное определения размера буфера во время компиляции
20:40 Постановка задачи: как сделать чтобы CE аллокатор сам определял размер буфера? Общий вид решения.
23:13 Интересные детали реализации
27:45 Передача инициализирующего значения через типы (разбор P2781)
31:20 Завершение: QR код на полное решение в C++20 и примеры
34:08 Вопросы

Интересно в этом докладе также то, что я немного помог в его создании. До конференции Сергей обратился ко мне вот с таким кодом и спросил баг ли это в компиляторе.

https://godbolt.org/z/EcKhhGfzr

Я немного подумал и мы с ним вместе доминимизировали это до вот такого кейса.

https://godbolt.org/z/69PEPojzo

Тут проблема стала очевидной и стало очевидным, что она и впрямь в компиляторе.

После этого я зафайлил эту проблему в GCC и она до сих пор висит там и ждёт своего героя.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115233

Но пока не дождалась.

#talks
🔥112👍23👀116🏆2❤‍🔥1👏1💩1🤡1