cpp_lib | Unsorted

Telegram-канал cpp_lib - Библиотека C/C++ разработчика

7358

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

Subscribe to a channel

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

Константин Осипов — Стратегии слияния (compaction strategies) в LSM-деревьях

Стратегия слияний в LSM-деревьях — проблема, для которой сейчас не существует доказанного оптимального решения. RocksDB, Cassandra, CockroachDB реализуют целый ряд эвристик и предлагают пользователю многочисленные настройки по оптимизации под конкретные сценарии нагрузки.

В докладе я попробую разобрать эту проблему в свете последних изменений в аналогичном алгоритме слияний в движке Vinyl для Tarantool и Picodata, который я реализовал. Разберу различные стратегии, настройки, и техники оптимизации. Коснусь последних статей по теме. В результате, надеюсь, у слушателей появится более целостная картина проблемной области и компромиссов, на которые идут разработчики движков хранения данных.

источник

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Курс по C++ и SFML

Простые программы на C++
В статье мы напишем пару простейших программ на C++ и посмотрим, как происходит их компиляция.
https://ps-group.github.io/ps1/lesson_cpp_1

Знакомство с SFML. Компьютерная графика.
SFML (Simple Fast Multimedia Library) — это C++ библиотека для мультимедиа. В статье мы воспользуемся SFML для рисования фигур в окне.
https://ps-group.github.io/ps1/lesson_sfml_1

Основной цикл программы. Анимация.
В статье мы освоим паттерн Game Loop, а также научимся обрабатывать события мыши и клавиатуры.
https://ps-group.github.io/ps1/lesson_sfml_2

Обработка событий. Интерактив.
В статье вы освоите обработку событий мыши и клавиатуры в мультимедийных программах и научитесь писать функции на языке С++
https://ps-group.github.io/ps1/lesson_sfml_3

Соглашения о кодировании на C++
Соглашения о кодировании для курса по C++/SFML
https://ps-group.github.io/ps1/cxx_coding_style

Комплексные задачи. Котик следует за мышкой
В этой практике вы начнёте по шагам решать комплексные задачи, двигаясь от математической модели и псевдокода к готовой программе
https://ps-group.github.io/ps1/sfml_workshop_1

Массовые столкновения
На этом занятии вы научитесь программировать игры уровня Бильярда или Arkanoid
https://ps-group.github.io/ps1/sfml_workshop_2

Ещё одна практика на SFML
На этом занятии вы освоите более гибкие приёмы работы с SFML: виртуальную камеру, рисование произвольных фигур, проверку столкновения
https://ps-group.github.io/ps1/sfml_workshop_3

Основной проект курса: 2D игра
Цель проекта - самостоятельно написать комплексную программу, клон небольшой игры
https://ps-group.github.io/ps1/project

Задание | Спецификация проекта в виде MindMap
Чтобы составить видение проекта-игры, нужно визуализировать. Сделать это поможет MindMap.
https://docs.google.com/document/d/1Ki6DlbhDrZHskC6LED88FHeX8m-Se3-MrTpjwKYlcDk/edit?usp=sharing

Задание | План проекта в виде RoadMap
Чтобы справиться с известным проектом в известные сроки, нужно составить план действий. Сделать это поможет RoadMap.
https://docs.google.com/document/d/1zdW81SLmgVf3ZXyMwXkOXxIwOzBzkTTvi4TTMLdUw_E/edit

Пишем клон игры PacMan слой за слоем
В этой коллекции примеров слой за слоем на C++/SFML воссоздаётся урезанный клон игры PacMan
https://github.com/ps-group/sfml-packman

Схема оценки проекта-игры
В таблице записаны критерии оценки и примеры оценивания различных игр
https://docs.google.com/spreadsheets/d/1n7OzeQEDujPDboW3dFn4M4iXhcPvlCR7FQbPRSE4jwM/edit?usp=sharing

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

🇷🇺 Разбираешься в радиочипах, оптике и связи? Забери до 1 000 000 рублей за свои инженерные навыки на турнире «Дронкон» 🇷🇺

