Обновить
256K+

C++ *

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

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

ECS with Sectors (ECSS) — структура памяти в моей ECS

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

Всем привет! Это продолжение статьи про мою ECS в моём движке Stellar Forge, и сегодня я хочу поднять тему архитектуры и немного более подробно раскрыть data oriented design в контексте ECS.
Первую часть можно найти здесь - https://habr.com/ru/articles/972708/ .

Итак, ECSS - Entity Component System with Sectors. В прошлой статье я описал что такое ECS и как его можно приготовить, а сегодня я расскажу вам в чем особенность моей ECS, что такое Sector, как эти секторы хранятся в памяти и что делает мою ECS такой быстрой.

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

Читать далее

Два притопа, три прихлопа

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

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

Все, что связано с картинкой, сделать не так уж сложно. Это довольно подробно описано в цикле статей по реализации графики в ВКПа (см. [2]). Для этого, во-первых, нужно создать графическое окно, установив данную картинку в качестве фона. Во-вторых, воспользоваться существующими заготовками контролов (элементов графического интерфейса), которые необходимо будет разместить на данном фоне.

Читать далее

SFINAE в C++

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

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

Сегодня я хочу поговорить про SFINAE, загадочную аббревиатуру из C++. Расшифровывается SFINAE не менее загадочно: Substitution Failure Is Not An Error, по-русски: «неудавшаяся подстановка — не ошибка». Сейчас рассмотрим, почему это правило появилось, как оно работает и как мы можем использовать его себе во благо.

К механике SFINAE

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

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


Это третья статья из цикла по разработке ОС на С++. В данной статье я познакомлю читателя, с прерываниями x86 реализуем ее поддержку. Добавим работу с клавиатурой. Познакомимся с такими устройствами как PIC и напишем код для работы и инициализации. Я так же буду делать упор, на абстракцию и высокоуровневый код.

Заходите будет интересно.

Читать далее

Как же лень работать рутинку в AD

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

Не так давно я поймал себя на мысли, что работа в Altium Designer перестала "доставлять".

Толи это произошло после ролика, где нейросетью сгенерировали некую плату и "скоро так будет со всеми" толи очередной кризис на фоне... Возраст вроде рановато, еще год запаса...
Короче раз уж первые 40 лет детства самые сложные в жизни мужчины то наверно спишу на ребячество и инфантилизм.

Итак! подоплека простая. Мне лень склеивать локальные библиотеки! На этот факт повлияла работа в АО Лазерные системы с уважаемыми людьми, которые внедрили Союз PLM от КБ 2.0 (если все верно помню) и за год плодотворной отладки системы... я убедил себя в том, что работать нужно не 12 часов, а головой!

Внезапное, однако, озарение. И так уж сложилось, что моя супруга пожелала съехать из квартиры в Санкт-Петербурге в другую. В квартиру в Москве! И вот мы уже в Златоглавой и белокаменной, кайфуем и переезжаем с района в район чтобы прочувствовать WIBES и подобрать себе по душе местечко. Работу нашел как раз для души в RQC в хорошей компании, занимающейся лидарами как и ЛС (Laser systems).

Нука-нука, что там у тебя...

Эволюция подходов к написанию корутин от Си до С++20. Часть 3. Использование сопрограмм при обработке событий в Linux

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

В предыдущей статье я рассматривал различные способы организации стековых корутин в языке Си. Эти сопрограммы имели чисто учебное значение так как вряд ли кто-то будет создавать генераторы последовательностей при помощи сопрограмм. Сегодня рассмотрим как писать стектовые корутины на С++ и создадим на их основе tcp сервер, обрабатывающий запросы от клиентов на основе опроса событий с использованием API мультиплексированного ввода-вывода epoll. Данная тема, на мой взгляд, является ключевой для понимания того, как функционируют современные серверные приложения, написанные при помощи таких библиотек как Boost Asio.

Читать далее

Насколько полезны объяснения кода от SourceCraft?

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

Недавно на Хабре появилась функция "Объяснить код с SourceCraft", реакция на которую была неоднозначна из-за довольно странного решения сделать эту функцию обязательной, а не опциональной. Мусолить эту тему особо желания нет, а вот пройтись по существу хотелось бы, потому что как мы все знаем LLMки довольно хороши в коде, который уже миллион раз был выложен в открытый доступ, но вот со всякими редкими штуками есть проблемы, а еще они позвиздеть любят. В этой статье распишу как я прошёлся по сниппетам кода в двух своих статьях на хабре, попросил SourceCraft пояснить сломанные варианты этих сниппетов, и что из этого вышло. Спойлер: результат лучше, чем я предполагал, штука определённо полезная если использовать с умом.

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

Читать далее

Direct2D #5. Продолжение темы геометрии ID2D1Geometry и дочерние классы

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

Продолжаем рассматривать инструмент для манипуляций с геометрией в Direct2D. Просто и понятно.

Читать далее

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

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

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

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

Flash был за пределами браузеров в нулевые, а мы и не знали. Как он использовался в DirectX играх

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

На заре двухтысячных интернет довольно сильно отличался от того, каким мы знаем его сейчас. Но многое изменилось с появлением Swf.

В 2004 был (разработан) выпущен новый стандарт скриптового движка Action Script 2.0.

Но были и те-кто додумался "сделать из буханки" - трамвай (но зачем?)

Test Drive Unlimited (2006)

тропический остров в океане

французские разработчики Test Drive Unlimited применяли его в своем движке Twilight, написанного на Visual C++.

Twilight применялся и в других играх компании, например в сиквеле - TDU2 и Alone in the dark (2008)

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

Читать далее

Пишем свой кодек для JSON с фиксированной схемой: опыт разработчика и сравнение производительности

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

