Обновить
206.77

C++ *

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

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

Множество Мандельброта — видео! 60 FPS и вращение палитры — анимация. И распараллеливаем. И суперсэмплингом. На C++

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

Множество Мандельброта. 60 fps. Вращение палитры - анимация. 256 цветов. Делал я. Сразу посмотрите на видео. Потому что не статичная а движется! И это - программа! Я сделал на g++. Свободно распространяемого компилятора языка C++. Почитайте! Очень интересно. Используя OpenMP, вы занимаетесь параллельным программированием на уровне многопоточности. И суперсэмплингом (антиалиасингом), выполняют сглаживание 8x8 (всего 64 прохода на один пиксель). Это позволяет получить плавные градиенты, которые 24-битного цвета TrueColor! И как делать видео с 255 файлов bmp - TrueColor анимация.

Читать далее

Новости

Универсальный компилятор для FPGA, который понимает 42 языка программирования

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

Универсальный компилятор для FPGA, который понимает 42 языка программирования

Пишите код на любимом языке — получайте работающий Verilog для FPGA. Бесплатно, без vendor lock-in.

Читать далее

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

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

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

Недавно случайно в мои руки попали два дешевых IoT-модуля от одного китайского производителя, которые были куплены в сети DNS. Раз попали в руки, нужно их использовать. Вот только есть одна проблема: все подобные устройства работают через облачные сервисы. В своей домашней автоматизации я придерживаюсь жёсткого правила — никаких облачных сервисов в моём умном доме! Поэтому достаём из ящика программатор с паяльником и за дело! А что из этого вышло, читайте далее.

Читать далее

Make DLL Hijacking Great Again

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

DLL hijacking - техника, которая может дать множество преимуществ: повыситься до NT AUTHORITY/SYSTEM, получить исполнение от лица привилегированного пользователя, действовать от лица легитимного приложения и т. д.

Естественно, перед тем как ее осуществить, нужно найти подходящее приложение и библиотеку, которую можно подменить.

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

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

Читать далее

Кастомные аллокаторы для игровых движков: arena, pool и slab на C++

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

Стандартный malloc — универсальный инструмент, но в геймдеве универсальность часто означает «недостаточно быстро». Когда бюджет кадра 16 мс, а каждый кадр рождаются тысячи объектов, имеет смысл разобраться в специализированных аллокаторах.

Рассмотрим три основных типа: arena, pool и slab — когда какой использовать, как реализовать, и какие подводные камни ждут.

Смотреть реализацию

Нескучное программирование. И снова ограничения

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

Хотя концепты действительно являются мощным и выразительным инструментом, у них есть принципиальные ограничения, о которых важно знать, чтобы не пытаться использовать их не по назначению. Эти ограничения не случайны и не являются «недоделками» языка, а отражают осознанное архитектурное решение, принятое комитетом C++.

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

template<typename T>
concept Recurse = Recurse<T>;

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

Читать далее

Заметки на полях: Изолируем Lua окружение в C++ приложении

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

Скриптовые языки уже давно и прочно заняли свою нишу в игрострое — они существенно упрощают описание игровой логики, уровней, ресурсов, диалогов, квестов, UI и чего только не. Что позволяет отдать эти задачи целиком и полностью в творческие руки гейм-/левел-/прочих-дизайнеров и других членов команды, которым не нужно обладать знаниями в том же C++. Разделение ответственности, ускорение разработки, облегчение моддинга возможность, по завершению разработки самого движка, вышвырнуть программистов на мороз и стричь купоны на бесконечных дополнениях — в общем, одни только плюсы. Да?

Да.

А ещё дыры в безопасности и ...

... уйма путей уронить стабильность.

Передача JPEG-видео по RTP/UDP на ESP32 (RFC 2435)

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

В этой статье я разберу, как реализовать передачу JPEG-видео по RTP поверх UDP напрямую с ESP32 - так, чтобы поток открывался в VLC и ffplay, без RTSP, FFmpeg и промежуточных серверов.