«Сталинские Соколы» открывают регистрацию на 4-й Всероссийский турнир «Дронкон», который пройдет с 22 по 26 августа.

Турнир пройдет по направлению:
- Инженерное дело: навыки программирования, сборка электронного оборудования, беспроводная связь, оптические системы + стратегия «Битва Дронов»;

Призовой фонд для победителей:
🥇место – 1 000 000 рублей
🥈место – 700 000 рублей
🥉место – 500 000 рублей
Награда за 4-8 места - 100 000 рублей

Пройди заочный онлайн-этап и получи путевку на очный этап турнира в Республику Татарстан!
Перелет, питание, проживание - за счет организаторов.

🇷🇺 Подать заявку и узнать подробности 🇷🇺

Читать полностью…

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

FTXUI

Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала!

• Функциональный стиль
• Простой и элегантный синтаксис
• Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши
• Поддержка UTF8
• Поддержка анимации
• Поддержка рисования
• Нет зависимостей
• Кроссплатформенность: Linux/MacOS, WebAssembly, Windows


https://github.com/ArthurSonzogni/FTXUI

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

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

Отрежьте мне миллиард символов: как 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

Читать полностью…

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

🤷Программа может работать месяцами без проблем, а затем внезапно начать терять память, завершаться с ошибками или вести себя непредсказуемо. Поиск таких проблем часто занимает гораздо больше времени, чем их предотвращение.

📈30 июня в 20:00 МСК приглашаем вас на открытый урок, где разберём один из ключевых принципов современного C++, который помогает создавать более устойчивые и безопасные приложения.

На занятии рассмотрим основы RAII, его связь с обработкой исключений, применение в стандартной библиотеке и практические приёмы работы с ресурсами. Также разберём распространённые ошибки, которые приводят к утечкам памяти и усложняют сопровождение проектов.

⚡️Открытый урок проходит в преддверии старта курса «C++-разработчик. Продвинутый уровень». Зарегистрируйтесь, чтобы глубже понять современные подходы к разработке на C++, задать вопросы эксперту и получить практические рекомендации для своих проектов: https://vk.cc/cZ9Fyx

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

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

🚀 Подборка полезных 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 лайфхак 📌
/channel/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/C++ разработчика

🗑️ Zeroize: Почему просто удалить данные недостаточно?

В разработке мы постоянно работаем с чувствительными данными: паролями, API-токенами, приватными криптографическими ключами. Но задумывались ли вы, что происходит с ними после того, как переменная выходит из области видимости?

Оказывается, просто позволить сборщику мусора или ОС освободить память - небезопасно. Данные могут остаться лежать в оперативной памяти (или даже попасть в swap-файл на диске) в открытом виде, став легкой добычей для злоумышленников при дампе памяти.

В этой статье подробно разбирается концепция Zeroize - гарантированного и безопасного затирания данных.

О чем внутри:

• Почему стандартные методы очистки памяти не подходят для секретов.
• Как хитрые оптимизаторы компиляторов могут сыграть с вами злую шутку (например, вырезав ваш код очистки как «ненужный»).
• Лучшие практики: как правильно перезаписывать память нулями, чтобы секреты исчезали навсегда.

Всем, кто пишет код, работающий с авторизацией или криптографией — категорически рекомендуется к прочтению.

🔗 Читать статью полностью: https://ddanilov.me/zeroize

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Магия Lovable: как создавать готовые интерфейсы с помощью одного запроса.
Бесплатный урок курса «Вайб-кодинг: создание цифровых продуктов с ИИ»


Lovable может за минуты собрать экран, который выглядит как почти готовый интерфейс. Но результат зависит не от «магии нейросети», а от того, насколько точно вы ставите задачу. Один расплывчатый запрос даст случайный макет, а правильно собранный системный промпт — понятную структуру, единый стиль и экран, который уже можно показывать команде, заказчику или использовать для проверки идеи.

