Библиотека C/C++ разработчика
رفتن به کانال در Telegram
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
نمایش بیشتر7 324
مشترکین
-324 ساعت
+57 روز
+1230 روز
آرشیو پست ها
Оптимизация GUI на Qt
Как правило, при создании desktop-приложений на платформе Qt не возникает проблем, связанных с медленностью работы GUI. Qt – платформа достаточно надежная, неплохо вылизанная по всем параметрам, в том числе и по скорости работы. Однако всё же иногда бывают ситуации, когда из-за обилия виджетов графический интерфейс немного притормаживает, и это печально). В этой статье я приведу один частный пример простого графического интерфейса и покажу, как за два шага можно сначала ускорить его в 11 раз, а потом и в целых 34 раза. Вдобавок к этому, я постараюсь немного осветить механизм принятия решения для таких оптимизационных задач, постараюсь показать направление мыслей для правильного решения. Поехали!
https://habr.com/ru/post/672962/
#cpp #programming
👉 @cpp_lib
💻 Курс “Программист на C” от OTUS — старт набора
Освойте один из самых мощных и востребованных языков системного программирования.
Почему стоит пойти:
• Глубокое погружение: синтаксис C, архитектура процессора, работа с памятью, ассемблер, структуры данных
• Реальные задачи уровня Middle для прокачки навыков
• Карьерные перспективы: база резюме OTUS и карьерные мероприятия
💡Кому подойдёт:
• Разработчикам, углубляющим знания C
• Специалистам по интеграции библиотек на C
• Тем, кто хочет в IoT и программирование микроконтроллеров
✅После курса вы сможете:
• Создавать быстрые и оптимизированные приложения
•Понимать архитектуру процессора и работу с памятью
• Работать с системным программированием и оптимизацией
👉 Запишитесь сейчас, пройдите вступительное тестирование и получите спеццену: https://vk.cc/cOLedH
Создаем плагин с генеративным ИИ для Unreal Engine на C++ (офлайн и онлайн версии)
Вы когда‑нибудь задумывались о том, как здорово было бы, чтобы в вашей игре происходили настоящие человеческие диалоги? Представьте себе систему диалогов NPC, которая кажется невероятно реалистичной, или нарратора, который моментально реагирует на действия игроков. А может быть, вам нужен инструмент, способный генерировать уникальный контент «на лету» прямо в игре? Вне зависимости от того, создаете ли вы одиночную или многопользовательскую игру, внедрение генеративного искусственного интеллекта может сделать ваше творение намного интереснее и динамичнее. В этом руководстве я поделюсь с вами пошаговой инструкцией того, как это можно воплотить в вашем проекте!
https://medium.com/@danuk2004/unlock-the-future-build-a-generative-ai-plugin-for-unreal-engine-with-c-offline-and-online-3f290accc977
#cpp #programming
👉 @cpp_lib
Девиртуализация в C++, компиляторах и вашей программе
Привет, меня зовут Илья Андреев, я старший программист в компании Syntacore. Вы, наверно, слышали, что виртуальные функции в C++ пользуются дурной славой — а может, и сами придерживаетесь о них не самого лучшего мнения. В этой статье, подготовленной совместно с Константином Владимировым, я в некоторой степени выступлю адвокатом виртуализации.
Мы начнем с вводной части о статическом и динамическом полиморфизме, рассмотрим факторы, влияющие на девиртуализацию, и ее примеры разной сложности — в том числе те, что мы используем в реальной разработке. А напоследок познакомим вас со спекулятивной девиртуализацией и дадим рекомендации, как подходить к виртуальным функциям в разработке на C++.
https://habr.com/ru/companies/yadro/articles/938694/
#cpp #programming
👉 @cpp_lib
🧐Слышали о контейнерах в C++, но не уверены, когда и как их правильно использовать?
На открытом уроке «Контейнеры C++» 20 августа в 20:00 МСК мы разберём, как эффективно использовать стандартные и сторонние контейнеры в C++. Мы рассмотрим популярные STL-контейнеры — std::vector, std::list, std::deque, а также контейнеры-адаптеры и библиотеки сторонних разработчиков, такие как folly, boost и libcuckoo. Поймём, в каких случаях использовать каждый из них, чтобы повысить производительность и улучшить архитектуру программ.
Вы получите конкретные знания, которые можно сразу применить в реальных проектах, и сможете выбирать оптимальные решения для работы с данными в C++.
⚡️Регистрируйтесь на вебинар и получите скидку на курс «C++ Developer. Professional»: https://vk.cc/cOFuK4
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Как правильно вызывать 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/
#cpp #programming
👉 @cpp_libData-Parallel Types: алгоритмы (C++26)
Библиотека «data-parallel types» для SIMD-векторов (пространство имён
std::experimental, алиас stdx) предоставляет четыре специальных алгоритма: `min, max, minmax и clamp.
min, max, minmax
- min(a, b) и max(a, b) принимают два SIMD-вектора и возвращают вектор покомпонентных минимумов/максимумов.
- minmax(a, b) возвращает пару SIMD-векторов: первый — покомпонентные минимумы, второй — максимумы.
- Автор отмечает, что строка stdx::minmax(a, b) у него не компилировалась ни в GCC, ни в Clang (на момент публикации).
clamp
- stdx::clamp(v, lo, hi) применяет std::clamp к каждому элементу SIMD-вектора: значения ниже lo поднимаются до нижней границы, выше hi — опускаются до верхней.
- Показаны два примера: ограничение к диапазону INT8_MIN..INT8_MAX и к 0..UINT8_MAX; на выводах видно, как выходящие за пределы элементы прижимаются к границам.
Итог
- Для SIMD-векторов доступны привычные «минимумы/максимумы» и покомпонентный clamp.
- minmax задуман как удобный возврат пары (min/max), но в текущих компиляторах может не собираться.
- Дальше автор планирует разбирать новые возможности C++26 (в частности, контракты).
https://www.modernescpp.com/index.php/data-parallel-types-algorithms/
#cpp #programming
👉 @cpp_libУстали от повторяющегося кода в Rust? Хотите научиться превращать 100 строк в 5?
➡️ Присоединяйтесь к открытому уроку «Макросы в Rust: от macro_rules! до процедурных макросов» 19 августа в 20:00 МСК.
На вебинаре мы:
— Освоим декларативные макросы: синтаксис и паттерн-матчинг.
— Разберемся с процедурными макросами: derive, attribute, function-like.
— Научимся создавать DSL и автоматизировать рутинные задачи.
— Поймем, когда использовать макросы и когда их избегать.
❗️Этот урок — отличный тест-драйв курса «Rust Developer. Professional» от OTUS. Все участники вебинара получат скидку на обучение!
🔴 Зарегистрироваться на вебинар → https://vk.cc/cOAVrP
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Оптимизация с помощью аллокаторов в C++17
Благодаря полиморфным аллокаторам в C++17 можно оптимизировать распределение памяти. Эта оптимизация включает в себя производительность и повторное использование памяти.
https://www.modernescpp.com/index.php/optimization-with-allocators-in-c17/
#cpp #programming
👉 @cpp_lib
Лекции С++ продвинутый поток ФПМИ 2023-24
Лекция 1. Введение в язык C++. Основные типы и операции над ними
Лекция 2. Основные команды в терминале. Компиляция программ
Лекция 3. Объявления и определения, области видимости, пространства имен
Лекция 4. Выражения и операторы. Управляющие конструкции
Лекция 5. Compile-time errors, runtime errors, undefined behavior
Лекция 6. Указатели
Лекция 7. Стековая, статическая и динамическая память
Лекция 8. Массивы, функции и указатели на функции
источник
#cpp #programming
👉 @cpp_lib
🚀 YADRO приглашает C++ разработчиков в команду OpenBMC и встроенных систем!
Если вы хотите создавать сложное программное обеспечение для серверов и систем хранения данных, работать с передовыми технологиями Linux и участвовать в проектах open source, то эта возможность для вас.
📌 Кого мы ищем:
• Ведущего разработчика C++ (Linux/OpenBMC)
• Ведущего разработчика интерфейсов встроенных систем
• TeamLead разработки OpenBMC
🧰 Технологический стек и задачи:
• C++ (стандарты 17, 20, 23), STL, Boost
• Linux-среда, systemd, D-Bus, Yocto, bash, Python
• Работа с ядром прошивки OpenBMC, взаимодействие с UEFI/BIOS
• Разработка и поддержка сложных интерфейсов встроенных систем
💼 Условия работы:
• Гибкий формат: удалённо или в офисах в Москве, Санкт-Петербурге, Екатеринбурге, Нижнем Новгороде и Минске
• Работа с масштабными проектами в уникальной команде инженеров
• Возможность горизонтального и вертикального карьерного роста
💙 Узнайте больше и откликайтесь на вакансии прямо на сайте!
Подход к реализации постоянных параметров шаблонов через библиотеку
Ранее эти параметры шаблонов назывались нетиповыми параметрами шаблонов (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/
#cpp #programming
👉 @cpp_libПродвинутое использование препроцессора в C и C++
Зачастую, в проектах ограничивается использование препроцессора по следующим причинам:
— Он не похож на весь остальной язык;
— Макросы могут возвращать неполные синтаксические конструкции, или вовсе различные, в зависимости от параметров.
Ввиду перечисленных особенностей, читать код с активным использованием препроцессора зачастую становится на порядок сложнее кода без него.
Со всеми его недостатками, инструмент есть в языке и достоин изучения.
https://habr.com/ru/companies/timeweb/articles/928598/
#cpp #programming
👉 @cpp_lib
Универсальная С++ фабрика объектов: для Qt и не только
Меня зовут Михаил Полукаров, я занимаюсь разработкой Desktop-версии корпоративного супераппа для совместной работы VK Teams.
Если вы тоже работали с большими проектами, где активно применяются объектно-ориентированные паттерны проектирования, то наверняка сталкивались с паттернами проектирования Factory Method или AbstractFactory. В процессе разработки я неоднократно ловил себя на мысли, что часто пишу однотипный код таких фабрик, и задумался о том, как можно было бы избежать таких самоповторений.
В этой статье я покажу, как сделать универсальную фабрику объектов, покрывающую большую часть потребностей, следующую принципам DRY (Don’t Repeat Yourself), а также как можно использовать некоторые «фишки» новых стандартов С++.
https://habr.com/ru/companies/vktech/articles/932358/
#cpp #programming
👉 @cpp_lib
Качественных каналов про C++ не так много, но вот три, которые стоит читать:
- Грокаем C++ — два опытных инженера делятся разбором сложных тем и подходов.
- Илья Шишков: код, собесы, IT — экспертный взгляд на собеседования, карьеру и продакшн-разработку.
- this->notes — заметки и дайджесты про C++, архитектуру и современную разработку.
Подписавшись, вы точно будете в плюсовом контексте.
👉 https://t.me/addlist/jEIgjFluVUI0YjM6
Как читать язык ассемблера
Зачем кому-то нужно изучать язык ассемблера? Во-первых, чтение языка ассемблера - это способ узнать, что именно делает ваша программа. Почему именно эта программа на Си++ занимает 1 Мб (скажем), а не 100 Кб? Можно ли выжать еще немного производительности из той функции, которая постоянно вызывается?
В частности, для языка Си++ легко забыть или просто не заметить какую-либо операцию (например, неявное преобразование или вызов конструктора или деструктора копирования), которая подразумевается исходным кодом и семантикой языка, но не прописана в явном виде. Если посмотреть на ассемблер, сгенерированный компилятором, то все будет на виду.
https://wolchok.org/posts/how-to-read-assembly-language/
#cpp #programming
👉 @cpp_lib
📈Хотите, чтобы ваши приложения на C++ работали на максимуме?
Присоединяйтесь к открытому уроку «Как сделать ваши приложения C++ супер-производительными»!
На вебинаре вы:
— Научитесь использовать инструменты профилирования gprof, valgrind, Google Benchmark.
— Овладеете техниками повышения производительности кэша и оптимизации управления памятью.
— Узнаете, как использовать оптимизации компилятора для улучшения работы программы.
Все участники вебинара получат скидкуна большое обучение «C++ Developer. Professional».
🔥Не упустите шанс улучшить свои навыки и повысить производительность программ! Регистрация открыта: https://vk.cc/cOhlSO
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Компиляторный бенчмаркинг и JIT-компиляция
Анастасия Черникова
Обсудили инструмент автоматического бенчмаркинга llvm-exegesis и то, какие проблемы он помогает решать.
Недавно появилась поддержка RISC-V backend: Анастасия рассказала про ее особенности, реализацию и о том, что еще предстоит сделать. Подробно представила режимы работы и опции запуска, чтобы каждый уже в конце доклада смог полноценно использовать llvm-exegesis для решения своих задач.
Бонус: вы познакомитесь сllvm-jit и узнаете, как использовать его в качестве самостоятельного инструмента.
00:00 Начало. RISC-V и LLVM
05:24 Компиляторный бенчмаркинг
09:14 Использование и возможности llvm-exegesis
18:03 История инструмента, его разнообразные применения и его путь в RISC-V
25:22 llvm-jit его устройство и использование: как отдельно так и внутри инструментов
29:56 Ответы на вопросы
35:00 Моё камео: ответ про соотношение llvm-mca и llvm-exegesis. Далее Настя продолжает отвечать сама.
источник
#cpp #programming
👉 @cpp_lib
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
