Обновить
302.72

C++ *

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

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

librats: Выпуск версии 0.5.x. Ускорение поиска пиров, алгоритм spider, поддержка JavaScript, Python и многое другое

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

Привет! Работа над ядром поисковика rats-search продолжается. Новая версия библиотеки librats (v0.5.3) приносит важные архитектурные улучшения для построения распределенных сетей в условиях NAT и блокировок.

Ключевые изменения:

Унифицированный API (FFI): Завершена интеграция с Node.js. В отличие от фрагментированных реализаций libp2p, librats предоставляет идентичный набор функций для C++, Python, Node.js и Android через FFI.

Эффективный DHT:

Реализован алгоритм Spider для прибегания с сбора announce.

Добавлена поддержка branch-factor и маршрутизации на основе задержек (RTT-routing).

Персистентность: Routing-таблицы сохраняются при перезапуске, что критически важно для связности сети в сложных сетевых условиях.

BitTorrent: Значительный рефакторинг и оптимизация модуля.

Платформы: Windows (x64), Linux (x64), Android (32/64), macOS (x64).

Читать далее

Новости

Опасные ловушки C++: типичные ошибки, их последствия и защита

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

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

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

Читать далее

Карл Либерхер, Иэн Холланд «Обеспечение хорошего стиля объектно-ориентированных программ»

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

Наверное, каждый программист, работавший с объектно-ориентированными языками, хотя бы раз слышал о законе Деметры. Многие знают его смысл, но мало кто читал оригинальный текст 1989 года, где закон был не только сформулирован, но и подробно обоснован. В этой статье авторы, Карл Либерхер и Иэн Холланд, рассказывают о проекте «Деметра», дают строгие формулировки для разных языков и обсуждают, когда законом можно пренебречь.

Читать далее

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

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

Уважаемый @vvvphoenix заразил меня решением не решаемой задачи комбинаторики, вот его последняя статья.

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

Еще хочу рассказать что получилось выяснить все с той же тривиальной перестановкой строк. Начать хочу с того что посмотреть на табличку 256×256 все таки можно.

Читать далее

Как упростить сборку на С++: мой open source-проект LightForge

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

Когда много лет пишешь на C++ и регулярно работаешь с множеством небольших проектов, рано или поздно устаешь от рутины. Каждый раз — новый make-файл, новые зависимости и ошибки в длинных строках компилятора. В какой-то момент я поймал себя на мысли: «А почему бы не сделать сборку проще?». 

Читать далее

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

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

Всем привет! Это продолжение статьи про мою 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 мин
Охват и читатели8.8K

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

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

Читать далее

SFINAE в C++

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

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

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

К механике SFINAE

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

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


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

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

Читать далее

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

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

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

Привет, Хабр! Я Никита Пешаков, ведущий инженер-программист в компании 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 мин
Охват и читатели10K

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

Читать далее

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

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

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

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

Читать далее

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

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

В 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 между платой терминала оплаты и дисплеем. Попутно накидал следующую распиновку коннектора:

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

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