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

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

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

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

نمایش بیشتر
7 325
مشترکین
+524 ساعت
+67 روز
+1230 روز
آرشیو پست ها
Как в 19 лет я начал путь разработчика встраиваемого ПО Привет! Меня зовут Данила, мне 21 год, и за последние 2,5 года я успе
Как в 19 лет я начал путь разработчика встраиваемого ПО Привет! Меня зовут Данила, мне 21 год, и за последние 2,5 года я успел поработать в роли разработчика программного обеспечения для встраиваемых систем — в основном на базе STM32. В этой статье я хочу поделиться тем, как я вообще пришёл в эту сферу, с чего начинал, какие грабли собрал и какие выводы сделал по пути. https://habr.com/ru/articles/922322/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

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

Почему функции 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

🚀 Подборка полезных 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 и др. 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование 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 Свежие новости Москвы

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

Долг оптимизацией красен: как мы в МойОфис объединили борьбу с легаси и увеличение производительности таблиц Ещё Достоевский
Долг оптимизацией красен: как мы в МойОфис объединили борьбу с легаси и увеличение производительности таблиц Ещё Достоевский на примере своих героев-картёжников показал: быть должником — удовольствие сомнительное в любую эпоху. В разработке тоже есть своя «долговая яма» —технический долг. Если продукт большой и развивается годами, полностью избежать его невозможно. Функциональность реализована, всё математически корректно работает, но из-за накопившихся архитектурных компромиссов всё сложнее укладываться в пользовательские ожидания по скорости и отзывчивости. Меня зовут Дмитрий Шубин, я занимаюсь оптимизацией производительности в компании МойОфис — конкретно в Ядре редакторов (о нём ранее рассказывал мой коллега в статье «Как мы создаём редакторы документов. Ядро и его роль в кроссплатформенной разработке»). Ядро — основа редакторов на любой платформе, и именно здесь чаще всего концентрируются проблемы производительности. В этой статье разберём, почему возникает такой долг и как мы с ним работаем на практическом примере оптимизации редактора «МояТаблица». https://habr.com/ru/companies/ncloudtech/articles/1001468/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

⚡️Современный стандарт C++ меняет стиль разработки — и библиотека Ranges играет в этом ключевую роль. 📆На открытом уроке 2 м
⚡️Современный стандарт C++ меняет стиль разработки — и библиотека Ranges играет в этом ключевую роль. 📆На открытом уроке 2 марта в 20:00 МСК вы увидите, как писать декларативный, чистый и производительный код без громоздких циклов и лишних структур. Разберём views, адаптеры, цепочки преобразований и отложенные вычисления — на практике, без воды и абстракций. Вы поймёте, как перейти к современному стилю C++ и работать с коллекциями на новом уровне — с контролем ресурсов и фокусом на производительность. Вебинар идеально подходит для начинающих разработчиков. 👉Открытый урок проходит в преддверие старта курса «C++ Developer». Зарегистрируйтесь и посмотрите, каким может быть современный C++ в реальных проектах: https://vk.cc/cUM7wG Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Создаем плагин с генеративным ИИ для 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 📲 Мы в 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

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/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

+7
Лекции С++ продвинутый поток ФПМИ 2023-24 Лекция 1. Введение в язык C++. Основные типы и операции над ними Лекция 2. Основные команды в терминале. Компиляция программ Лекция 3. Объявления и определения, области видимости, пространства имен Лекция 4. Выражения и операторы. Управляющие конструкции Лекция 5. Compile-time errors, runtime errors, undefined behavior Лекция 6. Указатели Лекция 7. Стековая, статическая и динамическая память Лекция 8. Массивы, функции и указатели на функции источник 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

