ch
Feedback
Библиотека C/C++ разработчика

Библиотека C/C++ разработчика

前往频道在 Telegram

Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter

显示更多
7 224
订阅者
-324 小时
-167
-3930
帖子存档
Проблема рекламации памяти и два новых решения в C++26. Лекция в университете iSpring. Лекция прочитанная весной 2026-го года в городе Йошкар-Ола. Мы начинаем от самых основ и прицельно разбираем разные аспекты проблемы рекламации памяти в многопоточных программах. Timeline: 00:00 Начало. Пример, который мы будем использовать всю лекцию. 03:56 Потоки и гонка за данные. 09:35 Mutex или простота хуже воровства. 12:12 RAII обёртки над mutex. 19:23 Мьютекс это очередь. Концепция read/write lock. 25:51 Сеттинг который мы будем использовать в лекции и первые замеры. 29:14 Убираем в целом блокировки. CAS-циклы. 34:45 Happens before, барьеры и модели памяти. 42:50 Проблема рекламации. 47:30 Атомарный разделяемый указатель и новые замеры. 52:05 C++26: решение проблемы рекламации в стиле RCU и ещё замеры. 01:01:35 C++26: решение проблемы рекламации через Hazard Pointers и ещё замеры. 01:07:55 Список литературы и вопросы. https://www.youtube.com/watch?v=13b5hHwRvVk 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

💀 C++ снова признали «худшим языком программирования всех времён» — но есть нюанс На Хабре вышел большой разбор боли под наз
💀 C++ снова признали «худшим языком программирования всех времён» — но есть нюанс На Хабре вышел большой разбор боли под названием «Худший язык программирования всех времён /s». И да, речь снова про C++. Автор не просто шутит над плюсами, а проходится по классике жанра: ▪️ десятки способов инициализировать переменную; ▪️ std::move, который не совсем move; ▪️ касты на любой вкус: static_cast, dynamic_cast, reinterpret_cast, const_cast; ▪️ простые задачи, которые превращаются в мини-лекцию по стандарту; ▪️ наследие C, обратная совместимость и миллиарды строк старого кода. Главная мысль: C++ ужасен не потому, что его плохо проектировали, а потому что он десятилетиями пытался быть всем сразу — быстрым, низкоуровневым, совместимым, мощным и при этом современным. В итоге язык, на котором написана половина инфраструктуры вокруг нас, сам стал инфраструктурой: страшной, сложной, но почти незаменимой. Любишь C++ — страдаешь. Не любишь C++ — всё равно пользуешься тем, что на нём написано. https://habr.com/ru/articles/1047890/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Отрежьте мне миллиард символов: как C++20, string_view и шаблонный ад могут скрывать баг годами Вы наверно знаете что высший пилотаж он же Высокий Слог С++ это шаблоны и метапрограммирование. Вы обязательно должны нагородить кучу несовместимых типов и самозабвенно искать для них универсальный алгоритм. Вот очередная статья о том что метапрограммирование и код с шаблонами не такие уж и плохие. Но я хочу рассказать вам историю одного детективного расследования в недрах крупного OpenBMC-проекта (экосистема серверных платформ swtSyst). Это история о том, как безудержное желание перенести всё в compile-time (constexpr), помноженное на ультрасовременный синтаксис C++20, породило идеальный «молчаливый баг» (silent failure). Он мог бы годами жить в продакшене, успешно компилировался, не выдавал ни одного ворнинга, но полностью ломал логику работы приложения. Если вы любите метапрограммирование, шаблоны, операторы свёртки (fold expressions) и тонкости работы с памятью в C++ — устраивайтесь поудобнее. Мы отправляемся в шаблонный ад. https://habr.com/ru/articles/1052830/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