Читать далее

Как подружить С++ и YAML: сохранение конфигов с помощью yaml-cpp

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

В этой статье речь пойдет о добавлении в С++ приложение функционала сохранения данных в формате YAML с использованием библиотеки yaml-cpp. Мы подробно рассмотрим какие возможности для этого предоставляет библиотека и на какие подводные камни можно наткнуться в процессе ее использования.

Особое внимание будет уделено вопросам форматирования(и представления) выходного YAML-текста, поскольку это влияет как на восприятие конечного YAML-документа человеком, так и на совместимость с другими программами, парсеры которых могут хуже поддерживать спецификации YAML.

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

Читать далее

Как вжарить на С++ 23 или захватываем больницу и переписываем рантайм под Windows 95 и точка

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

Приветствую, Хабравчане!

Предлагаю вам окунуться в чарующий мир С++ 23 на Windows 95. Напишем минимальную стандартную библиотеку. Будем использовать современные фичи в коде.

Расскажу как это все работает и для чего это нужно. Старичок SDL 1.2 ещё многое может. Будем использовать его для написания тонкого слоя для графики.

vector::_M_range_check: __n (which is 10)

Не бойтесь std::set, его легко приручить

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

Не бойтесь std::set, его легко приручить.

Эта небольшая статья для тех, кто имеет некоторое представление об ассоциативных контейнерах стандартной библиотеки C++ (std::map, std::set и т.д.), но пока не использовал «множество» (std::set) в повседневной жизни. Этот контейнер позволяет наиболее изящно организовать коллекцию «самоидентифицируемых» объектов, не трубующих внешнего «ключа» для поиска. Но работа с std::set имеет свои особенности, о них и пойдет речь. Каких-то принциапиальных открытий статья не содержит, я просто решил собрать в одном месте некий минимально необходимый набор приемов для работы со множествами и, таким образом, несколько сэкономить время читателя, впервые решившего использовать «множества» в реальных проектах. Сразу оговорюсь, я сознательно снизил планку стандарта C++ до минимально необходимой, чтобы код, приведенный здесь, мог использоваться максимально широко (так что просьба не удивляться громоздким «устаревшим» конструкциям вроде enable_if).

... Отлично, std::set — это то, что нужно! Зачем мне std::map, если ключ уже находится внутри моего объекта! Такова была моя первая восторженная реакция после знакомства с «множеством» (std::set) стандартной библиотеки шаблонов C++. Это было давно... очень давно.

Читать далее

Direct 2D #7. Всё о тексте (От А до Я)

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

Это экспериментальный формат, главная цель объяснить как отобразить текст, но а дальше идёт полный перевод* всех интерфейсов и функций DirectWrite с примерами.

Читать далее

Я написал компилятор на C++ при помощи LLVM

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

GitHub

Onyx — язык программирования, нацеленный на базовую безопасность памяти, приятный синтаксис и опыт использования. Onyx написан на C++ с компиляцией на базе LLVM. На момент написания статьи язык поддерживает:

Читать далее

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

Шпаргалка по инференсу на С++

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

Если ты только погружаешься в работу с инференсом на C++ и тебе интересно получить представление о том, как можно собирать и запускать популярные ML-библиотеки, то я рад поделиться базой, которую я использую в своих проектах.
Здесь ты найдёшь простые проекты, решающие основные ML-задачи, и немного теории к этому коду.
Надеюсь, что приведённый код может стать первой рабочей версией для новых фич в твоих проектах.

Читать далее

Три вечера, три круга ада и один MVP: как я создал анализатор памяти игры с помощью бесплатных чат-моделей

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

В эпоху ИИ-хайпа многие обещают, что теперь кодить не нужно — достаточно «поговорить» с моделью. Автор решил проверить это на практике: за три вечера, используя только бесплатные версии Claude и Qwen, он создал прототип приложения для мониторинга игровых событий в реальном времени через чтение памяти процесса Royal Quest.

