Обновить
296.74

C++ *

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

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

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

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


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

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

Читать далее

Новости

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

На заре двухтысячных интернет довольно сильно отличался от того, каким мы знаем его сейчас. Но многое изменилось с появлением 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 мин
Охват и читатели7.1K

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

Уровень сложностиСредний
Время на прочтение2 мин
Охват и читатели8.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 мин
Охват и читатели14K

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

Уроки французского и пересоздание данных для изучения иностранного языка с помощью обучающей программы «L'école»

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

Введение

Обучающая программа «L'école» (см. мою статью: «Роль данных при изучении иностранного языка» – https://habr.com/ru/articles/930868/ ) предназначена для освоения иностранного языка по методу: «Запоминание руками + интерактивный звук + чтение по слогам + буквальный контекстный перевод». Саму программу и демо-данные к ней, на разных языках, можно непосредственно скачать из: https://disk.yandex.ru/d/5yjYP4JP1aVnIw .

И, если с обучающей программой, более-менее, всё понятно, то по данным (компьютерным урокам) остаются некоторые вопросы.

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

Как известно, изучение иностранного языка предполагает четыре навыка:

1. Понимание письменной речи.

2. Понимание устной речи.

3. Умение писать.

4. Умение говорить.

По сути, они, очень грубо, распадаются на две большие группы:

1. Звук и

2. Текст.

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

Экспериментируя с изучением французского языка, я пришел к выводу, что хорошо работают следующие навыки:

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

Читать далее

Проблема Гильберта №24 в геймдеве: Как типобезопасная физика сделала Radiosity легче перышка

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

Вероятно, все знают про 23 проблемы Гильберта, определившие развитие математики XX века. Но мало кто знает, что в черновиках великого немца была 24-я проблема: она касалась критериев простоты доказательства и поиска наиболее прямых методов решения задач.

Читать далее

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

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

В теории я бы хотел сделать ОС на современном C++ — с умными указателями, лямбдами и прочими красивостями. А на практике пока что научился выводить текст прямо в видеопамять. Но это же и есть самый честный low-level — когда ты по-настоящему чувствуешь, как железо оживает от твоего кода.

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

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