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

Вот чуточку причёсанная мной но близкая к оригиналу студенческая трактовка Problem FT. Определяет простоту числа через тест Ферма.

https://godbolt.org/z/PsvMs3fG1

Обратите внимание: программа совершенно корректно справляется с 49979687 (простое) и с 271747319 (составное 15791×17209).

Разумеется проблема тут в том что вместо настоящего случайного числа rand() использован просто адрес функции rand и он себя показывает неплохим случайным числом (!)

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

#questions #c_graduate
🤯24👍6😁6🔥3🥱1
Вести с полей систем сборки и управления пакетами.

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
Выложил промежуточный семинар для первого курса, посвящённый памяти. На этом семинаре не будет новых задач. Только углубление понимания концепции памяти, которая очень нам понадобиться дальше. Начнём мы со своего рода мультфильма, который называется Genesis и к которому мы вернемся на втором курсе. Также будет немного бенчмаркинга в конце.

#c_graduate

https://youtu.be/5LSAiYAchbk

Возврат к генезису на втором курсе: https://www.youtube.com/watch?v=e5__34DFz5Y в самом начале видео.
👍60🔥126🆒1
Выложил первую часть третьего логического семинара.

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

https://youtu.be/6hTaAwUNbiw

P. S. На этой неделе дети писали контрольную, так что на следующей неделе выкладки не будет. До 3.2 будет двухнедельная пауза.

#c_graduate
👍586🔥4🤩2
Всем привет. Ближайшие события с моим участием.

18 ноября буду рассказывать про открытую архитектуру RISCV на митапе Сбердевайса
21 ноября участвую в дискуссии про технические интервью для C++ разработчиков на митапе Yadro

На митапе Yadro кстати осталась ещё тонна свободных мест для бесплатного оффлайн-участия так что не бойтесь регистрироваться.

#conference
🔥65👍126😁1
Выложил вторую часть третьего семинара по языку C для первого курса.

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

https://youtu.be/f2f5zXqptFY

#c_graduate
🔥50👍151😁1
Немного странного C++.

Уважаемый читатель моего канала @MSerhiy обнаружил забавную вещь: для структур и для примитивных типов вот в этом примере действуют разные правила перегрузки: https://godbolt.org/z/YT9bo7ore

Я довольно быстро раскопал ответ в стандарте.

C++20, [expr.type] "If a prvalue initially has the type “cv T”, where T is a cv-unqualified non-class, non-array type, the type of the expression is adjusted to T prior to any further analysis"

Но я что-то задумался в процессе. Вот чисто гипотетически: а зачем так было сделано? Чему и когда это поможет? У меня нет идей.

Предлагаю в этой ветке поспекулировать насчёт источника этого правила.

#questions
🤔18🔥10🤡1
Выложил завершение третьего семинара по языку C для первого курса.

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

https://youtu.be/dT-KU-BagyU

#c_graduate
👍50🔥192
Техническое.

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

#official
👌39👍94🤔4😁2👾2💅1💊1
Выложил промежуточный семинар по языку C для первого курса.

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

https://www.youtube.com/watch?v=2ZiXINFqFnU

#c_graduate
🔥527👍1😘1
Выложил первую часть четвертого семинара.

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

https://youtu.be/djXpCfEzO34

#c_graduate
👍41🔥298
Немного подзамочного контента для моих уважаемых подписчиков.

В этом году я серьёзно расширил в бакалаврском курсе лекцию про проектирование. Она выросла до двух частей. Особенно изменилась вторая часть: я теперь гораздо больше рассказываю про паттерны проектирования и даже связываю их со стандартными идиомами C++, такими как NVI и RAII.

Первая часть: https://youtube.com/live/ypUGW8Lcvuo
Вторая часть: https://youtube.com/live/1SzQpsa9fK4
Слайды: https://sourceforge.net/projects/cpp-lects-rus/files/cpp-graduate-2023-24/09-philosophy.pdf/download

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

Как обычно интересен фидбек.

#cpp_graduate
👍114🔥4716😁1🤯1
Выложили моё выступление на конференции SBER DEVICES.

Сам доклад 20 минут, я постарался говорить коротко и по делу. Потом 15 минут довольно сложной для меня и напряжённой дискуссии. Уровень аудитории конечно превосходный для такой небольшой конференции.

Таймлайн:

Доклад
00:00 Протокольные слова о компаниях и прочем.
02:30 Минимализм базовой RISC-V ISA.
05:30 Расширяемость системы команд.
11:45 Пример расширений для SCRx ядер. Идея профиля.
13:30 ABI и зоопарк multilib.
17:25 Немного о релаксациях.
19:20 Проприетарные тулчейны и Syntacore SW Tools.

