Библиотека C/C++ разработчика
Ir al canal en Telegram
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Mostrar más7 189
Suscriptores
-824 horas
-117 días
-3130 días
Archivo de publicaciones
🤖Программа работает стабильно до тех пор, пока не появляется загадочный сбой, неожиданное завершение или утечка памяти. И чем крупнее проект, тем дороже обходятся такие ошибки.
📆2 июля в 20:00 МСК на открытом уроке разберём одну из ключевых тем языка, от которой напрямую зависят надёжность и предсказуемость работы приложений.
На практических примерах рассмотрим жизненный цикл объектов, создание и удаление данных, типичные ошибки при работе с памятью и способы поиска утечек. Поговорим о неочевидных случаях, которые встречаются даже в зрелых проектах.
🏁Урок проходит в преддверии старта курса «C++-разработчик». Регистрируйтесь, чтобы разобраться в фундаментальных механизмах языка, познакомиться с форматом обучения и задать вопросы эксперту: https://vk.cc/cYRwfk
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Почему функции 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*)
В экосистеме современного 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 – платформа достаточно надежная, неплохо вылизанная по всем параметрам, в том числе и по скорости работы. Однако всё же иногда бывают ситуации, когда из-за обилия виджетов графический интерфейс немного притормаживает, и это печально). В этой статье я приведу один частный пример простого графического интерфейса и покажу, как за два шага можно сначала ускорить его в 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Лекции С++ продвинутый поток ФПМИ 2023-24
Лекция 1. Введение в язык C++. Основные типы и операции над ними
Лекция 2. Основные команды в терминале. Компиляция программ
Лекция 3. Объявления и определения, области видимости, пространства имен
Лекция 4. Выражения и операторы. Управляющие конструкции
Лекция 5. Compile-time errors, runtime errors, undefined behavior
Лекция 6. Указатели
Лекция 7. Стековая, статическая и динамическая память
Лекция 8. Массивы, функции и указатели на функции
источник
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Подход к реализации постоянных параметров шаблонов через библиотеку
Ранее эти параметры шаблонов назывались нетиповыми параметрами шаблонов (non-type template parameters). Но с момента появления C++98 у нас всегда было три вида параметров шаблонов: - типовые параметры (type template parameters) - нетиповые параметры (non-type template parameters) - шаблонные параметры-шаблоны (template template parameters) Когда категорий всего две, можно называть их «X» и «не-X» (например, статические и нестатические методы). Но когда категорий три — это уже неудобно. А в C++26 таких категорий уже пять (добавились параметры переменных шаблонов и параметры концептов), и выходит, что почти все, кроме типовых, попадают под «нетиповые» — что нелогично. Поэтому старый термин заменили на гораздо более удачный: constant template parameter (постоянный параметр шаблона).Этот блогпост стал продолжением моей работы с Ричардом Смитом (P2484), за которым последовала ещё одна статья по теме (P3380). И статья, и доклад основывались на блестящей идее Файсала Вали: рефлексия может предложить интересное решение задачи сериализации, ведь
std::meta::info способен представлять что угодно.
На встрече в Софии все документы, касающиеся рефлексии, были включены в рабочий проект стандарта C++26, и для меня это очень воодушевляюще — видеть формулировки прямо в черновике (например, meta.reflection).
Однако моё решение по расширению поддержки постоянных параметров шаблонов в C++26 не войдёт. Как и решение проблемы non-transient constexpr allocation. Так что ограничения на типы, которые можно использовать в качестве постоянных параметров шаблонов, сохранятся ещё на один цикл.
А может… и нет?
https://brevzin.github.io/c++/2025/08/02/ctp-reflection/
📲 Мы в 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 лайфхак
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 Питер Новости: Санкт-Петербург / СПБ / ДТП
Универсальная С++ фабрика объектов: для Qt и не только
Меня зовут Михаил Полукаров, я занимаюсь разработкой Desktop-версии корпоративного супераппа для совместной работы VK Teams.
Если вы тоже работали с большими проектами, где активно применяются объектно-ориентированные паттерны проектирования, то наверняка сталкивались с паттернами проектирования Factory Method или AbstractFactory. В процессе разработки я неоднократно ловил себя на мысли, что часто пишу однотипный код таких фабрик, и задумался о том, как можно было бы избежать таких самоповторений.
В этой статье я покажу, как сделать универсальную фабрику объектов, покрывающую большую часть потребностей, следующую принципам DRY (Don’t Repeat Yourself), а также как можно использовать некоторые «фишки» новых стандартов С++.
https://habr.com/ru/companies/vktech/articles/932358/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
🛡️ Clang Hardening Cheat Sheet: 10 лет спустя
Ровно 10 лет назад ребята из Quarkslab выпустили свою знаменитую шпаргалку по харденингу (усилению безопасности) бинарников с помощью Clang. За это время ландшафт угроз изменился до неузнаваемости, а сам компилятор обзавёлся мощнейшими механизмами защиты.
Разработчики обновили гайд под современные реалии. Вот ключевые выжимки и новые флаги, которые стоит внедрить в свои CI/CD пайплайны уже сегодня, если вы пишете на C/C++:
1. Безопасность памяти и проверки выходов за границы
•
-D_GLIBCXX_ASSERTIONS — включает встроенные проверки в стандартной библиотеке C++ (например, контроль границ при обращении к элементам std::vector или std::string). Минимальный оверхед, огромная польза.
• -fstrict-flex-arrays=3 — ужесточает контроль за размерами гибких массивов в структурах, предотвращая популярные out-of-bounds уязвимости.
• -fstack-clash-protection — защита от атак типа Stack Clash. Компилятор генерирует код, который циклически "прощупывает" стек, не позволяя атакующему перепрыгнуть через защитную страницу (guard page).
2. Защита указателей и контроль потока выполнения (CFI)
Современный Clang делает упор на аппаратные фичи процессоров (особенно актуально для ARM64):
• -mbranch-protection=standard — включает одновременно PAC (Pointer Authentication Code) для подписи адресов возврата и BTI (Branch Target Identification) для предотвращения несанкционированных переходов. Это мощный барьер против ROP/JOP атак.
3. Очистка следов в памяти (Zeroing Registers)
• -fzero-call-used-regs=all-gpr — заставляет компилятор очищать (обнулять) универсальные регистры перед выходом из функции. Это предотвращает утечку конфиденциальных данных (например, криптографических ключей), которые могли остаться в регистрах после вычислений.
4. Ограничения линкера (Linker Flags)
Помимо классических -Wl,-z,relro и -Wl,-z,now, авторы рекомендуют:
• -Wl,-z,nodlopen — запрещает динамическую загрузку библиотеки через dlopen() во время выполнения (если архитектура приложения этого не требует).
• -Wl,-z,noexecstack — строго разграничивает права: стек только для данных, исполнение кода там запрещено.
5. Обновлённый FORTIFY_SOURCE
В современных версиях Clang механизм -D_FORTIFY_SOURCE=3 стал намного умнее благодаря встроенным функциям __builtin_dynamic_object_size. Теперь компилятор умеет проверять размеры буферов (в функциях вроде memcpy, snprintf, strtok) даже в тех случаях, когда размер выделяемой памяти становится известен только на этапе выполнения (runtime).
https://blog.quarkslab.com/clang-hardening-cheat-sheet-ten-years-later.html
📲 Мы в MAX
#cpp #programming
👉 @cpp_libC++ изнутри: внутренние механизмы классов
Крис Райан — CppCon 2024
В своём докладе я рассмотрю внутренние механизмы C++ по следующим темам:
- "Луковица C++": как она соотносится с конструированием, уничтожением объектов и полиморфизмом;
- Порядок конструирования и уничтожения объектов, а также обработка до и после выполнения
main();
- Указатели на функции-члены (это не те C-указатели на функции, что вы знали раньше);
- Указатели на данные-члены (не просто «сырые» указатели) и их "data-morphic" функциональность;
- Понимание стека вызовов, кадров стека и механизмов базового указателя (base pointer).
источник
📲 Мы в MAX
#cpp #programming
👉 @cpp_libDockerизированная toolchain в CLion с Conan
При разработке на C++ часто возникает необходимость воспроизводимой среды для сборки. Особенно если проект разрабатывается командой, где у каждого разработчика разные операционные системы и окружения. Тут на помощь приходит Docker.
Зачем это нужно?
- Единая среда для всех участников команды
- Изоляция от локальной системы
- Упрощение CI/CD
Интеграция с CLion
CLion поддерживает удалённые toolchain, включая Docker-контейнеры. То есть вы можете настроить сборку и отладку прямо в IDE, используя контейнер как основную среду.
Conan + Docker
Conan используется для управления зависимостями. Вместе с Docker это даёт:
- Контролируемую установку зависимостей
- Воспроизводимость билдов
- Возможность легко переключаться между разными окружениями
Краткие шаги настройки:
1. Создайте Docker-образ с нужными компиляторами и инструментами.
2. Настройте Toolchains в CLion, указав Docker как удалённую среду.
3. Подключите Conan для управления зависимостями.
4. Собирайте и отлаживайте проект прямо в контейнере.
Такой подход особенно полезен для кросс-платформенной разработки и больших командных проектов, где важна стабильность окружения.
https://schneide.blog/2025/06/23/dockerized-toolchain-in-clion-with-conan/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
FTXUI
Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала!
• Функциональный стиль
• Простой и элегантный синтаксис
• Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши
• Поддержка UTF8
• Поддержка анимации
• Поддержка рисования
• Нет зависимостей
• Кроссплатформенность: Linux/MacOS, WebAssembly, Windows
https://github.com/ArthurSonzogni/FTXUI
📲 Мы в 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 лайфхак
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 Питер Новости: Санкт-Петербург / СПБ / ДТП
Boehm-Demers-Weiser Garbage Collector (BDWGC)
Это автоматический сборщик мусора для C и C++, также известный как conservative garbage collector. Он может использоваться как полноценная замена
malloc, когда нет желания вручную управлять памятью.
Этот сборщик мусора поддерживает многопоточность, работает на многих архитектурах и платформах, и может использоваться как с C, так и с C++ кодом. Основная идея — консервативный подход к сбору мусора: он предполагает, что любое значение, похожее на указатель, действительно может им быть, и не освобождает связанную с ним память.
BDWGC также может использоваться в качестве инструментального средства для отладки утечек памяти. Он широко применяется в проектах, где важна безопасность и стабильность при управлении памятью, но нет желания использовать ручное управление.
https://github.com/ivmai/bdwgc
📲 Мы в MAX
#cpp #programming
👉 @cpp_libРуководство по сборке Qt под Windows из исходников с MinGW
Официальный способ установки готовых бинарников Qt - через онлайн инсталлятор. Однако он требует обязательной регистрации. Да еще и недоступен на территории РФ. Есть и другие способы получить бинарники, или собрать с компилятором от Microsoft, однако не всегда эти способы приемлемы. Сборка из исходников под Windows может оказаться несколько нетривиальна для новичков, потому сделал небольшую инструкцию по сборке Qt 5 и Qt 6. А так же рассмотрена базовая настройка QT Creator.
https://habr.com/ru/articles/917252/
📲 Мы в MAX
#cpp #programming
👉 @cpp_lib
Опенсорс от кристалла до программного стека
Нужны ли нам открытые архитектуры? Что нам нужно, чтобы они работали? В этом докладе мы попытаемся изложить основные проблемы и преимущества открытых архитектур на примере RISC-V — и расскажем про то, как происходит разработка различных инструментов, включая генераторы, компиляторы, средства бенчмаркинга.
00:00 Введение. Архитектура RISC-V, открытая и расширяемая (sigh).
05:38 Стадии конвейера и интерфейсы.
13:37 Открытые ядра на базе RISC-V, тестовое окружение и проблема верификации
19:14 Компиляторные технологии и LLVM
24:46 Моделирование и верификация RISC-V на разных уровнях и llvm-snippy
29:17 Задача бенчмаркинга и llvm-exegesis
34:24 Проблема высокоуровневого ПО, профили и развитие экосистемы
41:15 Ответы на вопросы
источник
📲 Мы в 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 лайфхак
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 Питер Новости: Санкт-Петербург / СПБ / ДТП
