Ставь лайк, чтобы скорее увидеть вторую часть видео
@muggzzzzz9 күн бұрын
Паттерн "Наблюдатель" хорошо обыгран в фреймворке Qt на основе системы сигналов и слотов. В Qt сигналы и слоты - это вообще чуть ли не ключевая идея фреймворка.
@NikolaiTelin11 күн бұрын
Спасибо, что вы есть
@stalexxx211 күн бұрын
Так себе пример декоратора. И пара потенциально плохо пахнущих мест: 1) можно декорировать декорированное и получить несколько кориц одновременно, причем будет непонятно баг это или двойная порция 2)от разного порядка декорирования потенциально меняется результат, хотя на этом примере, конечно, не меняется
@vividbw11 күн бұрын
1) да, декоратор не препятствует многократному применению одного и того же типа декораторов. И часто это не имеет смысла. Например в случае декорирования потоков ввода-вывода нет смысла компрессировать уже скомпрессированное, а при декорировании http-клиента - несколько раз добавлять легирующий декоратор. Возможность комбинировать декораторы в рантайме по желанию левой пятки пользователя может порождать нежизнеспособные объекты.
@vividbw11 күн бұрын
2) вы правы, порядок декорирования имеет значение. Например, при декорировании потоков ввода-вывода лучше сперва зашифровать данные, а потом скомпрессировать, так как шифрованные данные плохо сжимаются. А при восстановлении сперва расшифровать, а потом распаковать. Можно сказать, что операция декорирования некоммутативна. А какой пример декоратора предложили бы вы?
@EmuDellno11 күн бұрын
4:40 аналогичная мысль пронеслась в голове)
@vividbw13 күн бұрын
Ставьте лайк этому видео, чтобы ускорить выход новых видео. Если увидели неточность или остались вопросы, пишите в комментариях.
@rianoneq19 күн бұрын
скажите ему кто нибудь что возможная блокировка ютуба в россии уже случилась (спасибо за видео, кстати)
@vividbw18 күн бұрын
@@rianoneq надо будет эту вставку переозвучить
@АннаЗайцева-л3щ21 күн бұрын
Потише бы музыку в заставке и в конце ролика, перебивает голос)
@vividbw21 күн бұрын
Спасибо, Учту в будущих роликах
@vividbw22 күн бұрын
Ставьте лайк этому видео, чтобы ускорить выход новых роликов. Чем быстрее это видео наберёт 20 лайков, тем быстрее выйдет видео по паттерну "Декоратор"
@igorseledtsov7345Ай бұрын
Вопрос один... А зачем? да ещё и на си++
@vividbwАй бұрын
@@igorseledtsov7345 у моих студентов есть лабы по операционным системам. Чтобы у них не утекали ресурсы и они не привыкали писали c-style лапшу, я показал им как сделать RAII обертку над ресурсом ОС (или другой библиотеки с C-интерфейсом). Моя задача показать им как писать хороший код, а плохой они сами научатся.
@igorseledtsov7345Ай бұрын
valgring --callgrind, же.. но а то что показано это просто ересь , надеюсь объяснять не надо почему но что-то мерить на с++ это пустое, язык вообще на скорость не заточен.
@vividbwАй бұрын
@@igorseledtsov7345 про инструменты профилирования обязательно когда-нибудь выпущу отдельный ролик. Здесь же я про бенчмаркинг, который мои студенты могли бы использовать в своих лабах А на чем основана ваша убежденность в том, что C++ на скорость не заточен?
@igorseledtsov7345Ай бұрын
@@vividbwЕсли серьёзно, то в том что используются классы то есть обоащение по указателю к данным (как этот указатель не обзывай) можно конечно и с поинтарами работать почти без издержек не спорю но когда вы вы вызываете очередной new данные аллоцируются бог знает где и бог знает как (и да я знаю что и с этим можно бороться) и далее обращение к этой прелести вызывает каскад проблем 1 загрузка поинтера в регистры 2 оброщение по поинтеру (что уже не сахар) как правило тут имеет тлб и кеж промах примерно так и зная всё это и библиотека С++ пишется на отвали, всё равно же всё тормозиn например (только один пример)работа с короткими строками (до 600) по сравнению с Си медленне в 40 раз с длинными (до 2000 )в 2-3 раза , с очень длинными ну без разницыю если честно. и так куда не ткни.. Я не критякую язык, он ясен понятен позволяет делать меньше багов Но скорость это не его конёк. Хотя конечно по сравнению с Явой или питоном это ракета
@vividbwАй бұрын
New используется только при выделении объектов в куче. Обычные экземпляры классов, как и структуры, аллоцируются на стеке (их внутренние поля могут выделять память в куче, например string или vector). Легковесные объекты с тривиальным деструктором могут быть разложены в регистры при передаче в функцию по значению. В C++ есть RAII, который делает удобным управление ресурсами, в отличие от C, где приходится во всех точках выхода из функции явно освобождать ресурсы, либо делать единую точку выхода с переходом в нее с помощью goto. Язык C требует больше когнитивных усилий, чтобы написать надежный код. В C++ всегда можно спуститься на уровень ниже. Ну а шаблоны позволяют избегать дублирования кода и дают больше возможности оптимизатору. Например, та же стандартная сортировка будет на C++ работать быстрее qsort за счет избавления от вызовов компаратора по указателю.
@igorseledtsov7345Ай бұрын
@@vividbw Да да даб Но если спксться то это уже будет не С++ Шаблоны кстати прекрасно реализуются на Си но более трудоёмко, не срорю.. Я бы из Си++ шаблоны вообще убрал.. Вреда больше чем пользы А сортировка хороший пример того почему не нао бездумно использовать шаблоныю Всё хорошо пока сортируем простые типы а как только начинаем сортировать ытруктурыюю то уже там оптимальное их копиорвание не может быть бфть выполнено как c=a a=b b=c// Таки да С++ это для быстроты написания, но не для эффиктвности
@vividbwАй бұрын
@@igorseledtsov7345 звучит как вызов. Сортировку больших структур можно свести к сортировке указателей (с кастомным компаратором), что на C++ решается легче, чем на C, и работать будет быстрее за счет инлайнинга шаблонов) Предлагаю взять задачу какую-нибудь, которую можно за пару часов написать. И сравнить скорость работы си с си++ вариантом. Вы решите на Си, а я на C++. Результаты опубликую у себя на канале.
@10Dima01Ай бұрын
Информативно. Жаль, что практика есть только для офлайн слушателей)
@vividbwАй бұрын
@@10Dima01 вы можете порешать задачки самостоятельно - они в моем гитхабе по ссылке в описании. Впрочем, основная ценность именно в обратной связи преподавателя во время сдачи лаб
@10Dima01Ай бұрын
@@vividbw согласен, обратная связь важна, а где вы преподаете?
@vividbwАй бұрын
@@10Dima01 В Институте iSpring ispring.institute и Волгатехе volgatech.net
@vividbwАй бұрын
Ставь лайк, если понравилось видео. Пишите вопросы в комментариях.
@vividbwАй бұрын
Ставьте лайк этому видео. Чем быстрее оно наберёт 10 лайков, тем скорее я выпущу новый ролик.
@ИраВасильевна-з9з2 ай бұрын
Ужас какой!!! Придвиньте стол, чтобы собачки допрыгивали! Да, ещесмеетесь, когда они падают! Ужасное видео!!! 👎😡😈😡😈
@vividbw2 ай бұрын
Уважаемая Ира Васильевна! Ни одна собачка не пострадала во время съемок. Их всех потом накормили и напоили.
@elvirahamilton-61992 ай бұрын
По - английски это будет “NEVER GIVE UP!” Сразу видно , который из них быстро думает и действует! ❤ Добавьте английский для большего просмотра. Если бы смогла поставить 10 лайков, то я бы поставила. 😅
@vividbw2 ай бұрын
@@elvirahamilton-6199 добавил
@elvirahamilton-61992 ай бұрын
@@vividbwОЧЕНЬ ХОРОШО. Удачи!
@vividbw2 ай бұрын
@@elvirahamilton-6199 заглянул на ваш канал и обнаружил, что вы тоже из Марий Эл! У вас крутой канал, подписался на вас!
@mrlogic272 ай бұрын
примерно так происходит сдача лабораторных работ
@ALEna-fs4jw2 ай бұрын
😂😂😂 бедняжки надеемся травм не было 😢
@vividbw2 ай бұрын
Ставьте лайк этому видео. Чем больше лайков вы поставите, тем больше добра я нанесу в следующий раз.
@user-hz5no9vv5e2 ай бұрын
Как молоды мы были...
@user-hz5no9vv5e2 ай бұрын
Отлично! Тонко и точно подмечено))))
@vividbw2 ай бұрын
Ставь лайк этому видео, чтобы ускорить выход новых роликов.
@jackcarver24112 ай бұрын
Спасибо! Отличные примеры, особенно про машину при объяснении порядка вызова конструкторов и деструкторов
@jackcarver24112 ай бұрын
Отличная лекция! Глубокий обзор материала с живыми примерами и практическими ситуациями
@m0r1k2 ай бұрын
😻😻😻
@vividbw2 ай бұрын
Ставьте лайки этому видео. Так вы поможете его продвижению и покажете, что вам нравится то, что я делаю.
@MrDao923 ай бұрын
Что за дебильная музыка?
@vividbw3 ай бұрын
@MrDao92 в заставке звучит песня «Папа может в Си» музыкального коллектива «Научно-технический рэп». Мне нравятся песни этой группы, поэтому я решил поставить ее на заставку, чтобы она смотрелась динамичнее. Статистика на ролике показала повышенный интерес к начальной минуте видео по сравнению с другими моими видео, у которых заставки нет. Так что, терпите. :)
@smayl1ks3 ай бұрын
Сразу лайк за заставку
@vividbw3 ай бұрын
@@smayl1ks экспериментирую понемногу
@jackcarver24113 ай бұрын
Алексей, спасибо за подробную лекцию! Даже не подозревал, что столько нюансов существует при работе с памятью в C++ Особенно сложности появились при понимании всяких конструкторов в классах по типу Optional. Никак не прокомментированы, не вводятся понятия lvalue, rvalue, и студенты не задали вопросов про них. Неужели они сталкивались с этими понятиями где-то в предыдущих курсах? Ещё показались неуместными чрезмерно политизированные вставки (коих, впрочем, было не так уж много) В остальном всё отлично, спасибо за то, что делитесь знаниями и делаете это качественно - с хорошим звуком и презентацией, примерами, юмором
@vividbw3 ай бұрын
Про lvalue и rvalue у меня есть отдельная лекция kzbin.info/www/bejne/pWW1qax_f9-HsKc
@jackcarver24113 ай бұрын
@@vividbw Прошу прощения. Думал это (Модель памяти) начало курса. А оказалось, что начал смотреть с последней доступной темы по C++ Хороший и полезный курс, посмотрю весь
@Кирилл-ш9о9ю3 ай бұрын
Спасибо!
@vividbw3 ай бұрын
Ставь лайк этому видео. Чем быстрее это видео наберёт 40 лайков, тем скорее выйдет новый ролик.
@m0r1k3 ай бұрын
ашалеть ты Гуру.. нет слов.. 😻😻😻
@ybarichev3 ай бұрын
Спасибо за метриал. Обзорная по паттернам хорошая
@vividbw3 ай бұрын
Лекция получилась довольно длинной, поэтому рекомендую воспользоваться тайм-кодами в описании, чтобы найти разбор интересующего шейдера. Ставь лайк, чтобы ускорить выход новых видео. Чем быстрее видео наберёт 20 лайков, тем быстрее выйдет новое видео
@013773 ай бұрын
Спасибо большое ! Просто, доступно и очень полезно !
@jackcarver24113 ай бұрын
Алексей, большое спасибо! Хорошая, достаточно подробная лекция, упоминаете многие тонкие моменты и важные нюансы
@dino_source3 ай бұрын
Забыли такой важный атрибут как `адрес`. И ещё забыли `storage duration`. Атрибут `значение` голосом упомянули, но на слайде не было (тоже опциональный атрибут). - размер (size) - выравнивание (alignment) - тип (type) - времени жизни (lifetime) - опциональное имя (identifier)
@vividbw3 ай бұрын
@@dino_source спасибо за дополнение, доработаю презентацию для следующего потока студентов
@alexeybaranov88693 ай бұрын
Шутки ради, и для понимания, что UB - это не страшный дракон, а честное заявление разработчиков языка, что не всякую сову можно натянуть на глобус. Так что, есть такие совы, где nullptr вполне себе валидный адрес памяти. Serial.println("do test..."); int* ptr = nullptr; Serial.println(*ptr); // !!!! int& r = *ptr; // !!!! asm volatile ( "ldi r16, 47 " "mov r0, r16 " ); Serial.println(r); // !!!! Serial.println("test done"); do test... 63 47 test done
@vividbw3 ай бұрын
@@alexeybaranov8869 согласен, есть архитектуры, где можно записывать и считывать данные по нулевому адресу памяти. Однако это выходит за область действия стандарта языка. Компилятор может сделать тут все, что угодно.
@avr_stm_pro29553 ай бұрын
Уже 9 лайка 😮
@asmorr87783 ай бұрын
Спасибо огромное, очень интересно ❤
@vividbw3 ай бұрын
Чем скорее это видео наберёт 10 лайков, тем быстрее выйдет новый ролик.
@Raspi83 ай бұрын
Какие скромные запросы
@dino_source3 ай бұрын
Уже 30 лайков есть. В следующий раз 50 лайков проси или даже 100.
@vividbw3 ай бұрын
Ставьте лайки!
@niktaub64073 ай бұрын
Чудесный преподаватель, нормал маппинг, не припомню чтобы кто-то кроме вас освещал эту тематику ;) Можно свой движок писать - убийцу UE5 )))
@vividbw3 ай бұрын
@@niktaub6407 это самые основы. До UE5 как пешком до луны
@proutak3 ай бұрын
1:01:26 Можете объяснить почему используется std::cin, а не std::getline? Cin же считывает только до пробела
@vividbw3 ай бұрын
До пробела считывает не cin, а операция >>. Тут же Используется getline внутри функции FindStringInStream. Эта функция принимает ссылку на поток, из которого в цикле читает строка за строкой функцией getline. getline принимает 2 параметра - поток, откуда читать, и строку, в которую читать. std::cin - это глобальный объект потока для чтения, связанный со стандартным вводом. В функцию FindStringInStream можно передавать и другие потоки для чтения. Например, поток ifstream, связанный с файлом или поток istringstream, связанный со строкой в памяти. То есть одна и та же функция может работать с разными типами потоков, так как принимает ссылку на базовый класс потоков чтения. Функция std::getline, кстати, тоже такая же
@proutak4 ай бұрын
13:57 - Правильно же " А потом к строчке helloWorld1", а не "строчке helloworld" ?
@vividbw3 ай бұрын
Да, вы правы, спасибо за внимательность. Я оговорился
@DmitriNesterov4 ай бұрын
Вспомнил, как мы в GDI добивались полупрозрачозти. В шахматном порядке половина пикселей прозрачные, половина непрозрачные. В целом, получается полупрозрачно 😊
@vividbw4 ай бұрын
@@DmitriNesterov да, так много где в ретро играх полупрозрачность эмулируется
@DmitriNesterov4 ай бұрын
@@vividbw четверть века назад... Обалдеть %) Ещё бы полвека - так чертовски любопытно, что дальше?! 😀