👨‍💻Хотите начать карьеру в разработке? Обратите внимание на Rust и познакомьтесь с ним за один вечер! 📆На открытом уроке 2
👨‍💻Хотите начать карьеру в разработке? Обратите внимание на Rust и познакомьтесь с ним за один вечер! 📆На открытом уроке 25 февраля в 20:00 МСК вы установите инструменты, разберётесь с rustc и Cargo и создадите своё первое приложение. Пошагово, с объяснением каждой команды и структуры проекта. Вы увидите, как Rust решает реальные проблемы C++, Python и других языков, где ошибки часто проявляются слишком поздно. Поймёте философию языка и получите готовую среду для дальнейшего развития. Если вы рассматриваете Rust как следующий шаг в карьере, этот урок — эффективная точка входа. 👉Встречаемся в преддверии старта курса «Rust Developer. Basic». Зарегистрируйтесь и начните системно разбираться в языке, который уже меняет индустрию: https://vk.cc/cUBYOg Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Подход к реализации постоянных параметров шаблонов через библиотеку Ранее эти параметры шаблонов назывались нетиповыми параме
Подход к реализации постоянных параметров шаблонов через библиотеку
Ранее эти параметры шаблонов назывались нетиповыми параметрами шаблонов (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

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

Как читать язык ассемблера Зачем кому-то нужно изучать язык ассемблера? Во-первых, чтение языка ассемблера - это способ узнат
Как читать язык ассемблера Зачем кому-то нужно изучать язык ассемблера? Во-первых, чтение языка ассемблера - это способ узнать, что именно делает ваша программа. Почему именно эта программа на Си++ занимает 1 Мб (скажем), а не 100 Кб? Можно ли выжать еще немного производительности из той функции, которая постоянно вызывается? В частности, для языка Си++ легко забыть или просто не заметить какую-либо операцию (например, неявное преобразование или вызов конструктора или деструктора копирования), которая подразумевается исходным кодом и семантикой языка, но не прописана в явном виде. Если посмотреть на ассемблер, сгенерированный компилятором, то все будет на виду. https://wolchok.org/posts/how-to-read-assembly-language/ 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

C++ изнутри: внутренние механизмы классов Крис Райан — CppCon 2024 В своём докладе я рассмотрю внутренние механизмы C++ по следующим темам: - "Луковица C++": как она соотносится с конструированием, уничтожением объектов и полиморфизмом; - Порядок конструирования и уничтожения объектов, а также обработка до и после выполнения main(); - Указатели на функции-члены (это не те C-указатели на функции, что вы знали раньше); - Указатели на данные-члены (не просто «сырые» указатели) и их "data-morphic" функциональность; - Понимание стека вызовов, кадров стека и механизмов базового указателя (base pointer). источник 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

🔥 SPRINT OFFER: оффер RTL Design Engineer за 3 дня 🔥 Хотите работать в команде, которая разрабатывает сложные цифровые реше
🔥 SPRINT OFFER: оффер RTL Design Engineer за 3 дня 🔥 Хотите работать в команде, которая разрабатывает сложные цифровые решения для ASIC и участвует в создании собственных аппаратных модулей на уровне RTL? Команда Semiconductors в YADRO занимается проектированием и реализацией функциональных блоков для ASIC с использованием современных подходов к цифровому дизайну и тесным взаимодействием с архитекторами и инженерами по верификации. 🎓 Что важно: • Опыт разработки RTL не менее 2 лет. • Уверенное знание Verilog/SystemVerilog. • Опыт работы с RTL-симуляторами (любой вендор). • Опыт работы в Linux-окружении. • Опыт работы с системами контроля версий. • Знание современных интерфейсов (AXI, PAB, AHB). Вас ждёт разработка RTL-моделей для ASIC: интерфейсы, контроллеры, логика обработки данных, а также работа в тесной связке с архитекторами, верификацией и SoC-командой. ⚙️Как проходит SPRINT OFFER: 1️⃣ Подайте заявку до 22 февраля и пройдите HR-скрининг. 2️⃣ Пройдите техническое и менеджерское интервью. 3️⃣ Получите оффер в течение 3 дней. 💙 Оставляйте заявку до 22 февраля и присоединяйтесь к команде инженеров YADRO, которая работает над развитием современных аппаратных технологий!

C++ Std:: string Interface Overview 📲 Мы в MAX #cpp #programming 👉 @cpp_lib
C++ Std:: string Interface Overview 📲 Мы в MAX #cpp #programming 👉 @cpp_lib

Dockerизированная 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