На открытом уроке 2 июля в 20:00 разберём, как формулировать задачи для Lovable, чтобы получать предсказуемый результат с первой попытки. Поговорим о структуре системного промпта, ключевых словах, которые помогают превратить текст в качественный интерфейс, и способах доработки результата через встроенный редактор и повторные запросы. Отдельно обсудим, как управлять компонентами, просить нейросеть переиспользовать элементы и сохранять единый визуальный стиль.

Урок не для тех, кто ждёт, что Lovable «сам всё поймёт», не готов уточнять задачу и хочет получать качественный интерфейс без структуры, контекста и итераций.

👉 Записаться: https://vk.cc/cYZCBy

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

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

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

Читать полностью…

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

🤖Программа работает стабильно до тех пор, пока не появляется загадочный сбой, неожиданное завершение или утечка памяти. И чем крупнее проект, тем дороже обходятся такие ошибки.

📆2 июля в 20:00 МСК на открытом уроке разберём одну из ключевых тем языка, от которой напрямую зависят надёжность и предсказуемость работы приложений.

На практических примерах рассмотрим жизненный цикл объектов, создание и удаление данных, типичные ошибки при работе с памятью и способы поиска утечек. Поговорим о неочевидных случаях, которые встречаются даже в зрелых проектах.

🏁Урок проходит в преддверии старта курса «C++-разработчик». Регистрируйтесь, чтобы разобраться в фундаментальных механизмах языка, познакомиться с форматом обучения и задать вопросы эксперту: https://vk.cc/cYRwfk

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

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

Динамический полиморфизм против 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

Читать полностью…

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

Как правильно вызывать 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

Читать полностью…

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

Подход к реализации постоянных параметров шаблонов через библиотеку

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

👨‍💻Большинство разработчиков используют готовые средства для создания интерфейсов и редко задумываются, что происходит под капотом. Но именно понимание внутренних механизмов помогает создавать более гибкие, быстрые и управляемые приложения.

📆14 июля в 20:00 МСК приглашаем на открытый урок, где разберём, как создавать собственные элементы управления без сложных надстроек и лишних зависимостей.

Вы узнаете, как обрабатывать действия пользователя, выводить графику на экран, создавать кнопки, текстовые поля и другие элементы интерфейса, а также организовывать их взаимодействие внутри приложения. Все подходы будут рассмотрены на практических примерах.

🏁Открытый урок проходит в преддверии старта курса «C++-разработчик. Продвинутый уровень». Зарегистрируйтесь, чтобы глубже понять устройство интерфейсов, задать вопросы эксперту и оценить возможности дальнейшего развития в C++: https://vk.cc/cZqKci

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

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

std::expected в C++23: гайд по миграции с исключений на функциональный error handling

Исключения удобны, пока ошибки не становятся обычной частью логики. В C++23 для таких случаев есть std::expected: он явно показывает в сигнатуре, что функция вернёт либо результат, либо ошибку. Разберём, как перейти к этому подходу без переписывания проекта с нуля.

https://habr.com/ru/companies/otus/articles/1054592/

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

👨‍💻 Два в одном: валидация и вызов в Control Flow Guard (CFG)

Рэймонд Чен (Raymond Chen) в своем блоге The Old New Thing поделился интересными деталями реализации механизма Control Flow Guard в Windows.

Обычно CFG работает в два этапа: сначала мы вызываем функцию вроде LdrpValidateUserCallTarget для проверки указателя, и если всё в порядке, возвращаемся и делаем вызов. Но существует и комбинированная версия, которая не просто проверяет указатель, но и сразу же делает по нему переход (jump).

🤔 Зачем это нужно и в чем подвох?
Раз уж после валидации почти всегда следует вызов, объединение операций кажется логичным шагом для оптимизации. Но здесь кроется проблема: для такого трюка приходится менять соглашение о вызовах (calling convention). Регистры, которые использует функция валидации, ни в коем случае не должны пересекаться с регистрами, в которых лежат аргументы для итоговой функции.

🔧 Как это реализовано на уровне ассемблера:
🔹 x86-64: Обычная функция-валидатор принимает адрес в rcx и использует rax и rdx как временные регистры. Комбинированная версия принимает адрес в rax, использует r10 и r11 для своих расчетов, а в конце просто делает jmp rax. Все исходные параметры целевой функции остаются нетронутыми!
🔹 AArch64: Логика абсолютно та же. Обычная версия принимает адрес в x15, а комбинированная - в x9, завершаясь инструкцией br x9 вместо классического ret.

Кстати, есть и приятный микро-бонус при обработке ошибок: если указатель оказывается «битым», комбинированной функции не нужно тратить инструкции на перекладывание адреса в нужный регистр перед прыжком в блок ошибки - плохой адрес уже находится там, где нужно (rax или x9).

🔗 Оригинальная статья и листинги дизассемблера:
https://devblogs.microsoft.com/oldnewthing/20260708-00/?p=112510

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Как в 19 лет я начал путь разработчика встраиваемого ПО

Привет! Меня зовут Данила, мне 21 год, и за последние 2,5 года я успел поработать в роли разработчика программного обеспечения для встраиваемых систем — в основном на базе STM32. В этой статье я хочу поделиться тем, как я вообще пришёл в эту сферу, с чего начинал, какие грабли собрал и какие выводы сделал по пути.

https://habr.com/ru/articles/922322/

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

Библиотека C/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/C++ разработчика

🔥 Оптимизация целочисленного деления: 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

Читать полностью…

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

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

Читать полностью…

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

🚀 Синхронизация потоков в 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

Читать полностью…

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

🧩 Почему «обычный 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

Читать полностью…

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

Большие новости для 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

Читать полностью…

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

С/С++ в современном машинном обучении: традиционные роли и возможности нового стандарта

Меня зовут Кирилл, я разработчик СХД в YADRO и ML-энтузиаст, автор книги "Hands-on Machine Learning with C++". Я заметил, что роль С/С++ в экосистеме машинного обучения трансформируется прямо сейчас. Чтобы понять, какое значение язык играет в развитии ML, мы поговорим о классическом применении C++ для ручной оптимизации вычислительных ядер. Затем разберемся, почему новый стандарт не закрепляет реализаций линейной алгебры, а отдает это на откуп поставщикам стандартной библиотеки и вендорам оборудования. И в завершение подумаем, как работать с «зоопарком реализаций», который из-за этого остается.

https://habr.com/ru/companies/yadro/articles/1048932/

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

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

Читать полностью…

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

Оптимизация GUI на Qt

Как правило, при создании desktop-приложений на платформе Qt не возникает проблем, связанных с медленностью работы GUI. Qt – платформа достаточно надежная, неплохо вылизанная по всем параметрам, в том числе и по скорости работы. Однако всё же иногда бывают ситуации, когда из-за обилия виджетов графический интерфейс немного притормаживает, и это печально). В этой статье я приведу один частный пример простого графического интерфейса и покажу, как за два шага можно сначала ускорить его в 11 раз, а потом и в целых 34 раза. Вдобавок к этому, я постараюсь немного осветить механизм принятия решения для таких оптимизационных задач, постараюсь показать направление мыслей для правильного решения. Поехали!

https://habr.com/ru/post/672962/

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

Лекции С++ продвинутый поток ФПМИ 2023-24

Лекция 1. Введение в язык C++. Основные типы и операции над ними
Лекция 2. Основные команды в терминале. Компиляция программ
Лекция 3. Объявления и определения, области видимости, пространства имен
Лекция 4. Выражения и операторы. Управляющие конструкции
Лекция 5. Compile-time errors, runtime errors, undefined behavior
Лекция 6. Указатели
Лекция 7. Стековая, статическая и динамическая память
Лекция 8. Массивы, функции и указатели на функции

источник

📲 Мы в MAX

#cpp #programming

👉 @cpp_lib

Читать полностью…

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

🚀 Подборка полезных 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 лайфхак 📌
/channel/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 Питер Новости: Санкт-Петербург / СПБ / ДТП

Читать полностью…
Subscribe to a channel