🔥 Оптимизация целочисленного деления: Clang vs GCC vs MSVC Автор блога NukeTheBees решил проверить, как разные компиляторы о
🔥 Оптимизация целочисленного деления: Clang vs GCC vs MSVC Автор блога NukeTheBees решил проверить, как разные компиляторы оптимизируют преобразование 1D-индекса в 3D-координаты сетки. Эта частая задача требует вычисления как частного, так и остатка от деления. Архитектура x86 позволяет сделать это максимально эффективно - всего двумя инструкциями idiv (она одновременно вычисляет и частное, и остаток, помещая их в разные регистры). Автор протестировал два подхода на C++: 1️⃣ Стандартные операторы / и % 2️⃣ Использование функции std::div 📊 Что показали компиляторы? 🔹 Вариант с операторами (/ и %): 🏆 Clang сгенерировал идеальный код: всего 2 инструкции idiv и никаких лишних обращений к памяти. 🥈 GCC тоже справился за 2 idiv, но зачем-то скинул промежуточные результаты в стек перед возвратом. ❌ MSVC оплошал и выдал избыточную третью инструкцию деления при вычислении y. 🔹 Вариант с std::div (в надежде помочь компилятору):MSVC резко исправился, заинлайнил вызовы и выдал те самые оптимальные 2 idiv. ❌ Зато Clang и GCC внезапно отказались инлайнить std::div! В итоге они сгенерировали настоящие вызовы функций (call div), что из-за накладных расходов делает этот код медленнее первого варианта. 💡Ни один из подходов на C++ не смог заставить все три компилятора выдать идеальный машинный код. Поэтому для критически важных участков производительности не стоит слепо доверять компилятору - всегда заглядывайте в сгенерированный ассемблер (например, через Compiler Explorer). 🔗 Подробный разбор ассемблерного кода читайте в статье: https://nukethebees.com/int-division-modulo-optimisation-differences-clang-gcc-msvc/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

🤷Программа может работать месяцами без проблем, а затем внезапно начать терять память, завершаться с ошибками или вести себя
🤷Программа может работать месяцами без проблем, а затем внезапно начать терять память, завершаться с ошибками или вести себя непредсказуемо. Поиск таких проблем часто занимает гораздо больше времени, чем их предотвращение. 📈30 июня в 20:00 МСК приглашаем вас на открытый урок, где разберём один из ключевых принципов современного C++, который помогает создавать более устойчивые и безопасные приложения. На занятии рассмотрим основы RAII, его связь с обработкой исключений, применение в стандартной библиотеке и практические приёмы работы с ресурсами. Также разберём распространённые ошибки, которые приводят к утечкам памяти и усложняют сопровождение проектов. ⚡️Открытый урок проходит в преддверии старта курса «C++-разработчик. Продвинутый уровень». Зарегистрируйтесь, чтобы глубже понять современные подходы к разработке на C++, задать вопросы эксперту и получить практические рекомендации для своих проектов: https://vk.cc/cZ9Fyx Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

MemorySanitizer (MSAN), когда он нужен и как внедрять По разным оценкам, до 10% уязвимостей в коде на C и C++ являются следствием использования неинициализированной памяти (источники: 1, 2). Задача MemorySanitizer (далее, MSAN) - выявлять использование неинициализированной памяти в коде, то есть мусора, например в блоке кода типа if (uninit_var) {...}. Кроме уязвимостей, неинициализированная память даёт о себе знать при портировании приложения на другую платформу, смене компилятора (или поднятии версии используемого), изменении уровня оптимизации или изменении кода таким образом, что то, что раньше "случайно" инициализировалось нулями, стало инициализироваться мусором. MSAN не является статическим анализатором, то есть для его работы требуется выполнение кода (нужны тесты/fuzzing/реальная нагрузка). Прежде чем переходить к самому MSAN, сначала разберемся почему недостаточно (или достаточно?) статического анализа, ведь даже компиляторы умеют предупреждать об использовании неинициализированных данных. https://habr.com/ru/articles/937934/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП

🚀 Синхронизация потоков в C++20: Встречайте std::latch (аналог CountDownLatch из Java!) Многопоточное программирование - это
🚀 Синхронизация потоков в C++20: Встречайте std::latch (аналог CountDownLatch из Java!) Многопоточное программирование - это всегда вызов, особенно когда нужно заставить один поток дождаться завершения пула задач в других потоках. Если вы писали на Java, то наверняка знаете про невероятно удобный класс CountDownLatch. Хорошие новости: с приходом C++20 разработчикам больше не нужно изобретать велосипед с мьютексами (std::mutex) и условными переменными (std::condition_variable) для этой задачи. Теперь в стандартной библиотеке плюсов есть свой элегантный примитив синхронизации - std::latch. 🚧 В свежей статье на Hashnode автор подробно разбирает этот механизм. Вот что полезного можно узнать из материала: • 🔹 Как это работает: суть std::latch как одноразового счетчика обратного отсчета для потоков. • 🔹 Параллели с Java: прямое сравнение логики работы с пакетом Java Concurrency. • 🔹 Практика: понятные примеры кода (как инициализировать защелку, уменьшать счетчик через count_down() и заставлять главный поток ждать через wait()). Если вы переходите на современный стандарт C++ или просто хотите писать более чистый, читаемый и безопасный многопоточный код - этот материал определенно стоит вашего времени. 📖 Читать статью полностью: https://som-itsolutions.hashnode.dev/latches-in-c-20-concurrency-just-like-the-countdownlatch-of-java-concurrency-package 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