Привет, Хабр! Я Никита Пешаков, ведущий инженер-программист в компании YADRO. Шесть лет работаю в телеком-направлении, а прямо сейчас разрабатываю ядро опорной сети 5G. Хочу поделиться, как в нашем продукте мы кодируем и декодируем JSON, и сравнить бенчмарки нашего кодека с библиотекой Glaze.

Читать далее

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

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

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

Читать далее

От MOS6502 к x86: эволюция эмулятора микропроцессоров

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

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

Читать далее

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

Эксплуатация уязвимости race condition CVE-2025-29824 в Windows

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

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

Эксплуатация уязвимости типа use after free в ядре Windows и без того непростая задача, но когда к этому добавляется состояние гонки (race condition), сложность возрастает на порядок. CVE-2025-29824 — наглядное тому подтверждение, однако, как будет продемонстрировано ниже, создание рабочего эксплойта для нее — достижимая цель.

Читать далее

Подключение ЖК дисплея POS терминала Ingenico IPP320 к Arduino (ESP32)

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

В Ingenico IPP320 установлен графический 128х64 монохромный ЖК дисплей с белой подсветкой и диагональю примерно 2.8 дюймов. Он устанавливался и в другие устройства и также известен как:
LBL-VLFM1574-02C
LBL-VLFM1574-02B
COG-VLFM1574-05
WU3540C-01 B
WU3540B-01

Конкретно мой дисплей я получил из терминала оплаты Ingenico IPP320. Терминалы эти, при покупке на вторичном рынке, как правило, уже сами заблокировали себя, так что чтобы использовать их напрямую даже в любительских целях, потребуется дорогостоящая разблокировка производителем. Такие терминалы можно найти за достаточно низкую цену на Авито и других площадках. Я, например, нашел новенький Атол 60Ф за 340 рублей. Разобрав, потыкав осциллографом и мультиметром, я подключил ESP32 между платой терминала оплаты и дисплеем. Попутно накидал следующую распиновку коннектора:

Читать далее

Не паникуй, ты просто попал в AA+ игрострой

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

Эту статью я написал лет десять назад, когда только попал в большую студию EA SpB. И забыл бы про нее, но недавно проводил ревизию заметок и набросков на старом HDD и решил, что она до сих пор актуальна, разве что цифры выросли. Тогда проекты под миллион LoC казались гигантами, наверное это и сейчас очень много, но теперь это это просто код движка. Но суть не изменилась, просто цифры выросли.

Помню тот день, когда я впервые сел за рабочий стол в офисе, а до этого делал другие проекты и кодовая база размеров 100к строк вместе с либами, движком и логикой казалась - ну очень немаленькой. А тут скачал репозиторий, открыл идеешку, и она минут на пятнадцать подвисла на индексировании файлов. Я смотрел на всё это безобразие и думал: «Это нормально? Мне дали самый отстойный джунский комп? Я что-то сломал уже на онбординге? Мы все умрем?» Нет, всё было нормально, просто я впервые столкнулся с промышленной кодовой базой большого проекта.

Команда в тот момент выкатывала мажор Sims Mobile, который зафейлили почти на месяц и, честно говоря, на нормальный онбординг ресурсов просто не было. ПМ выдал мне простую задачу на разгон, так сказать, чтобы стулья в редакторе дома сохраняли свое положение и размер между запусками, потому что они, как вы наверное догадались - этого не делали и оказывались в дефолтных точках спавна. Звучит элементарно, правда? Сохранил координаты в конфиг, прочитал при старте и таска готова. Вот только я понятия не имел, где искать код этого сохранения конфига, объектов, как называется класс, где лежит конфиг и сами стулья, и есть ли вообще система для таких вещей или надо писать с нуля. Небольшой спойлер, системы не было, все объекты в доме всегда спавнились в тех точках, где их поставил дизайнер, т.е. для редактора дома сейва не было, а для игры был.

Добро пожаловать в семью

Введение в атомики. C++

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

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

Читать далее

Гибкая ECS с кастомными layout-профилями: как я строил ECSS внутри своего игрового движка

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

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

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

Что такое ECS - Entity Component System (Сущность Компонент Система) - архитектура хранения данных, где логика - системы, явно отделена от данных - компонентов, которые объединены одним общим id - сущностью.

В двух словах, идея ECS заключается в том, чтобы навести порядок в игровом коде, и игровом мире - выделить все данные игровых объектов(сущностей), и желательно сделать это data-oriented (почему желательно я расскажу ниже).

Предположим, у вас в игре есть объект КУБ - квадратный, все стороны равны, все углы равны, классический такой КУБ. У него есть положение в мире (Transform) у него есть его кубический меш (Mesh), он умеет быть отрендеренным (IsRenderable), и, ко всему прочему, он еще и обладает какой-то своей кубической физикой (Physic).

Читать далее

Как попасть в мир олимпиадного (спортивного) программирования? Спорт для ума, который меняет мышление

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

Олимпиадное программирование — это спорт для ума, который прокачивает алгоритмическое мышление, скорость и выдержку. Разбираем, с чего начать, какие навыки нужны, почему для соревнований чаще выбирают C++ и какие ресурсы помогут подготовиться школьникам, студентам и взрослым новичкам.

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

Читать далее

Марсианские страсти: DOS, любовь и С++

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

У нас было 640Кб памяти, CGA-экран, 20-мегабайтовый диск и целых четыре мегагерца тактовой частоты. А еще старые пятидюймовые дискеты на 360кб. Не то чтобы это был необходимый набор для современного разработчика C++, но если уж начал коллекционировать дичь, то сложно остановиться..

Читать далее