Q & A
20:40 Очень напряжённый вопрос: комбинаторный взрыв и боимся ли мы его?
24:30 Ещё немного боли: не утонем ли мы в cross-tools?
26:47 А будут ли RISC-V GPU? (надеюсь)
28:05 Нечто специфичное про виртуализацию (тут я поплыл).
30:20 Два вопроса: аппаратные харденинги и trust zone (увы security HC только в процессе).
32:25 Можно ли пользователю купить наши ядра в железе? (пока нет, но проблему решаем)
33:02 Список литературы? (увы мне не известна)

https://youtu.be/1zLxxxLc0xI

На канале есть и другие доклады с той же конференции, многие довольно интересны.

#conference #riscv
🔥75👍124🤓3🫡2👏1
Выложил вторую часть четвертого семинара.

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

https://youtu.be/359wChqJJ4U

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

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

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
День прошёл не зря — я узнал третье отличие class от struct.

Игра следующая: в контексте где возможны и class и struct найти где они будут вести себя по разному.

Общеизвестны 2 отличия:
(1) В class все поля по умолчанию private, в struct — public.
(2) Наследование в структуре по умолчанию публичное а в классе приватное.

Первое обычно знают все. Второе иногда вспоминают на интервью. Но сегодня я узнал третье.

(3) В качестве шаблонного параметра class означает тип, а struct начиная с C++20 означает NTTP с типом этой структуры (или класса с тем же именем, что, ИМХО, особенно прекрасно).

Наслаждаемся: https://godbolt.org/z/vsWzsTK8r

Найдётся ли четвёртое? Жду ваших предложений =)

#questions
🤯66🔥25👍186🤷5
Выложили первую часть интервью со мной в рамках подкаста "Битовые Маски". Изначально планировалась одна часть, но в итоге сняли две, вторая будет после праздников. Чисто разговорный жанр, довольно лёгкий. Биография, взгляды на жизнь и образование, немного про компиляторы.

https://youtu.be/oXjS8mJk6VE

UPD: вторая часть https://t.me/cpp_lects_rus/151

#interview
🔥84👍31🎄73🤡2🦄2
Пост итогов 2023-го года.

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

Главный итог для меня -- завершение моего opus magnum. Все 28 лекций магистерского курса записаны и выложены. Они дополняют 28 лекций бакалаврского курса и вместе эти два курса покрывают современный C++.

Базовый: https://www.youtube.com/playlist?list=PL3BR09unfgciJ1_K_E914nohpiOiHnpsK
Магистерский: https://www.youtube.com/playlist?list=PL3BR09unfgcgf7R88ZQRQqWOdLy4pRW2h

Особое спасибо Дмитрию Рябцеву, Владиславу Белову, Марку Гончарову и Юлию Тарасову, без которых ничего бы не было.

Я также начал записывать необязательный приквел в виде практического курса по языку C, ассемблеру и архитектуре. Дело в том, что базовый курс C++ может вызывать определённые сложности если человек грубо говоря не решил свои первые сто задач и не разобрался в основах основ.

Вот, собственно, и они: https://www.youtube.com/playlist?list=PL3BR09unfgchRxdDws74aY4mlSk9eYGEs

Для меня этот год также был годом активного участия в конференциях.

Ascon: https://www.youtube.com/watch?v=R1XcV5vHn0I

C++ Russia: https://www.youtube.com/watch?v=lc3UkIZ4zOY&t=110s

Вебинары для российской орды... то есть я хотел сказать альянса RISC-V.
Первый: https://www.youtube.com/watch?v=3Jv9_jBq1fE
Второй: https://www.youtube.com/watch?v=29iNHEhHmd0

Zero cost conf про scalable vectorization: https://youtu.be/lwIBp6cc-HY

Sber devices про RISC-V в целом: https://youtu.be/1zLxxxLc0xI

Ну а также всякие разговорные жанры, в основном митап Yadro и битовые маски.

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

Мой телеграм-канал вырос до более чем 2500 человек и мой youtube-канал до более чем 13000. Это несколько пугающие для меня цифры и, я боюсь, то ли ещё будет. В связи с этим банить начал больше и чаще, даже за то, что раньше как-то терпел. Теория выбитых окон, всё такое. Отдельной строчкой упомяну, что я также весь год удерживался от любых примесей политоты на ютубе и в телеграме, хотя мне было очень сложно (надеюсь и вы в комментариях удержитесь). Также я удержался от размещения коммерческой рекламы, от заведения аккаунта на boosty и от продажи платных курсов.

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

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

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

Всех с Новым Годом!

#official #happynewyear
🔥23856🎄32👍26🍾239🫡4👏3