Путь оказался тернистым: от неактуальных логов и зашифрованного трафика — к CheatEngine, Wine на macOS, PyInstaller и проблемам с кодировкой. Чат-модели помогли быстро сгенерировать ядро приложения, реализовать экспорт в JSON/TXT и даже простой дашборд, но каждая итерация сопровождалась багами, потерей контекста и переписыванием кода с нуля.

Делюсь честным опытом: где ИИ действительно ускорил разработку, а где превратил её в бесконечный цикл «запрос → правка → провал». В финале — практические рекомендации: как структурировать проект для ИИ, сохранять контекст и избегать типичных ловушек.

Результат — рабочий MVP, открытый на GitHub, и убедительный вывод: ИИ — мощный соавтор, но пока ещё не замена внимательному разработчику.

Читать далее

Разработка библиотеки ленивых строк в паре с ИИ

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

Еще одна библиотека строк для Python? Легко - если у вас есть ИИ-помощник.

Рассказываю, что хотел сделать (действительно, ленивые строки), что получилось, как использовал ИИ, с какими проблемами столкнулся, какие выводы для себя сделал.

Читать далее

Как не сломать VCL, делая кастомный контрол

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

Вы когда-нибудь копировали код кастомного контрола из статьи, чтобы избавиться от мерцания, а потом обнаруживали, что он ломает совместимость, требует специфичных обработчиков и не работает в условной компиляции?
Я — да. И, как оказалось, проблема не в Windows API или GDI, а в фундаментальной ошибке проектирования: попытке «улучшить» стандартный интерфейс VCL, изменив сигнатуру OnPaint.

В этой статье я объясню, почему передача Canvas и Rect в обработчик — плохая идея, как правильно расширять TWinControl, и почему лучший компонент — тот, который пользователь даже не замечает.

Читать далее

Python без Python: как запускать код где угодно

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

Команда Python for Devs подготовила перевод статьи о том, как можно компилировать Python в быстрые, кроссплатформенные исполняемые файлы без изменения исходного кода. Автор подробно разбирает архитектуру компилятора, объясняет, зачем «понижать» Python до C++, как типы позволяют «приручить» динамику языка и почему эмпирическая оптимизация даёт лучший результат, чем ручной тюнинг.

Читать далее

Нескучное программирование. Иерархия концептов

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

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

Как компилятор выбирает лучшую перегрузку, если подходящих вариантов несколько? Интуитивно мы ожидаем, что более «точная» функция должна иметь приоритет над более общей и часто это ожидание мы переносим в правила для компилятора при написании шаблонов и ограничений. Общая идея здесь следующая: перегрузки можно не просто перечислять, а выстраивать в иерархию по степени специфичности, тогда одни функции будут описывать широкий класс типов, другие его подмножество, и, когда тип аргумента известен, компилятор должен выбрать ту функцию, чьи требования наиболее точно соответствуют этому типу. Эта логика заложена прямо в стандарте C++ и называется partial ordering, то есть частичный порядок, потому что не все перегрузки обязательно сравнимы между собой.

Немножко сложности...

Почему ваш бектест врёт на 50%, и при чём тут выбор между Python и C++

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

Sharpe 2.1 в pandas-бектесте, через три месяца реальной торговли упал до 0.3

Pandas-бектесты систематически завышают доходность на 30-70%. Одна строчка с shift(-1) и вы уже используете завтрашние данные для сегодняшних решений. Плюс survivor bias, плюс нереалистичные fills.

В статье разбираю источники look-ahead bias, сравниваю vectorized и event-driven подходы на данных MOEX (SBER, GAZP, LKOH за 2020-2024), мои замеры latency для Tinkoff API, и рассуждения о том, когда Python уже не вывозит и пора думать про C++

Читать далее
1
23 ...

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