🗑️ Zeroize: Почему просто удалить данные недостаточно? В разработке мы постоянно работаем с чувствительными данными: паролями, API-токенами, приватными криптографическими ключами. Но задумывались ли вы, что происходит с ними после того, как переменная выходит из области видимости? Оказывается, просто позволить сборщику мусора или ОС освободить память - небезопасно. Данные могут остаться лежать в оперативной памяти (или даже попасть в swap-файл на диске) в открытом виде, став легкой добычей для злоумышленников при дампе памяти. В этой статье подробно разбирается концепция Zeroize - гарантированного и безопасного затирания данных. О чем внутри: • Почему стандартные методы очистки памяти не подходят для секретов. • Как хитрые оптимизаторы компиляторов могут сыграть с вами злую шутку (например, вырезав ваш код очистки как «ненужный»). • Лучшие практики: как правильно перезаписывать память нулями, чтобы секреты исчезали навсегда. Всем, кто пишет код, работающий с авторизацией или криптографией — категорически рекомендуется к прочтению. 🔗 Читать статью полностью: https://ddanilov.me/zeroize 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

🧩 Почему «обычный STL» в C++ иногда заменяют своим велосипедом На Хабре вышел большой разбор альтернативных STL и контейнеро
🧩 Почему «обычный STL» в C++ иногда заменяют своим велосипедом На Хабре вышел большой разбор альтернативных STL и контейнеров, которые используют в геймдеве, highload-сервисах, компиляторах и приложениях, где важны память, кеши и предсказуемость. В материале разбирают: 🔹 EASTL — библиотеку от Electronic Arts для игровых проектов, консолей и кода с жёстким бюджетом памяти. Главный плюс — контроль аллокаций и предсказуемое поведение на разных платформах. 🔹 LLVM SmallVector / DenseMap — контейнеры для случаев, где много мелких короткоживущих структур и важно не прыгать по куче без необходимости. 🔹 Folly — набор библиотек от Meta для highload-сервисов: быстрые хеш-таблицы, строки, small_vector и оптимизации под большие нагрузки. 🔹 Boost flat_map / std::flat_map — словарь на отсортированном векторе. Хорош, когда данные часто читаются и редко меняются. 🔹 Zmeya / FlatBuffers / Cap’n Proto — подход для read-only данных, которые можно загрузить почти без парсинга и сразу читать из памяти. Прежде чем тащить в проект EASTL, Folly или очередной «супербыстрый» контейнер, сначала стоит измерить реальные bottleneck’и. Потому что единственная секта, которой можно доверять в C++, — это секта профилирования своих данных. https://habr.com/ru/articles/1042198/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Магия Lovable: как создавать готовые интерфейсы с помощью одного запроса. Бесплатный урок курса «Вайб-кодинг: создание цифров
Магия Lovable: как создавать готовые интерфейсы с помощью одного запроса. Бесплатный урок курса «Вайб-кодинг: создание цифровых продуктов с ИИ» Lovable может за минуты собрать экран, который выглядит как почти готовый интерфейс. Но результат зависит не от «магии нейросети», а от того, насколько точно вы ставите задачу. Один расплывчатый запрос даст случайный макет, а правильно собранный системный промпт — понятную структуру, единый стиль и экран, который уже можно показывать команде, заказчику или использовать для проверки идеи. На открытом уроке 2 июля в 20:00 разберём, как формулировать задачи для Lovable, чтобы получать предсказуемый результат с первой попытки. Поговорим о структуре системного промпта, ключевых словах, которые помогают превратить текст в качественный интерфейс, и способах доработки результата через встроенный редактор и повторные запросы. Отдельно обсудим, как управлять компонентами, просить нейросеть переиспользовать элементы и сохранять единый визуальный стиль. Урок не для тех, кто ждёт, что Lovable «сам всё поймёт», не готов уточнять задачу и хочет получать качественный интерфейс без структуры, контекста и итераций. 👉 Записаться: https://vk.cc/cYZCBy Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Большие новости для C++: решаем фундаментальные проблемы из 90-х в C++29 🚀 Разбираем свежие вести с июньского комитета по стандартизации C++ в Брно. Пол МакКенни опубликовал отличный апдейт по двум сложным темам: Lifetime-End Pointer Zap и OOTA-доступам. Лед окончательно тронулся. 🔹 Lifetime-End Pointer Zap Три важнейших пейпера (базирующиеся на P2434R4) официально проголосованы для включения в C++29. Они наконец-то легализуют и строго определяют атомарные и volatile операции для невалидных указателей. Что это дает на практике? Тот самый infamous алгоритм LIFO Push теперь можно реализовать на плюсах абсолютно легально и прямолинейно. По сути, закрыта архитектурная проблема, висевшая со времен самого первого стандарта 1998 года. (Четвертый пейпер, P3790 про bag-of-bits класс указателей, концептуально одобрен, но отправлен на доработку формулировок до ноябрьской встречи). 🔹 OOTA (Out-of-Thin-Air) значения Появление значений «из ниоткуда» при атомарных операциях — классическая головная боль. Пейпер P3692R4, который тоже залетел в C++29, предлагает элегантный выход для реального железа. Суть проста: физическое время не идет назад. Для кода без UB на физических машинах классических компиляторов OOTA можно избежать. Если вы используете исключительно volatile-атомики — гарантия 100%. Для non-volatile компиляторы должны ограничивать перестановку инструкций, чтобы не создавать циклические зависимости. Это не закрывает вопрос для инструментов формальной верификации вроде herd7 (так как они вообще не моделируют время — для них математическое доказательство еще готовит Марк Бэтти), но решает самую насущную проблему для реального продакшена. 🔗 Читать оригинал статьи https://people.kernel.org/paulmck/c-pointer-zap-and-oota-progress 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Teaching C++ to Game Development Students in the Age of LLMs with Tom Tesch (Аудиоформат) Jason and Mathieu are joined by Tom Tesch to discuss teaching C++ to game development students, how LLMs and chatbots are reshaping programming education and assessment, and the lessons that come from teaching on retro hardware like the NES. https://cppcast.com/teaching_cpp_to_game_development_students_in_the_age_of_llms_with_tom_tesch/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

