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

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

رفتن به کانال در Telegram

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

نمایش بیشتر
7 324
مشترکین
-324 ساعت
+57 روز
+1230 روز
آرشیو پست ها
Оптимизация GUI на Qt Как правило, при создании desktop-приложений на платформе Qt не возникает проблем, связанных с медленно
Оптимизация GUI на Qt Как правило, при создании desktop-приложений на платформе Qt не возникает проблем, связанных с медленностью работы GUI. Qt – платформа достаточно надежная, неплохо вылизанная по всем параметрам, в том числе и по скорости работы. Однако всё же иногда бывают ситуации, когда из-за обилия виджетов графический интерфейс немного притормаживает, и это печально). В этой статье я приведу один частный пример простого графического интерфейса и покажу, как за два шага можно сначала ускорить его в 11 раз, а потом и в целых 34 раза. Вдобавок к этому, я постараюсь немного осветить механизм принятия решения для таких оптимизационных задач, постараюсь показать направление мыслей для правильного решения. Поехали! https://habr.com/ru/post/672962/ #cpp #programming 👉 @cpp_lib

💻 Курс “Программист на C” от OTUS — старт набора Освойте один из самых мощных и востребованных языков системного программиро
💻 Курс “Программист на 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++, компиляторах и вашей программе Привет, меня зовут Илья Андреев, я старший программист в компании Synta
Девиртуализация в C++, компиляторах и вашей программе Привет, меня зовут Илья Андреев, я старший программист в компании Syntacore. Вы, наверно, слышали, что виртуальные функции в C++ пользуются дурной славой — а может, и сами придерживаетесь о них не самого лучшего мнения. В этой статье, подготовленной совместно с Константином Владимировым, я в некоторой степени выступлю адвокатом виртуализации. Мы начнем с вводной части о статическом и динамическом полиморфизме, рассмотрим факторы, влияющие на девиртуализацию, и ее примеры разной сложности — в том числе те, что мы используем в реальной разработке. А напоследок познакомим вас со спекулятивной девиртуализацией и дадим рекомендации, как подходить к виртуальным функциям в разработке на C++. https://habr.com/ru/companies/yadro/articles/938694/ #cpp #programming 👉 @cpp_lib

🧐Слышали о контейнерах в C++, но не уверены, когда и как их правильно использовать? На открытом уроке «Контейнеры C++» 20 ав
🧐Слышали о контейнерах в 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_lib

Data-Parallel Types: алгоритмы (C++26) Библиотека «data-parallel types» для SIMD-векторов (пространство имён std::experimenta
Data-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? Хотите научиться превращать 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 можно оптимизировать распределение памяти
Оптимизация с помощью аллокаторов в C++17 Благодаря полиморфным аллокаторам в C++17 можно оптимизировать распределение памяти. Эта оптимизация включает в себя производительность и повторное использование памяти. https://www.modernescpp.com/index.php/optimization-with-allocators-in-c17/ #cpp #programming 👉 @cpp_lib

+7
Лекции С++ продвинутый поток ФПМИ 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 • Разработка и поддержка сложных интерфейсов встроенных систем 💼 Условия работы: • Гибкий формат: удалённо или в офисах в Москве, Санкт-Петербурге, Екатеринбурге, Нижнем Новгороде и Минске • Работа с масштабными проектами в уникальной команде инженеров • Возможность горизонтального и вертикального карьерного роста 💙 Узнайте больше и откликайтесь на вакансии прямо на сайте!

Чему C++ может научиться? Антон Полухин, Павел Новиков Обсудили, как C99 создает проблемы с неопределенным поведением и почему C++ должен минимизировать его, улучшая предсказуемость и удобство для разработчиков. источник #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/ #cpp #programming 👉 @cpp_lib

Продвинутое использование препроцессора в C и C++ Зачастую, в проектах ограничивается использование препроцессора по следующи
Продвинутое использование препроцессора в C и C++ Зачастую, в проектах ограничивается использование препроцессора по следующим причинам: — Он не похож на весь остальной язык; — Макросы могут возвращать неполные синтаксические конструкции, или вовсе различные, в зависимости от параметров. Ввиду перечисленных особенностей, читать код с активным использованием препроцессора зачастую становится на порядок сложнее кода без него. Со всеми его недостатками, инструмент есть в языке и достоин изучения. https://habr.com/ru/companies/timeweb/articles/928598/ #cpp #programming 👉 @cpp_lib

Универсальная С++ фабрика объектов: для Qt и не только Меня зовут Михаил Полукаров, я занимаюсь разработкой Desktop-версии ко
Универсальная С++ фабрика объектов: для Qt и не только Меня зовут Михаил Полукаров, я занимаюсь разработкой Desktop-версии корпоративного супераппа для совместной работы VK Teams. Если вы тоже работали с большими проектами, где активно применяются объектно-ориентированные паттерны проектирования, то наверняка сталкивались с паттернами проектирования Factory Method или AbstractFactory. В процессе разработки я неоднократно ловил себя на мысли, что часто пишу однотипный код таких фабрик, и задумался о том, как можно было бы избежать таких самоповторений. В этой статье я покажу, как сделать универсальную фабрику объектов, покрывающую большую часть потребностей, следующую принципам DRY (Don’t Repeat Yourself), а также как можно использовать некоторые «фишки» новых стандартов С++. https://habr.com/ru/companies/vktech/articles/932358/ #cpp #programming 👉 @cpp_lib

#cpp #programming 👉 @cpp_lib
#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++ работали на максимуме? Присоединяйтесь к открытому уроку «Как сделать ваши приложения 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