Обновить
258.12

C++ *

Типизированный язык программирования

Сначала показывать
Период
Уровень сложности

Иерархия vs Массовые изобретатели

Время на прочтение4 мин
Охват и читатели11K

🧲 Что если общество можно моделировать как игру, а иерархии — это просто баг старого механизма? Я хочу построить симуляцию, которая проверит, возможна ли цивилизация массовых изобретателей.

Почему иерархии всегда побеждали… и что мо

Элегантный OSDev: Пишем ядро ОС на modern C++ без макросов. Часть 2 — PMM + Allocator

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели12K

В текущей статье, реализуем поддержку памяти и аллокатора в ядре, а так же перегрузим new и delete используя новый механизм памяти. На последок напишем контейнер OS::String для работы со строками, интерфейс API будет совпадать с интерфейсом std::string. Что бы в будущем просто сделать using на std контейнеры. Когда получится их завести. Цель создать фундамент для использования C++ идиом (включая умные указатели и STL‑подобные контейнеры) в «голом» окружении ядра без стандартных библиотечных аллокаторов. Решение позволяет тестировать код на хост‑системе (Windows/Linux) и затем без изменений запускать на целевой платформе (QEMU).

Читать далее

Создание плагина для Clang для поиска Singleton

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели7.7K

Сейчас репутация Singleton давно не та, что была ранее. В последние годы он признается антипаттерном, который следует избегать в новом коде, но что делать с legacy кодом? Ловить косые взгляды современников? В данной статье мы напишем плагин для поиска этого паттерна в коде на C++, разберем аспекты разработки плагина с помощью Clang API и протестируем плагин на реальных проектах.

Читать далее

Coroutines в C++20

Уровень сложностиСложный
Время на прочтение11 мин
Охват и читатели10K

В С++ 20 появились coroutines (далее буду называть их корутинами, по‑русски). Если кратко — они позволяют писать асинхронный код также как мы пишем синхронный. При этом асинхронный код это не обязательно должен работать с несколькими потоками. Асинхронным может быть код исполняемый в одном потоке.

Под капотом компилятора корутины — это просто синтактический сахар (syntax sugar). Т.е. корутины не создадут дополнительных потоков. Компилятор заменит корутины вызовом нескольких функций и не более того. Но давайте посмотрим как корутины выглядят в коде.

В этой статье я буду делать простейший таймер на основе корутин. При этом напишу классы, для Awaitable и Promise, которые необходимы для работы корутин.

Читать далее

Алгоритмы на графах

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели12K

Краткое и доступное руководство по базовым алгоритмам на графах: BFS, DFS, топологической сортировке и алгоритму Дейкстры. Чёткие объяснения, примеры и код на C++ — для тех, кто хочет быстро и уверенно освоить фундамент графовых алгоритмов.

Узнать больше об алгоритмах

Direct2D #4 Графика. Введение

Уровень сложностиПростой
Время на прочтение20 мин
Охват и читатели7.7K

Данная статья является вводной по графике в Direct2D, после неё вы узнаете что такое ресурсы зависимые от устройства и не зависимые. Научитесь выводить на экран любую сложную(2D) геометрию. Узнать теоретическую часть по выводу графики, что такое ID2D1Factory и остальные вводные вещи.

Читать далее

Эволюция подходов к написанию корутин от Си до С++20. Часть 1. Функция+макросы=корутина

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели7.7K

Когда речь заходит о корутинах (сопрограммах) на С++, большинство программистов вспоминает фреймворк coroutine_ts, появившийся в стандарте С++20. Многие даже не догадываются о том, что писать корутины можно было задолго до появления упомянутого стандарта. При этом можно было использовать не только С++, но и Си. Данной статьей я открываю серию, в которой хочу описать свой личный опыт изучения корутин и привести примеры их использования. Надеюсь мои статьи помогут начинающим разобраться в этой сложной и интересной теме.

Читать далее

Борьба с техническими долгами: как не допустить разрастания костылей в коде

Время на прочтение6 мин
Охват и читатели6.2K

Привет, Хабр! (И тебе, отчаянный страдалец, зашедший сюда в перерыве между дебагом очередного if (a == b) { return true; } else { return false; }. Мы знаем, ты не виноват, так вышло).

Каждый разработчик хоть раз в жизни прилаживал к своему коду «костыль». Знакомое чувство, правда?

Читать далее

Как построить открытую АСУТП. Настройка плагина протокола Modbus TCP/RTU Master/Slave

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.7K

Добрый день! Меня зовут Евгений Ионенко, я — руководитель направления в ИТ-команде «Северстали», занимающейся разработкой компонентов для открытой автоматизированной системы управления технологическим процессом (АСУТП). В марте этого года мы начали выпуск статей, посвящённых разработке компонентов открытой АСУТП, с предыдущей статьёй этого цикла можно ознакомиться здесь: Статья №3.

В этой статье я расскажу, как настраивать плагин протокола Modbus TCP/RTU Master/Slave на примере небольшого проекта.

Читать далее

Статические DAG-графы: почему TBB иногда избыточен и как сделать планировщик с гарантированным временем выполнения

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6K

Многие thread-пулы оптимизированы под динамический spawn и бесконечный backlog. В этой статье — подход для противоположного кейса: фиксированный DAG, один run и полный контроль над поведением

Читать далее

Быстрый старт контроллера шаговых двигателей SMSD–4.2CAN в режиме драйвера

Уровень сложностиПростой
Время на прочтение39 мин
Охват и читатели3K

Приводятся инструкции, которые помогут сделать первые шаги в экспериментах с контроллером в режиме драйвера шагового двигателя SMSD–4.2CAN под маркой НПО «Электропривод». Это настройка контроллера в режиме драйвера и запуск шагового двигателя с помощью программы CANopen Builder Limited v1.0, запуск двигателя из консоли, программ, написанных на языках С++ и Java, в которых потребуется библиотека CHAI для преобразователя интерфейсов USB–CAN ГКМН.468351.017-03 КБ «Марафон».

Первые две части представляют собой расшифровку лекций прочитанных Белобородовым А.В. и Харьюзовым П.Р. в 2024–2025 годах.

Читать далее

Самый обобщённый живучий алгоритм

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели2.1K

Путь от костылей к универсальному живучему алгоритму

В статье разбирается само устройство обобщённого алгоритма: как концептуально закладывать возможность учёта истории наблюдений, реконструкции мира и перебора альтернатив, чтобы ИИ-ассистенты/программисты могли реализовать эти механизмы под свои задачи. Детально разобран только универсальный перебор вариантов; реализация остальных особенностей предоставляется разработчику специализированное версии алгоритма.

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

Пропустить обложку через вентилятор

Fail Case: Реализация полиморфизма без virtual на C++: концепты, трейты и Ref (и почему я отказался от этого подхода)

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели3.5K

Как был переработан подход к полиморфизму в C++‑фреймворке Flox: замена virtual на статически сгенерированные vtable с концептами. В статье описана архитектура, проблемы, решение и метрики прироста производительности.

Читать далее

Ближайшие события

Тезисы о std::set и std::multiset в C++

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели2.9K

Приветствую всех читателей! Меня зовут Максим, и я хочу поделиться с вами своими знаниями о программировании. Я не являюсь профессиональным разработчиком, и программирование для меня — это хобби и способ автоматизации рутинных задач на работе. В этой статье я расскажу вам об ассоциативном контейнере std::set и std::multiset в C++. Надеюсь, что эта информация будет полезной и интересной для всех, кто хочет узнать что-то новое о программировании.

Ну давай, удиви меня

Фильтрация предупреждений PVS-Studio, выявляющих критические ошибки (согласно классификации ГОСТ Р 71207-2024)

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели735

ГОСТ Р 71207-2024 "Статический анализ кода" выделят класс дефектов в коде, называемых критическими ошибками. При разработке безопасного программного обеспечения (РБПО) такие дефекты должны в обязательном порядке выявляться и исправляться в приоритетном режиме. Статический анализатор PVS-Studio разрабатывается с учётом этого стандарта и позволяет выявлять все типы критических ошибок в коде программ, написанных на языках C, C++, C#, Java. Рассмотрим эти типы предупреждений и как их можно выделить среди других предупреждений, выдаваемых анализатором.

Читать далее

Netbeans 26 C++ (clang/clangd) + build system

Время на прочтение2 мин
Охват и читатели2.1K

Всем привет. Стал нужен IDE минимальный, и я вспомнил, что есть Нетбинс. Скачал мне он очень понравился - удобный, но чего-то не хватает.

Как сделать рабочим Нетбинс 26(с++, clangd), когда какой-то модуль, который раньше в плагинах работал теперь не работает. Давайте рассмотрим этот нюанс.

Читать далее

Необходимость статического анализа для РБПО на примере 190 багов в TDengine

Уровень сложностиСложный
Время на прочтение39 мин
Охват и читатели758

РБПО


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

Читать дальше →

Истинное предназначение пресетов в СMake

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели1.9K

Система сборки CMake имеет в арсенале достаточно мощный инструмент - пресеты, шаблоны, называйте как угодно. В данной статье будет рассмотрено применение пресетов на примере модульной библиотеки реализующей функционал engine-а для OpenSSL и описано как перенести опции для кросскомпиляции в пресеты.

Читать далее

Разбираемся с библиотекой libnl для управления трафиком в Linux

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели1.2K

В статье рассмотрим как реализовать команды утилиты traffic control  с помощью библиотеки libnl на с/c++. У libnl есть неплохая документация так же есть небольшое количество тестов. Которые помогают разобраться как работать с библиотекой.

Читать далее

Armadillo: матрицы, кубы и разреженные данные на C++

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели2K

Привет, Хабр!

Работа с матрицами в стандартном C++ — это боль, страдание и масса ненужного кода. Почему? Потому что стандартная библиотека STL вообще не предназначена для линейной алгебры. Например, если вы хотите умножить две матрицы, вам придётся писать кастомный алгоритм, отлаживать его, а затем ещё раз писать его, когда поймёте, что оптимизация не та.

Но есть библиотека Armadillo — и с ней всё иначе.

Читать далее

Вклад авторов