С/С++ в современном машинном обучении: традиционные роли и возможности нового стандарта Меня зовут Кирилл, я разработчик СХД
С/С++ в современном машинном обучении: традиционные роли и возможности нового стандарта Меня зовут Кирилл, я разработчик СХД в YADRO и ML-энтузиаст, автор книги "Hands-on Machine Learning with C++". Я заметил, что роль С/С++ в экосистеме машинного обучения трансформируется прямо сейчас. Чтобы понять, какое значение язык играет в развитии ML, мы поговорим о классическом применении C++ для ручной оптимизации вычислительных ядер. Затем разберемся, почему новый стандарт не закрепляет реализаций линейной алгебры, а отдает это на откуп поставщикам стандартной библиотеки и вендорам оборудования. И в завершение подумаем, как работать с «зоопарком реализаций», который из-за этого остается. https://habr.com/ru/companies/yadro/articles/1048932/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП

🤖Программа работает стабильно до тех пор, пока не появляется загадочный сбой, неожиданное завершение или утечка памяти. И че
🤖Программа работает стабильно до тех пор, пока не появляется загадочный сбой, неожиданное завершение или утечка памяти. И чем крупнее проект, тем дороже обходятся такие ошибки. 📆2 июля в 20:00 МСК на открытом уроке разберём одну из ключевых тем языка, от которой напрямую зависят надёжность и предсказуемость работы приложений. На практических примерах рассмотрим жизненный цикл объектов, создание и удаление данных, типичные ошибки при работе с памятью и способы поиска утечек. Поговорим о неочевидных случаях, которые встречаются даже в зрелых проектах. 🏁Урок проходит в преддверии старта курса «C++-разработчик». Регистрируйтесь, чтобы разобраться в фундаментальных механизмах языка, познакомиться с форматом обучения и задать вопросы эксперту: https://vk.cc/cYRwfk Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Почему функции rand и lrand48 из glibc годятся только для Тетриса: о случайных числах всерьёз Функцию rand из стандартной биб
Почему функции rand и lrand48 из glibc годятся только для Тетриса: о случайных числах всерьёз Функцию rand из стандартной библиотеки языка Си для генерации псевдослучайных чисел, наверное, не ругал только ленивый. В довольно известном докладе Rand considered harmful рассказывалось о проблемах с переносимостью, ограниченным диапазоном, многопоточностью, качеством и т.п. Иногда в учебниках упоминают о том, что алгоритм в rand может быть не очень качественным, иметь проблемы с младшими битами, периодом, прохождением статистических тестов. Но крайне редко можно увидеть разбор конкретных критериев, выявляющих дефекты генераторов. В этой статье я постараюсь наглядно показать не просто отдельные недостатки rand, lrand48 и random из glibc, но их полную непригодность для каких-либо вычислений в принципе. Также вы увидите превосходство поточных шифров над minstd, линейным конгруэнтным генератором из 1980-х, не только в качестве, но и в производительности. https://habr.com/ru/articles/1005118/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Динамический полиморфизм против std::variant с указателями: Разрушаем мифы о скорости std::visit (v.2*) В экосистеме современ
Динамический полиморфизм против std::variant с указателями: Разрушаем мифы о скорости std::visit (v.2*) В экосистеме современного C++ прочно укоренилось мнение: классический динамический полиморфизм через виртуальные функции (vtable) и наследование — это устаревший, медленный и недружелюбный к кэшу процессора механизм. В качестве «серебряной пули» модно предлагать связку std::variant и std::visit. Если вы спросите любого виртуального умника (ИИ) он до последнего будет убеждать вас что std::variant и std::visit всегда(!) лучше чем виртуальные функции, даже не сомневайтесь. Проблема в том что с таким отношением вы во многих случаях просто лишаете себя выбора адекватного технического решения. Решения адекватного условиям конкретной задачи с необходимостью диспетчеризации вызовов. По интернету кочуют статьи, утверждающие, что std::visit выполняет диспетчеризацию за фиксированное время O(1) и полностью уничтожает старый добрый ООП-подход, но вы должны понимать что не существует универсальных решений на все случаи жизни. https://habr.com/ru/articles/1047930/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Оптимизация GUI на Qt Как правило, при создании desktop-приложений на платформе Qt не возникает проблем, связанных с медленно
Оптимизация GUI на Qt Как правило, при создании desktop-приложений на платформе Qt не возникает проблем, связанных с медленностью работы GUI. Qt – платформа достаточно надежная, неплохо вылизанная по всем параметрам, в том числе и по скорости работы. Однако всё же иногда бывают ситуации, когда из-за обилия виджетов графический интерфейс немного притормаживает, и это печально). В этой статье я приведу один частный пример простого графического интерфейса и покажу, как за два шага можно сначала ускорить его в 11 раз, а потом и в целых 34 раза. Вдобавок к этому, я постараюсь немного осветить механизм принятия решения для таких оптимизационных задач, постараюсь показать направление мыслей для правильного решения. Поехали! https://habr.com/ru/post/672962/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Как правильно вызывать CUDA Вероятно, вам уже попадались подобные руководства по CUDA: хрестоматийный пример «Hello World», в котором перемешан код для ЦП и графического процессора. Всё это сложено в один гетерогенный файл с исходниками на CUDA C++, а для запуска ядра применяется синтаксис NVCC с тройными угловыми скобками <<<>>>, который уже стал культовым:

#include <cuda_runtime.h>
#include <stdio.h>

__global__ void kernel() {
    printf("Hello World from block %d, thread %d\n", blockIdx.x, threadIdx.x);
}

int main() {
    kernel<<<1, 1>>>(); // Возвращает `void`?!     
    return cudaDeviceSynchronize() == cudaSuccess ? 0 : -1;
}
Время идёт, а такой паттерн по-прежнему попадается мне в продакшен-коде. Признаюсь, кое-где он всплывает и в моих любительских проектах — раз, два, три. Но это не лучшая идея, полагаться в серьёзном коде на запуск ядра через тройные угловые скобки. В таком случае программа не возвращает коды ошибок, поэтому может показаться обманчиво простой. Ниже вас ждут примерно 25 килобайт текста, в которых мы обсудим не самые корявые способы запуска ядер. https://ashvardanian.com/posts/less-wrong-cuda-hello-world/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib