Обновить
256K+

C++ *

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

229,08
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Рецензия на книгу «Qt 6.9. Профессиональное программирование на C++»

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

Июль в блоге SSP SOFT — месяц обзоров на книги по языкам семейства С. Сегодня рецензия на очень объемную книгу по С++. Качественных книг по Qt на русском языке немного, и тем заметнее новое издание Макса Шлее «Qt 6.9. Профессиональное программирование на C++». В книге тысяча страниц, десять частей, от сигналов и слотов до Qt Quick, мобильной разработки под iOS и отдельной новой части про работу с ИИ-ассистентами. Для студентов и начинающих разработчиков (джунов), выбирающих между C++ и C#, или уже пишущих на C++, эта книга — редкий по охвату вход сразу в Qt и в саму индустрию кросс-платформенной разработки.

Читать далее

Что означает «контролируемый ИИ-агент»: разбираем 6 уровней контроля

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

«Дайте агенту доступ к терминалу и файловой системе, и он сам всё сделает» звучит привлекательно ровно до первого случая, когда агент вместо тестового файла отредактировал конфиг продакшена, или переписал файл с ключами API, потому что тот «мешал» задаче. После этого в компании обычно появляется вопрос от безопасника или тимлида: а как мы вообще контролируем, что этот агент делает с кодом?

Проблема в том, что «контроль над агентом» - это не один переключатель в настройках. Это набор независимых механизмов, каждый из которых ограничивает что-то своё: что агент видит, куда может писать, насколько самостоятельно действует и кто проверяет результат. «Разберём эти механизмы по отдельности на примере того, как это устроено в Veai — агенте, который работает и в OpenIDE, и в JetBrains IDE; в статье возьмём плагин для JetBrains IDE, потому что на нём проще показать конкретные экраны и файлы: так проще говорить предметно, а не абстрактно.»

Читать далее

Парсер C++ на своем DSL: попытка обогнать компилятор

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

Проекты растут. Кодовая база растёт. Время компиляции растёт вместе с ними и переходит все границы разумного.

В какой-то момент я решил: а что если попробовать написать свой компилятор? Пока только для разработки, не для прода. На замену Clang++/G++/CL.EXE.

Эта статья — о первом шаге на этом пути. О парсере C++, который я написал на своём DSL специально сделанном для этого изначально.

Матчинг запущен? Кооперация предложена?

После многих лет борьбы я получил ещё один шанс: Deep Brain Stimulation — Abbott Libberta RC

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

Меня зовут Станислав Герасимов. Я программист С++/Qt, а также Go и выпускник магистратуры НИУ ВШЭ. С детства живу с тяжёлым неврологическим заболеванием — вторичной генерализованной дистонией с выраженными гиперкинезами. После многих лет лечения, нескольких нейрохирургических операций и многочисленных отказов в дальнейшем лечении в России я прошёл повторную операцию глубокой стимуляции мозга (DBS) в Турции у профессора Аттилы Йылмаза. На этом сайте я делюсь своей историей, рассказываю о лечении, программировании DBS, реабилитации, жизни с неврологическим заболеванием, а также о работе в сфере информационных технологий. Надеюсь, мой опыт окажется полезным и поддержит тех, кто также продолжает бороться за своё здоровье и качество жизни.

Читать далее

DIY и C++ в системе охлаждения кур

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

Расскажу о проблеме с электронным регулятором давления, которая возникла после запуска системы охлаждения куриных тушек, и как проблема была решена.

Читать далее

Take - минимальная система сборки на C++ с конфигом на TOML вместо Makefile

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

Я создал свою небольшую систему сборки проектов использующая TOML для конфигурации процесса сборки, на C++ 17

Читать далее

За пределами QNetworkAccessManager: проектируем типобезопасный HTTP Runtime для Qt на C++20

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

В статье рассматривается реализация типобезопасного HTTP runtime поверх QNetworkAccessManager и современного C++20. Разберём использование сoncepts для проверки контрактов Request/Response на этапе компиляции, поддержку QFuture и callback API, реализацию retry-политик с exponential backoff, выделенный поток обработки сетевых запросов, а также механизмы управления жизненным циклом задач и graceful shutdown.

Читать далее

Вышел открытый игровой движок Godot 4.7 — подробный обзор нововведений

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

Godot — это 2D/3D игровой движок с открытым исходным кодом по лицензии MIT и большим сообществом, поддерживающий основные настольные и мобильные ОС, VR и веб (приставки с помощью сторонних компаний), ядро написано на C++, для скриптов поддерживается GDScript и C#, возможно подключение модулей практически на любом языке вплоть до Rust через GDExtension. Примеры игр — видеообзор 2025 года, 2024 года, 2023 года. Версия 4.7 вышла 18 июня 2026 года. Основные нововведения: поддержка HDR, магазин ассетов Asset Store, предпросмотр текстовых операций с шейдерами, новая нода для прямоугольных источников света, смещение трансформации нод Control, простой способ рисовать на текстурах, возможность создавать игры полностью на Android. Далее сделанный человеком (весь жирный шрифт проставлен вручную) перевод официального обзора нововведений с доступными объяснениями для новичков и ссылками на PR с исходным кодом на C++ для профессионалов.

Добро пожаловать в магазин ассетов. Библиотека ассетов была полезна, но отслужила свое. Пришло время уступить место новому Asset Store. Обновление привносит некоторые изменения, делающие просмотр ассетов более простым и приятным. Мы улучшили отображение ассетов и теперь вы можете увеличивать картинки из описания. Возможно вы не заметили, но что, если вы теперь можете видеть оценки ассетов? Потерялись в толпе бесконечных плагинов? Не уверены, как ориентироваться в свойствах объемных ассетов? Ответ уже здесь, прямо в магазине. За кулисами мы реализовали многопоточность. Теперь магазин ассетов может проводить определенные операции в фоновом режиме, не блокируя основной интерфейс редактора. Пока вы изучаете свой набор ассетов, кто-то расчищает путь и убирает помехи, чтобы вам было проще разобраться в происходящем. Загляните в магазин ассетов. Подробнее в PR. Авторы: Michael Alexsander

Читать далее

Жертвы чистого кода

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

В индустрии разработки игр (а может софта и вообще) живёт очень удобная идея, которой многие оправдывают лишние слои логики и абстракции. Звучит она примерно так: «Я хочу, чтобы сам процесс создания игр был проще, приятнее и продуктивнее и готов пожертвовать 10% производительности ради этого» — Тим Суини.

Аргумент хорош, обещает за небольшую цену красивых абстракций, паттернов и фичей языка позволить программисту быстрее производить «плохой» код, плохой в смысле медленный, но который делает ту же полезную работу, что и альтернативный хороший, но нечитаемый и сложный для понимания. Для бизнеса это выгоднее, хотя по моему опыту, бизнесу глубоко пофиг на количество написанных конкретным Джоном, Ваней или Вапуром строчек кода, его сложность или наличие в нем абстракций, там совсем другие метрики «хорошести», пусть и в ущерб качеству итогового результата.

Сразу оговорюсь, что под «плохим кодом» я не имею в виду то, что программист видит у себя в редакторе. Там как раз может быть красота, ровные отступы, говорящие имена, абстрации и документация. Но я говорю о реальном коде, который фактически крутится на процессоре или видяхе у игрока, и который превращается в просадки фреймрейта, в полминуты загрузки уровня и в взлетающие вентиляторы.

Статья родилась после очередного приступа клинокодомании в отдельно взятой студии, когда кто‑то в очередной раз увидел и притащил всем известную книгу Мартина о достоинствах этой самой клинокодии. Но «Clean Code», тот что с заглавной буквы и тысячными тиражами, вовсе не «чистый код» в бытовом смысле, потому что Мартин придумал этот бренд, ярлык, и несколько лет пестовал его на конференциях, связав свое имя и это понятие. Правильнее было бы называть это «стиль мистера Мартина» или «стиль Дядюшки Боба», и тогда половина споров о важности книги отваливается сама собой, потому что спорить приходится уже не про абстрактную «чистоту», а про конкретные наборы приёмов конкретного автора. Та дискуссия с технической стороны так и не получила внятных результатов, потому что на третьем круге обсуждения в ход шла риторика и подмена понятий вроде «clean» (хороший, годный), который начал превращаться в «Clean» (по методичке), и обратно.

Читать далее

Я разобрал игру своего детства: многозадачность из 1990-го, потерянный язык уровней, виртуальные машины и тайм-капсула

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

В 1990-м Titus выпустила Fire & Forget II: гонку, где спорткар с пулемётом умеет взлетать. Я гонял её ребёнком с одной дискеты, а недавно полез внутрь её бинарника, просто посмотреть, как она устроена. Внутри оказалось неожиданно много: кооперативная многозадачность на голом 8086, собственный скриптовый язык с французскими мнемониками, две виртуальные машины, исполняющие один и тот же байткод, и полминуты игры самого разработчика, спрятанные в демо-записи. Их не видел никто и никогда. По дороге игра пересобралась на C11 и теперь живёт в браузере: не трогайте клавиатуру в меню, и увидите то самое демо. Но статья не про порт:

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

Читать далее

archcheck — на страже архитектуры C++

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

Открытый чекер архитектуры C++ для CI: циклы, копипаст, распухшие заголовки — в каждом PR. Плюс замер на 484 500 коммитов в поисках архитектурного дрейфа

Почему ревью это пропустило

Полностью нечестное сравнение std::expected в C++23 и core::result::Result в Rust

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

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

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

Читать далее

Подключение вакуумного люминесцентного индикатора (ВЛИ) типа ИВЛ1-8/13 от старого кассового аппарата АМС-100Ф

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

Как оживить старый ВЛИ (VFD) без родной электроники? В этой статье разберем подключение неизвестного дисплея, управление сетками и сегментами, работу с высоким напряжением и создание собственного драйвера на Arduino Nano, который позволит управлять индикатором через Serial‑порт.

Читать далее

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

OSDEV: Itanium часть 2: One-time Construction API и сигнлтоны Майерса

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

Приветствую!

В этой части мы рассмотрим что такое guard variables и как под капотом работают синглтоны Майерса.

И так, стандарт начиная с С++11 гарантирует нам что локальные статические переменные инициализируются потокобезопасно. Но кто и как это обеспечивает? Это делает ABI.

И все таки о чем же идет речь? Представьте себе что есть вот такая структура:

Читать далее

Когда может пригодиться экзотика в ООП: миксины/трейты/аспекты

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

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

Читать далее

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

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

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

Читать далее

Технология ELAM: как детектируются уязвимые драйверы Windows

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

На дворе 2026 год, технологии развиваются, а хакеры становятся сильнее и изобретают новые способы обхода средств безопасности. Один из таких методов, который уже стал классикой в 2026 году — это BYOVD‑техника (Bring Your Own Vulnerable Driver). Суть проста: атакующий подсовывает в систему легитимный, но уязвимый драйвер, чтобы использовать его как рычаг для отключения защиты(например, чтобы убить процесс антивируса). То есть, в процессе атаки через BYOVD у хакера всегда есть уязвимый легитимный драйвер, но его ищут двумя путями.

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

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

Используется эта техника потому, что современные антивирусы стали слишком сильными. Если посмотреть под капот любому актуальному хорошему защитнику, мы увидим там как минимум 4 собственных драйвера, которые контролируют процессы, следят за подключением разных физических устройств (USB), следят за тем, чтобы вредоносный процесс не смог проэксплуатировать какую‑то уязвимость(например, подмена токена у системного процесса на свой).

Исходя из всего, что я описал выше, возникает логичный вопрос: как мы можем пресекать способы эксплуатации системы через BYOVD‑драйверы? Ответ на этот вопрос прост — нам нужна технология ELAM.

Читать далее

Как я делал компактную библиотеку для создания приложений с графическим интерфейсом на языке C++. Часть 3

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

Это третья статья из цикла статей о создании компактной кросс‑платформенной библиотеки для разработки приложений с графическим интерфейсом на языке C++ — Frenchie. Для тех, кто привык изучать исходный код самостоятельно, репозиторий с исходным кодом библиотеки можно найти по ссылке. В данном материале я продолжу рассказывать про ту часть библиотеки, которая управляет состоянием контекстного окна и отслеживает связанные с ним события.

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

Читать далее

Stream compaction на NEON. Векторизуем copy_if

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

Как разогнать copy_if на NEON в 30+ раз без единой ветки в горячем цикле — эмулируем compress инструкцию, которой в NEON нет, через table lookup и немного битовой магии.

Читать далее

Как я делал компактную библиотеку для создания приложений с графическим интерфейсом на языке C++. Часть 2

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

Это вторая статья из цикла статей о создании компактной кросс‑платформенной библиотеки для разработки приложений с графическим интерфейсом на языке C++ — Frenchie. Для тех, кто привык изучать исходный код самостоятельно, репозиторий с исходным кодом библиотеки находится по ссылке. В данном материале я расскажу, про ту часть библиотеки, которая управляет состоянием контекстного окна и отслеживает связанные с ним события - platform backend.

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

Читать далее