<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Все статьи подряд / C++ / Хабр]]></title>
    <link>https://habr.com/ru/hubs/cpp/articles/</link>
    <description><![CDATA[C++ – типизированный язык программирования]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Fri, 06 Nov 2026 23:40:36 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[Zero-Host-Copy инференс: как написать пайплайн на C++/CUDA исключающий участие CPU в горячем цикле (165 FPS)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1104350/</guid>
      <link>https://habr.com/ru/articles/1104350/?utm_campaign=1104350&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/da/f6/b8/daf6b83c84d8327b6b44859d7b00a566.gif" /><p>  Когда современные нейросетевые модели с INT8-квантованием начинают выполняться за единицы миллисекунд, «узкое место» системы смещается с чистой вычислительной мощности на инфраструктуру вычислительного конвейера и операции ввода-вывода. При использовании дискретных графических процессоров многократная передача видеокадров высокого разрешения и промежуточных данных, таких как, например, bounding boxes (для случая object detection), по шине PCIe способна существенно снизить общую пропускную способность.</p><p>  Архитектура Zero-Host-Copy заключается в том, чтобы начиная с чтения с диска перед декодированием и заканчивая записью на диск после финального кодирования, файлы кадров оставались в памяти GPU и обрабатывались только с помощью GPU, а копирования данных GPU -&gt; CPU и обратно минимизировались. Если же говорить про Zero-Copy архитектуру, то под ней подразумевается передача блоков данных для обработки от одного этапа конвейера к другому исключительно по указателю без излишнего копирования данных. </p><p>  Впрочем, лишние копирования CPU-GPU — не единственный скрытый фактор, снижающий эффективность конвейера. Динамическое выделение памяти в процессе работы системы столь же пагубно сказывается на быстродействии в реальном времени. Это происходит в связи с тем, что вызов  cudaMalloc влечет за собой неявную синхронизацию (implicit synchronization), заставляя CPU ждать GPU, что нарушает асинхронность конвейера. Для достижения максимальной частоты кадров (FPS) высокопроизводительная система должна строиться с учетом реализации трех фаз жизненного цикла: «фаза инициализации» (initialization phase), «фаза подготовки» (warm-up phase) и «фаза активной работы» (hot phase). На этапе инициализации приложение заранее выделяет необходимые пулы памяти, буферы и очереди с начальными параметрами вложенности (глубины). В процессе фазы подготовки система запускает полную очередь обработки, где возможно срабатывание механизмов выделения дополнительных буферов в соответствии с реальной работой. Как только конвейер переходит в фазу активной работы после прогона нескольких начальных кадров, динамическое выделение памяти должно быть полностью исключено. Такая архитектура не допускает вызовов cudaMalloc или new во время выполнения, полагаясь исключительно на повторное использование уже выделенных блоков памяти для поддержания стабильной частоты (FPS).</p><p>  В статье - реализация bare-metal конвейера без DeepStream: обработка видео с YOLOv8m (1024x1024-INT8) на ~165–215 FPS (RTX 3060 Ti) и ~38 FPS (Jetson Orin Nano Super).</p> <a href="https://habr.com/ru/articles/1104350/?utm_campaign=1104350&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 06 Nov 2026 08:31:49 GMT</pubDate>
      <dc:creator><![CDATA[igkho]]></dc:creator>
      
      <category><![CDATA[C++]]></category><category><![CDATA[cuda]]></category><category><![CDATA[gpgpu]]></category><category><![CDATA[zero-copy]]></category><category><![CDATA[tensorrt]]></category><category><![CDATA[onnxruntime]]></category><category><![CDATA[computervision]]></category><category><![CDATA[rtx]]></category><category><![CDATA[jetson orin]]></category><category><![CDATA[edge-computing]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Динамические списки GPIO-линий: пакетные операции с группами выводов на современном C++]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1104222/</guid>
      <link>https://habr.com/ru/articles/1104222/?utm_campaign=1104222&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/83/da/07/83da078524dc98cf903a0dce73e68e14.png" /><p>GPIO-линии - это базовая периферия любого микроконтроллера и первое с чего начинают знакомство с новым МК. Чего может быть проще помигать светодиодом. Библиотеки производителей МК, также как и сторонние, обычно предоставляют функции записи одной линии типа HAL_GPIO_WritePin, digitalWrite, либо же запись всего порта. А часто требуется управлять сразу группой разрозненных GPIO-линий: светодиодная лента, 7-сегментный индикатор, параллельная шина данных, матричная клавиатура и т.д.</p><p>С конфигурированием GPIO-линий дела обстоят не лучше, нужно заполнять поля неудобных структур в HAL-подобных библиотеках, и часто конфигурирование по одному пину - громоздко, неудобно, много однообразного copy-paste кода.</p><p>В этой статье представлен новый метод работы с GPIO для микроконтроллеров, который сочетает возможность динамического создания групп GPIO линий и хорошую оптимизацию для групп заданных на этапе компиляции, на примере Российского МК К1921ВГ015.</p> <a href="https://habr.com/ru/articles/1104222/?utm_campaign=1104222&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 05 Nov 2026 20:42:02 GMT</pubDate>
      <dc:creator><![CDATA[KonstCA]]></dc:creator>
      
      <category><![CDATA[c++20]]></category><category><![CDATA[risc-v]]></category><category><![CDATA[к1921вг015]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Сделал меньше работы — стало медленнее: как я выиграл Кубок СЭРПАС 2026 на Эльбрусе. Часть 1]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1104198/</guid>
      <link>https://habr.com/ru/articles/1104198/?utm_campaign=1104198&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/ea/fd/b8/eafdb83166358f4181f25191939d5896.jpg" /><p>Я убрал из своего решения 60% работы, а программа стала медленнее. На Эльбрусе такое бывает чаще, чем кажется: параллельность здесь заранее расписывает компилятор, и «хитрый» код с проверками и прыжками по памяти проигрывает простому, но ровному циклу.</p><p>Этой осенью я выиграл Кубок СЭРПАС 2026, соревнование по оптимизации программ на C/C++ под процессоры Эльбрус, и в трёх статьях рассказываю, как решал задачи и что на e2k работает не так, как на x86. В первой части: чем Эльбрус отличается от привычных процессоров, как я мерил скорость и как считать 32 пары строк за один проход.</p> <a href="https://habr.com/ru/articles/1104198/?utm_campaign=1104198&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Почему стало медленнее</a>]]></description>
      
      <pubDate>Thu, 05 Nov 2026 19:48:37 GMT</pubDate>
      <dc:creator><![CDATA[alex5885]]></dc:creator>
      
      <category><![CDATA[Эльбрус]]></category><category><![CDATA[VLIW]]></category><category><![CDATA[popcount]]></category><category><![CDATA[LCC]]></category><category><![CDATA[e2k]]></category><category><![CDATA[оптимизация]]></category><category><![CDATA[Кубок СЭРПАС]]></category><category><![CDATA[многопоточность]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Почему эксепшены (exception) хуже… Будут ли эксепшены хуже? Хуже чего?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1104158/</guid>
      <link>https://habr.com/ru/articles/1104158/?utm_campaign=1104158&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p> Мне что-то часто стал встречаться код в котором вместо обычной логики используются конструкции на основе генерации эксепшенов (exceptions). Как оценить такой код? Может нам стоит стараться использовать эксепшены как можно чаще?</p><p>Я решил проанализировать реальные примеры, вот например</p><p><a href="https://github.com/openbmc/dbus-sensors/blob/ce706f061f2b6877e953fa0ad8f5200e99f15854/src/VariantVisitors.hpp#L53" rel="noopener nofollow">https://github.com/openbmc/dbus-sensors/blob/ce706f061f2b6877e953fa0ad8f5200e99f15854/src/VariantVisitors.hpp#L53</a>. и посмотреть на сколько код с эксепшенами лучше или хуже некоторой альтернативной версии кода. Заодно посмотрим есть ли альтернатива коду с эксепшенами.</p> <a href="https://habr.com/ru/articles/1104158/?utm_campaign=1104158&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 05 Nov 2026 17:57:04 GMT</pubDate>
      <dc:creator><![CDATA[rukhi7]]></dc:creator>
      
      <category><![CDATA[exeption]]></category><category><![CDATA[smartpointers]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[В поисках идеального способа обработки асинхронного I/O на C++]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/yadro/articles/1103146/</guid>
      <link>https://habr.com/ru/companies/yadro/articles/1103146/?utm_campaign=1103146&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/e8/be/a5/e8bea5532085dc68d7085e5a8a530f9c.png" /><p>Многие из нас писали асинхронный код, который помогает не блокировать потоки при ожидании ответа от процессов, сетевого соединения или устройств. Вызов с callback-функцией задействует много сущностей: и планировщик задач, и межпроцессное взаимодействие, и системные вызовы, и механизмы ядра Linux. Без асинхронных вызовов не обходятся настольные операционные системы, и их разработка требует баланса между производительностью и безопасностью. Также важно сохранить код читаемым и удобным.&nbsp;</p><p>Меня зовут Илья Клементьев. Я разрабатываю настольную операционную систему kvadraOS Desktop на основе ChromiumOS. В этой статье я постараюсь найти ответ на вопрос: что же все-таки лучше для асинхронного кода — <code>poll()</code>&nbsp;или <code>epoll()?</code> И нужно ли это оборачивать в корутины C++20?&nbsp;</p> <a href="https://habr.com/ru/articles/1103146/?utm_campaign=1103146&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Узнать ответ</a>]]></description>
      
      <pubDate>Thu, 05 Nov 2026 13:11:17 GMT</pubDate>
      <dc:creator><![CDATA[YellowSea (YADRO)]]></dc:creator>
      
      <category><![CDATA[coroutines]]></category><category><![CDATA[ring_io]]></category><category><![CDATA[cpp]]></category><category><![CDATA[kvadraos]]></category><category><![CDATA[linux]]></category><category><![CDATA[gentoo]]></category><category><![CDATA[chromium os]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как мы приручили SIGSEGV и освободили память фоновых вкладок]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/yandex/articles/1088116/</guid>
      <link>https://habr.com/ru/companies/yandex/articles/1088116/?utm_campaign=1088116&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/12/7c/4f/127c4fedd2cbf761ce000dbeee77e951.png" /><p>Браузеры традиционно относятся к&nbsp;самым крупным потребителям памяти на&nbsp;персональных компьютерах. Иногда кажется, что&nbsp;разработчики просто забили на&nbsp;оптимизацию, но&nbsp;реальность куда прозаичнее: пользователи открывают всё больше вкладок, сайты обрастают медиа и JavaScript, новые веб‑стандарты требуют хранить больше данных, а&nbsp;ради безопасности браузер изолирует сайты в&nbsp;отдельных процессах.</p><p>На&nbsp;три последних пункта повлиять сложно. Но&nbsp;что&nbsp;делать с&nbsp;десятками вкладок, которые пользователь открыл, посмотрел и забыл? Не&nbsp;запускать процесс до&nbsp;первого посещения&nbsp;— легко. Гораздо интереснее случай, когда страница уже загрузилась и продолжает занимать память&nbsp;— почти как&nbsp;активная вкладка.</p><p>Просто так закрыть её нельзя: страница потеряет состояние, а&nbsp;музыка, видео или&nbsp;фоновая задача могут прерваться. В&nbsp;Chromium уже есть сборка мусора, очистка кешей и другие способы оптимизации&nbsp;— однако память всё равно не&nbsp;всегда возвращается операционной системе надолго.</p><p>Чтобы разобраться, почему так происходит, мы в&nbsp;команде Яндекс Браузера собрали собственный профайлер обращений к&nbsp;страницам памяти. Под&nbsp;катом&nbsp;— устройство виртуальной памяти, lock‑free‑структуры внутри обработчика сигнала, профилирование через управляемый SIGSEGV, борьба с&nbsp;kevent64, mach_msg и libdispatch, а&nbsp;также переход от&nbsp;эксперимента на&nbsp;macOS к&nbsp;оптимизации, которая сильнее всего проявила себя на&nbsp;Windows.</p> <a href="https://habr.com/ru/articles/1088116/?utm_campaign=1088116&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 05 Nov 2026 06:31:45 GMT</pubDate>
      <dc:creator><![CDATA[koblakov (Яндекс)]]></dc:creator>
      
      <category><![CDATA[c++]]></category><category><![CDATA[chromium]]></category><category><![CDATA[браузер]]></category><category><![CDATA[экономия памяти]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Rust и C++: анализ официальных документов CISA, NSA, Google и Microsoft]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1103654/</guid>
      <link>https://habr.com/ru/articles/1103654/?utm_campaign=1103654&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>В&nbsp;последние годы вопрос безопасности памяти стал одним из&nbsp;ключевых факторов, определяющих стратегию разработки системного программного обеспечения. В&nbsp;официальных документах таких организаций, как&nbsp;CISA, NSA, а&nbsp;также в&nbsp;технических отчетах Google и Microsoft, прослеживается устойчивая тенденция к&nbsp;переходу на&nbsp;безопасные языки программирования, и Rust рассматривается в&nbsp;качестве основной альтернативы C и C++.</p><p>Данная статья представляет собой анализ официальных документов и статистических данных. В&nbsp;ней рассматриваются причины выбора(организаций) в&nbsp;пользу Rust, технические механизмы (такие как&nbsp;система владения и семантика перемещения), обеспечивающие безопасность без&nbsp;потери производительности, а&nbsp;также объективные ограничения и издержки, с&nbsp;которыми сталкиваются компании при&nbsp;миграции. Отдельное внимание уделено ответным мерам со стороны сообщества C++ и прогнозам развития индустрии.</p> <a href="https://habr.com/ru/articles/1103654/?utm_campaign=1103654&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 04 Nov 2026 21:49:16 GMT</pubDate>
      <dc:creator><![CDATA[Johnny_Depp]]></dc:creator>
      
      <category><![CDATA[Rust]]></category><category><![CDATA[C++]]></category><category><![CDATA[Безопасность памяти]]></category><category><![CDATA[Системное программирование]]></category><category><![CDATA[информационная безопасность]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Корутины в продакшене: как переложить рельсы под идущим поездом]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/kaspersky/articles/1098114/</guid>
      <link>https://habr.com/ru/companies/kaspersky/articles/1098114/?utm_campaign=1098114&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/0f/97/ac/0f97ac5593890b0d6ada41d68bc126d5.png" /><p>Привет, Хабр! Меня зовут Алексей Макареня, я старший разработчик в «Лаборатории Касперского». Наша команда занимается централизованной системой контроля версий, и это тот самый поезд из заголовка. Через сервер этой системы идет работа с монорепозиторием, где лежит код десятков продуктов, поэтому остановить его на ремонт нельзя. </p><p>Сервер годами жил на акторах и дожил до того, что перед мелкой правкой разработчик по нескольку часов восстанавливал в голове поток управления. Под катом рассказываю, как я за восемь месяцев перевел его на корутины C++20 прямо на ходу, зачем для этого понадобилась собственная библиотека на 387 строк и почему иногда полезно сначала написать функцию на 565 строк.</p> <a href="https://habr.com/ru/articles/1098114/?utm_campaign=1098114&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 03 Nov 2026 12:21:09 GMT</pubDate>
      <dc:creator><![CDATA[makarenya («Лаборатория Касперского»)]]></dc:creator>
      
      <category><![CDATA[корутины]]></category><category><![CDATA[c++]]></category><category><![CDATA[c++20]]></category><category><![CDATA[система контроля версий]]></category><category><![CDATA[монорепозиторий]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Подводные камни битовых полей в C++]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/articles/1101790/</guid>
      <link>https://habr.com/ru/companies/pvs-studio/articles/1101790/?utm_campaign=1101790&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/bc/70/b3/bc70b362b4bfe39af9a8f3a7477390c5.png" /><p>Думаю, вы знаете, что C++ — язык, который разрешает вам вообще всё. А потом молча смотрит, как вы на этом подрываетесь. Обычно мы привыкли мыслить категориями байтов, но что делать, если стандартная сетка типов кажется слишком расточительной? Когда внутренний перфекционист требует компактности, на помощь приходят битовые поля. Зачем отдавать под скромный флаг “да/нет” целый восьмибитный контейнер, если можно ювелирно отрезать ровно один бит? Поставил двоеточие — и ты повелитель памяти. Но там, где начинается экономия, заканчивается порядок и предсказуемость. Программист остается один на один с тонкостями стандартов и поведением конкретных платформ. Предлагаю вместе заглянуть под капот C++ и подробно разобрать, как на самом деле устроены битовые поля.</p> <a href="https://habr.com/ru/articles/1101790/?utm_campaign=1101790&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 30 Oct 2026 13:31:34 GMT</pubDate>
      <dc:creator><![CDATA[MeLiza_Beth (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[pvs-studio]]></category><category><![CDATA[c++]]></category><category><![CDATA[программирование]]></category><category><![CDATA[compiler]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Куда девать старую почту, когда ящик переполнен: локальные архивы в почтовом клиенте CommuniGate Pro]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/communigate_pro/articles/1100152/</guid>
      <link>https://habr.com/ru/companies/communigate_pro/articles/1100152/?utm_campaign=1100152&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/98/d9/77/98d977e7ea839d3f23ccfc5069610fa4.jpg" /><p><strong><em>Рабочая переписка редко хранится в одном месте. Документы приходят по почте, детали обсуждаются в чате, встречи планируются в календаре. Длинную цепочку писем удобнее читать за компьютером, а расписание в календаре можно посмотреть и с телефона. </em></strong></p><p><strong><em>Мы небольшой командой разрабатываем клиентское приложение CommuniGate Pro, объединяющее почту, календарь, контакты и чаты. Оно работает на Windows, Linux, macOS, Android и iOS. Пишем на Dart и Flutter, поэтому большая часть кода у нас общая для всех платформ. </em></strong></p><p><strong><em>Это упрощает разработку и поддержку приложения и интерфейса, но возможности десктопной и мобильной версий все же различаются. Например, локальные почтовые архивы мы сделали только для десктопа. Этой задачей я как раз и занимался. Идея простая: пользователь переносит старые письма с сервера на компьютер, освобождает место в почтовом ящике и продолжает работать с письмами прямо в приложении. </em></strong></p><p><strong><em>В этой статье я расскажу, как встроил локальные архивы в общий проект, как проверял их на больших объёмах и как попутно реализовал ещё одну возможность - общий буфер длительных операций.</em></strong></p> <a href="https://habr.com/ru/articles/1100152/?utm_campaign=1100152&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 30 Oct 2026 09:07:10 GMT</pubDate>
      <dc:creator><![CDATA[CommuniGate_Pro (АО СБК)]]></dc:creator>
      
      <category><![CDATA[локальные архивы]]></category><category><![CDATA[разработка мобильных приложений]]></category><category><![CDATA[корпоративная почта]]></category><category><![CDATA[хранение данных]]></category><category><![CDATA[десктоп]]></category><category><![CDATA[длительные операции]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Один счётчик, десять потоков и неправильный результат: разбираемся в многопоточности C++]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1101430/</guid>
      <link>https://habr.com/ru/articles/1101430/?utm_campaign=1101430&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/4a/15/63/4a1563902cf1cb13f8810513613195e0.png" /><p>Представим простую задачу: десять потоков должны увеличить общий счётчик по миллиону раз. Математика элементарная — в результате ожидаем десять миллионов.</p><p>Но программа может вывести совсем другое число. Причём ошибка не обязательно будет повторяться при каждом запуске.</p><p>Разберёмся, почему так происходит, как исправить проблему с помощью <code>std::mutex</code> и <code>std::atomic</code>, когда нужны <code>std::condition_variable</code> и <code>std::future</code>, а также чем <code>std::jthread</code> удобнее обычного <code>std::thread</code>.</p><p>Все примеры рассчитаны на C++20, если не указано иное.</p> <a href="https://habr.com/ru/articles/1101430/?utm_campaign=1101430&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 29 Oct 2026 19:57:08 GMT</pubDate>
      <dc:creator><![CDATA[NikiZip]]></dc:creator>
      
      <category><![CDATA[C++]]></category><category><![CDATA[многопоточность]]></category><category><![CDATA[condition_variable]]></category><category><![CDATA[mutex]]></category><category><![CDATA[atomic]]></category><category><![CDATA[thread]]></category><category><![CDATA[jthread]]></category><category><![CDATA[async]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Когда Python становится слишком медленным: пишем C‑расширение с нуля и сравниваем с pybind11 (бонус JIT‑компилятор)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1101090/</guid>
      <link>https://habr.com/ru/articles/1101090/?utm_campaign=1101090&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/d8/63/54/d86354dd4651ffdad111c8faa495a736.png" /><p>Недавно я прочел статью про <code>pyrusmorph</code>&nbsp;— python обёртку над 30-летним с++ ядром <code>libmorph/rus</code>. Бенчмарки удивили: <strong>в 30&nbsp;раз быстрее PyMorphy3</strong> при&nbsp;обработке текста. После я задумался. Как&nbsp;это вообще работает? Почему мы пишем <code>import pyrusmorph</code> и получаем доступ к&nbsp;нативному с++ коду и функциям прямо внутри python.</p><p>В&nbsp;статье я предлагаю пройти этот путь с&nbsp;нуля. <strong>Разобраться, как&nbsp;устроен Python «под капотом»</strong>, написать <strong>своё расширение на&nbsp;чистом C‑API</strong>, а&nbsp;потом посмотреть, как&nbsp;эту боль лечит <code>pybind11</code>. В&nbsp;конце&nbsp;— бенчмарки и практические советы, когда вообще стоит лезть в&nbsp;c++ для&nbsp;оптимизации. Бонус&nbsp;— немного о&nbsp;компиляторе python кода (JIT‑компилятор)</p> <a href="https://habr.com/ru/articles/1101090/?utm_campaign=1101090&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 29 Oct 2026 09:01:51 GMT</pubDate>
      <dc:creator><![CDATA[Stl2802]]></dc:creator>
      
      <category><![CDATA[jit-компилятор]]></category><category><![CDATA[производительность]]></category><category><![CDATA[оптимизация]]></category><category><![CDATA[python]]></category><category><![CDATA[c++]]></category><category><![CDATA[pybind11]]></category><category><![CDATA[numba]]></category><category><![CDATA[низкоуровневое программирование]]></category><category><![CDATA[бенчмарки]]></category><category><![CDATA[gil]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Rust круче C++? Часть 1: скорость]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/beget/articles/1093378/</guid>
      <link>https://habr.com/ru/companies/beget/articles/1093378/?utm_campaign=1093378&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/12/fc/86/12fc862b053001034541ba6b63a03735.png" /><p>Привет, Хабр!</p><p>Спор «Rust или C++» идёт с 2015 года, с выхода Rust 1.0, и за одиннадцать лет превратился в отдельный жанр со своими приколами. «В Rust на каждом индексе проверка, вот он и тормозит». «В плюсах проверок нет, значит, быстрее». «Ага, а у Rust ссылки не пересекаются, так что быстрее как раз он». «Паника дорогая», «исключения дорогие», «абстракции бесплатные». Каждая сторона уверена в своём, а в ассемблер почти никто не смотрит, хотя ответ лежит прямо там (и местами он неприятный для обеих сторон).</p><p>В одну статью вопрос «круче ли Rust, чем C++» не влез, так что это первая часть, и она про скорость. Безопасность и прочие поводы поругаться ждут своей очереди.</p> <a href="https://habr.com/ru/articles/1093378/?utm_campaign=1093378&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 29 Oct 2026 07:05:36 GMT</pubDate>
      <dc:creator><![CDATA[morett1m (Beget)]]></dc:creator>
      
      <category><![CDATA[rust]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я устал от VPN‑клиентов на 300 МБ ОЗУ и написал (claude) свой TUN‑клиент на чистом Rust (Unbihex)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1100854/</guid>
      <link>https://habr.com/ru/articles/1100854/?utm_campaign=1100854&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Всем привет! Последние пару лет экосистема обхода блокировок развивалась по&nbsp;принципу «больше фич&nbsp;— жирнее обертка». Большинство популярных десктопных и мобильных клиентов сегодня&nbsp;— это либо тяжелые комбайны на&nbsp;Electron/Flutter, либо графические обертки над ядром Xray или&nbsp;sing‑box через <code>gomobile</code> и C‑FFI, которые тянут за&nbsp;собой рантайм Go, сборщик мусора и жрут от 200&nbsp;до 400&nbsp;МБ оперативки просто в&nbsp;фоне.</p><p>Когда у&nbsp;тебя слабый ноутбук, офисная машина или&nbsp;телефон, на&nbsp;котором открыта пара тяжелых приложений, лишние 300&nbsp;МБ под&nbsp;один только VPN начинают ощутимо бить по&nbsp;системе. А&nbsp;если речь идет об&nbsp;iOS, где системный лимит на&nbsp;сетевые расширения (<code>PacketTunnelProvider</code>) составляет жесткие 50&nbsp;МБ, такие клиенты регулярно падают по&nbsp;OOM (Out Of Memory) при&nbsp;попытке загрузить крупные гео‑базы.</p><p>В&nbsp;один прекрасный день мне это надоело. Я решил взять всё в&nbsp;свои руки и написал с&nbsp;нуля собственный кроссплатформенный TUN‑клиент и сетевое ядро на&nbsp;чистом Rust без&nbsp;единой сторонней прослойки. Встречайте&nbsp;— <strong>Unbihex</strong> (названный в&nbsp;честь гипотетического 126-го элемента унбигексия). Сейчас он потребляет <strong>18&nbsp;МБ ОЗУ в&nbsp;режиме TUN</strong> (и <strong>12&nbsp;МБ в&nbsp;прокси</strong>), поддерживает полный стек современных протоколов и уже готов к&nbsp;продакшену.</p><p>Под&nbsp;катом&nbsp;— как&nbsp;это устроено под&nbsp;капотом, какие грабли пришлось собрать при&nbsp;работе с&nbsp;TUN под&nbsp;Windows и как&nbsp;удалось подружить ядро с&nbsp;популярными панелями.</p> <a href="https://habr.com/ru/articles/1100854/?utm_campaign=1100854&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 28 Oct 2026 20:53:15 GMT</pubDate>
      <dc:creator><![CDATA[Unbihex]]></dc:creator>
      
      <category><![CDATA[rust is faster than go]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Системное программирование на C++: процессы, C-API и WinAPI]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1100718/</guid>
      <link>https://habr.com/ru/articles/1100718/?utm_campaign=1100718&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/a9/96/51/a9965174040813146c5353a632e007f0.png" /><p>Привет, Хабр!</p><p>Это вторая статья цикла про C++. В <a href="https://habr.com/ru/sandbox/309906/" rel="noopener nofollow">первой</a> я разбирал базу для тех, кто начинает с нуля: переменные, циклы, классы, контейнеры. Здесь идём на уровень ниже — как обычная C+±программа договаривается с операционной системой.</p><p>Сразу скажу, зачем я вообще полез в эту тему. В колледже была лаба, где нужно было поднять процесс, дождаться его и снять код возврата. Я неделю не понимал, почему <code>fork()</code> в одном случае возвращает ноль, а в другом — PID, и почему после <code>exec</code> ребёнок «исчезает». Препод объяснил это минут за десять — и я понял, что половину объяснений всё равно не понял. С тех пор я пишу такие вещи с расстановкой: не «<code>fork()</code> создаёт процесс», а что именно он возвращает, что происходит в коде после вызова и что будет, если забыть закрыть дескрипторы. Поэтому статей будет много, а примеров в каждой — ещё больше.</p><p>Что дальше в цикле, чтобы было понятно, куда мы движемся:</p> <a href="https://habr.com/ru/articles/1100718/?utm_campaign=1100718&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 28 Oct 2026 14:46:46 GMT</pubDate>
      <dc:creator><![CDATA[NikiZip]]></dc:creator>
      
      <category><![CDATA[cplusplus]]></category><category><![CDATA[системное программирование]]></category><category><![CDATA[процессы]]></category><category><![CDATA[windows]]></category><category><![CDATA[posix]]></category><category><![CDATA[c-api]]></category><category><![CDATA[fork]]></category><category><![CDATA[c]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Тулпар: компилируемый язык с казахским синтаксисом, написанный с нуля (без LLVM, без libc, без C-компилятора)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1100624/</guid>
      <link>https://habr.com/ru/articles/1100624/?utm_campaign=1100624&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/bf/83/d1/bf83d17aa208d26013ff2fd9460fb163.png" /><p>Рассказываю про Тулпар (Тұлпар)&nbsp;— язык программирования с&nbsp;казахскими ключевыми словами и&nbsp;синтаксисом в&nbsp;стиле Python, который компилируется в&nbsp;нативный код x86-64. Компилятор и&nbsp;рантайм написаны на&nbsp;Rust с&nbsp;нуля: без LLVM и&nbsp;без libc, с&nbsp;собственным аллокатором регистров и&nbsp;сборщиком мусора. Разбираю конвейер компиляции, устройство&nbsp;GC, замеры против C, Rust и&nbsp;Python, а&nbsp;также&nbsp;то, чего в&nbsp;языке пока нет.</p> <a href="https://habr.com/ru/articles/1100624/?utm_campaign=1100624&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 28 Oct 2026 12:58:41 GMT</pubDate>
      <dc:creator><![CDATA[undercoverfts]]></dc:creator>
      
      <category><![CDATA[язык программирования]]></category><category><![CDATA[си]]></category><category><![CDATA[rust]]></category><category><![CDATA[c++]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Можно ли навайбкодить операционную систему как Linux, только быструю?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1099054/</guid>
      <link>https://habr.com/ru/articles/1099054/?utm_campaign=1099054&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/c3/31/f1/c331f14bf71117c7024db68bfac71e30.png" /><p>Наступила эпоха, когда любая домохозяйка за несколько промптов поднимает себе CRM: фронтенд на JS, бэкенд на Go, данные в Postgres. И при этом не понимает ни слова из того, что я сейчас написал.</p><p>А куда заведёт кривая гика, который пятнадцать лет отдал коммерческой разработке ещё в доLLMную эпоху?</p><p>Дело было вечером, подписка на Claude Code простаивала, мысли вертелись. Перебирая прожитые годы, я вспомнил детскую мечту: написать свою операционную систему. Хорошую, чтобы всех радовала и приносила людям пользу. Как Windows, только лучше.</p><p>Windows из списка хороших систем я вычеркнул ещё в школе, вместе с синим экраном. Да и Linux перестал казаться идеалом, когда я начал считать микросекунды.</p> <a href="https://habr.com/ru/articles/1099054/?utm_campaign=1099054&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 28 Oct 2026 12:41:10 GMT</pubDate>
      <dc:creator><![CDATA[DenisT]]></dc:creator>
      
      <category><![CDATA[Linux]]></category><category><![CDATA[операционные системы]]></category><category><![CDATA[low-latency]]></category><category><![CDATA[rust]]></category><category><![CDATA[c++]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я поселил Claude в Яндекс Станцию Мини]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1100268/</guid>
      <link>https://habr.com/ru/articles/1100268/?utm_campaign=1100268&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/f8/ab/27/f8ab273dfbabb2d850cd7e9126c0c801.jpeg" /><p>Отдельная линия этой истории: я делал всё это&nbsp;<strong>в паре с Claude Code</strong>. И где-то к середине проекта поймал себя на забавной мысли — Claude Code, по сути,&nbsp;<strong>собирал своего же младшего брата</strong>: маленького Claude, который теперь живёт внутри колонки и откликается на «Клод». Старший пишет код, отлаживает, диагностирует — чтобы младший поселился в железке и заговорил. Дальше эта мысль меня уже не отпускала.</p> <a href="https://habr.com/ru/articles/1100268/?utm_campaign=1100268&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 27 Oct 2026 17:14:03 GMT</pubDate>
      <dc:creator><![CDATA[Alex-Rosette]]></dc:creator>
      
      <category><![CDATA[яндекс алиса]]></category><category><![CDATA[claude-code]]></category><category><![CDATA[root]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я писал эмуляцию звука для Nintendo Gameboy на C++ целый год]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1099784/</guid>
      <link>https://habr.com/ru/articles/1099784/?utm_campaign=1099784&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/b4/50/2e/b4502eac859915f56485973466e2b183.png" /><p>В&nbsp;этой статье я расскажу, как&nbsp;устроена звуковая подсистема Nintendo Gameboy, с&nbsp;какими проблемами я столкнулся, пытаясь в&nbsp;реальном времени генерировать звук и синхронизировать с&nbsp;ним картинку. Статья является продолжением <a href="https://habr.com/ru/articles/908752/" rel="noopener nofollow">моей прошлой публикации</a>.</p> <a href="https://habr.com/ru/articles/1099784/?utm_campaign=1099784&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 26 Oct 2026 20:58:04 GMT</pubDate>
      <dc:creator><![CDATA[masscry]]></dc:creator>
      
      <category><![CDATA[gameboy]]></category><category><![CDATA[эмуляция]]></category><category><![CDATA[звук]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[pyrusmorph: в 30 раз быстрее. Интеграция ядра libmorph/rus в Python]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1098068/</guid>
      <link>https://habr.com/ru/articles/1098068/?utm_campaign=1098068&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/53/6d/ae/536dae4c111ed7d6df6e90af0b9b8870.jpeg" /><p>Разбираем производительность морфологических анализаторов для русскоязычных текстов в Python-среде. Расскажем, почему библиотеки семейства PyMorphy работают так медленно и как интеграция нативного C++ ядра <code>libmorph/rus</code> решает проблему производительности high-load систем.</p> <a href="https://habr.com/ru/articles/1098068/?utm_campaign=1098068&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 25 Oct 2026 16:56:01 GMT</pubDate>
      <dc:creator><![CDATA[Keva]]></dc:creator>
      
      <category><![CDATA[морфологический анализ]]></category><category><![CDATA[морфология]]></category><category><![CDATA[python]]></category><category><![CDATA[лемматизация]]></category><category><![CDATA[pymorphy]]></category><category><![CDATA[pymorphy2]]></category><category><![CDATA[pymorphy3]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[librats: Выпуск версии 3.0.x (библиотека для распределённых P2P‑приложений и стриминга). И 3 приложения на ней]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1099136/</guid>
      <link>https://habr.com/ru/articles/1099136/?utm_campaign=1099136&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/4f/27/65/4f276542facf949f0036f8b5d5c449c5.jpg" /><p><strong>Всем привет!</strong>&nbsp;Я продолжаю развивать свою библиотеку для создания распределённых приложений. Она уже легла в основу новой версии&nbsp;<strong><a href="https://github.com/librats/rats-search" rel="noopener nofollow">rats-search</a></strong>&nbsp;(распределённый торрент-поисковик) и&nbsp;<strong><a href="https://github.com/librats/rasync" rel="noopener nofollow">rasync</a></strong><a href="https://github.com/librats/rasync" rel="noopener nofollow">&nbsp;</a>(синхронизация папок, файлов и исходников между устройствами) и <strong><a href="https://github.com/librats/ratcast" rel="noopener nofollow">ratcast </a></strong>(распределенный видео-аудио стриминг и приложение наподобие Discord для совместного просмотра фильмов и видео-конференций с более высоким качеством и большим количеством участников и сложной p2p+MCU топологией), а также librats, судя по всему, используется в стороннем клиенте&nbsp;<strong><a href="https://github.com/ultravnc/ultravnc-librats" rel="noopener nofollow">UltraVNC&nbsp;</a></strong>(VNC-клиент).  </p><p>Библиотека позволяет развернуть собственную P2P-сеть, связать пользователей между собой и выстроить обмен данными через потоки разных типов — бинарные, строковые и другие. Главная особенность — автоматическое обнаружение участников (peer discovery) на основе mDNS и DHT Mainline протоколов без необходимости в серверах, что особенно актуально <strong>в условиях постоянных блокировок и сетевых ограничений</strong>. Общения происходит напрямую - без посредника.</p><p>На данный момент поддерживаются C/C++, Java (Android), Python и Node.js.</p><p>В этом обновлении значительно улучшен собственный QUIC-подобный протокол поверх UDP: добавлена поддержка app-limited-режима, управление перегрузкой переведено на BBRv3, реализована полноценная прямая коррекция ошибок (FEC), улучшен обход NAT, а также появился модуль rendezvous для развёртывания вспомогательных серверов, повышающих связность сетей.</p><p>Последний стабильный релиз на сегодня —&nbsp;<strong>3.0.3</strong>. Исходный код и собранные бинарные файлы доступны для:</p> <a href="https://habr.com/ru/articles/1099136/?utm_campaign=1099136&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 25 Oct 2026 14:26:18 GMT</pubDate>
      <dc:creator><![CDATA[DEgITx]]></dc:creator>
      
      <category><![CDATA[С++]]></category><category><![CDATA[librats]]></category><category><![CDATA[libratcast]]></category><category><![CDATA[p2p]]></category><category><![CDATA[librist]]></category><category><![CDATA[srt]]></category><category><![CDATA[bbr]]></category><category><![CDATA[bbrv3]]></category><category><![CDATA[udp]]></category><category><![CDATA[udp hole punching]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Turbo Vision спустя 36 лет: нормальный интерфейс для journald]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1098894/</guid>
      <link>https://habr.com/ru/articles/1098894/?utm_campaign=1098894&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/34/f6/bd/34f6bddace3469474b015c0f5c5ce1a2.png" /><p>journald умеет почти всё, что нужно для разбора проблемы на сервере: индексирует поля, фильтрует по юниту, процессу, пользователю и загрузке, ищет по времени и отдаёт записи по курсору. А смотрим мы его через <code>journalctl</code>, то есть одной командой за раз. Эта статья — о том, как оконный интерфейс из 1990 года оказался почти идеальной формой для этих возможностей, и о том, как устроен получившийся просмотрщик <a href="https://github.com/cyanide-burnout/TurboJedi" rel="noopener nofollow">TurboJedi</a>.</p> <a href="https://habr.com/ru/articles/1098894/?utm_campaign=1098894&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 24 Oct 2026 11:47:43 GMT</pubDate>
      <dc:creator><![CDATA[performer]]></dc:creator>
      
      <category><![CDATA[journald]]></category><category><![CDATA[systemd]]></category><category><![CDATA[journalctl]]></category><category><![CDATA[Turbo Vision]]></category><category><![CDATA[TUI]]></category><category><![CDATA[PCRE2]]></category><category><![CDATA[просмотрщик журнала]]></category><category><![CDATA[tvision]]></category><category><![CDATA[логи]]></category><category><![CDATA[grc]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Управление памятью в контейнерах STL. От абстракций к реализации]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1091290/</guid>
      <link>https://habr.com/ru/articles/1091290/?utm_campaign=1091290&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/62f/064/320/62f0643207c407d826b3a2bd0c337837.png" /><p>Каждый разработчик на C++ начинает свой путь с оператора new. Нам объясняют его работу очень просто: «<code>new</code> выделяет память в куче и создает там объект». Мы пишем <code>auto ptr = new MyClass(42);</code> и до поры до времени не задумываемся, что скрывается за этой строчкой.</p> <a href="https://habr.com/ru/articles/1091290/?utm_campaign=1091290&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 22:18:01 GMT</pubDate>
      <dc:creator><![CDATA[AndrewDeveloper]]></dc:creator>
      
      <category><![CDATA[выделение памяти]]></category><category><![CDATA[аллокатор]]></category><category><![CDATA[управление памятью]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я провёл второе соревнование по программированию на Эльбрусах (e2k) «Кубок СЭРПАС 2026»]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1098736/</guid>
      <link>https://habr.com/ru/articles/1098736/?utm_campaign=1098736&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/65/20/d8/6520d80f274ba36919362a5cdd6f82fc.jpg" /><p>Здравствуйте, друзья, меня зовут Ерохин Кирилл, я популяризатор российского программного и аппаратного обеспечения, и в этом сентябре я провёл уже второе, теперь ежегодное, соревнование по алгоритмическому программированию на отечественных аппаратных платформах «Кубок СЭРПАС 2026», собрав 112 участников со всей России, результатами которого пришлось поделиться с вами. А Хабр мне в этом поможет, ему не впервой.</p> <a href="https://habr.com/ru/articles/1098736/?utm_campaign=1098736&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 17:54:52 GMT</pubDate>
      <dc:creator><![CDATA[erokhinkirill]]></dc:creator>
      
      <category><![CDATA[сообщество]]></category><category><![CDATA[спортивное программирование]]></category><category><![CDATA[эльбрус]]></category><category><![CDATA[с++]]></category><category><![CDATA[олимпиадное программирование]]></category><category><![CDATA[соревнования по программированию]]></category><category><![CDATA[оптимизация кода]]></category><category><![CDATA[энтузиасты]]></category><category><![CDATA[e2k]]></category><category><![CDATA[эльбрус-8св]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Архитектура RayQuiro: от синтаксического дерева и байт-код ВМ до нативного машинного кода через LLVM]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1098314/</guid>
      <link>https://habr.com/ru/articles/1098314/?utm_campaign=1098314&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/d6/45/12/d64512f7dcb64f54eade46e59387bea2.png" /><p>Привет, Хабр! Меня зовут mixitosik, я разрабатываю открытый язык программирования общего назначения <strong>RayQuiro</strong>.   </p><p>Когда берешься за создание собственного языка, большинство гайдов и туториалов быстро упираются в тупик: они учат писать либо «игрушечные» древовидные интерпретаторы (Tree-walk AST), либо простые трансляторы в C. На практике же любой язык общего назначения требует решения жестких системных задач: проектирования компонуемой модульной системы, многоуровневого пайплайна исполнения (для мгновенных итераций и для продакшена), кроссплатформенного рантайма и интеграции легковесного GUI без раздувания зависимостей до размеров Electron.</p><p>В этой статье я по шагам разберу внутреннее устройство RayQuiro: структуру парсера и AST, архитектуру стековой виртуальной машины, генерацию IR для LLVM-бэкенда, а также инженерные грабли, на которые пришлось наступить при реализации динамического языка со строгим управлением памятью.</p> <a href="https://habr.com/ru/articles/1098314/?utm_campaign=1098314&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 09:08:43 GMT</pubDate>
      <dc:creator><![CDATA[mixitosik]]></dc:creator>
      
      <category><![CDATA[RayQuiro]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[виртуальная машина]]></category><category><![CDATA[байткод]]></category><category><![CDATA[LLVM]]></category><category><![CDATA[AST]]></category><category><![CDATA[парсер]]></category><category><![CDATA[C++]]></category><category><![CDATA[системное программирование]]></category><category><![CDATA[яп]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я простенький keygen писал]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1097676/</guid>
      <link>https://habr.com/ru/articles/1097676/?utm_campaign=1097676&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/3d/a9/97/3da9975164026d7d62e1bc3358748e99.png" /><p>Это моя первая статья подобного рода(да и в&nbsp;целом любого рода), в&nbsp;которой я покажу как&nbsp;писал keygen для&nbsp;простенького приложения. Я использовал динамический анализ через x96&nbsp;dbg, плюсы для&nbsp;keygen'а, и, конечно&nbsp;же, родненький ассемблер. Статья предназначена для&nbsp;новичков в&nbsp;реверсе и всех, кто хочет что‑то вспомнить. Если зайдет&nbsp;— это может превратиться в&nbsp;серию статей с&nbsp;повышающимся уровнем сложности реверса, но&nbsp;это в&nbsp;мечтах, а&nbsp;пока к&nbsp;сути.</p> <a href="https://habr.com/ru/articles/1097676/?utm_campaign=1097676&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Да давай уже</a>]]></description>
      
      <pubDate>Thu, 22 Oct 2026 07:04:49 GMT</pubDate>
      <dc:creator><![CDATA[keferr]]></dc:creator>
      
      <category><![CDATA[reverse-engineering]]></category><category><![CDATA[crackme]]></category><category><![CDATA[крякми]]></category><category><![CDATA[ассемблер]]></category><category><![CDATA[c++]]></category><category><![CDATA[отладчик]]></category><category><![CDATA[динамический анализ]]></category><category><![CDATA[hacking]]></category><category><![CDATA[crackmes.de]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я заставил ESP8266 рисовать 3 D, стрелять и летать: полный технический разбор кода]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1097380/</guid>
      <link>https://habr.com/ru/articles/1097380/?utm_campaign=1097380&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/0a/bc/0b/0abc0b382fe7d7e829bfb5f4d761e141.jpg" /><p>Привет, Хабр!</p><p>В первой части я рассказал про железо, сборку корпуса и немного затронул программную реализацию. Сегодня — самое вкусное. Мы заглянем в исходники проекта и разберем математику, алгоритмы и оптимизацию под слабое железо.</p><p>Код написан на C++ в Arduino IDE, весь проект живет в одном файле. У нас три игры </p><p>(но в исходнике их уже пять), которые переключаются конечным автоматом через <code>gameState</code>.</p><p><strong>Блок 1: Raycast — 3D на коленке</strong></p><p>Сердце движка — DDA-алгоритм (Digital Differential Analyzer). Мы не рендерим 3D-полигоны, мы пускаем 320 лучей из точки игрока и смотрим, где они пересекают сетку 32x32.</p> <a href="https://habr.com/ru/articles/1097380/?utm_campaign=1097380&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 21 Oct 2026 16:39:40 GMT</pubDate>
      <dc:creator><![CDATA[Neuero]]></dc:creator>
      
      <category><![CDATA[raycasting]]></category><category><![CDATA[gamedev]]></category><category><![CDATA[esp8266]]></category><category><![CDATA[diy-проекты]]></category><category><![CDATA[c++]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[UDP без потерь и переупорядочивания]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1088772/</guid>
      <link>https://habr.com/ru/articles/1088772/?utm_campaign=1088772&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/6ec/771/40c/6ec77140cf5e75d260e3416cc0fc7881.png" /><p>UDP ничего не обещает: датаграмма может не дойти, прийти дважды или обогнать соседнюю. Обычно в ответ берут TCP или пишут свой протокол с повторными запросами. Оба пути платят за потерю как минимум одним round trip, и платят именно тогда, когда сеть и так перегружена. В статье разобран другой вариант: отправитель заранее добавляет в поток избыточные пакеты, и получатель восстанавливает потерянное сам, ни о чём не спрашивая. Это прямая коррекция ошибок (FEC, forward error correction) кодом Рида — Соломона.</p> <a href="https://habr.com/ru/articles/1088772/?utm_campaign=1088772&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 21 Oct 2026 12:05:13 GMT</pubDate>
      <dc:creator><![CDATA[DenisT]]></dc:creator>
      
      <category><![CDATA[сетевые технологии]]></category><category><![CDATA[linux]]></category><category><![CDATA[udp]]></category><category><![CDATA[tcp]]></category><category><![CDATA[fec]]></category><category><![CDATA[рид-соломон]]></category><category><![CDATA[c++]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Кривые Безье для обработки звука]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1097110/</guid>
      <link>https://habr.com/ru/articles/1097110/?utm_campaign=1097110&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/88/ed/8a/88ed8aa135f9401bb91c6c3e76ed6c8b.png" /><p>Казалось бы, в чём связь между графикой и звуком?</p><p>Продолжая тему расчёта цифровых фильтров, постараемся дать ответ на этот вопрос.</p> <a href="https://habr.com/ru/articles/1097110/?utm_campaign=1097110&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 21 Oct 2026 08:41:27 GMT</pubDate>
      <dc:creator><![CDATA[voldemar_d]]></dc:creator>
      
      <category><![CDATA[звук]]></category><category><![CDATA[dsp]]></category><category><![CDATA[цифровая обработка сигналов]]></category><category><![CDATA[преобразование фурье]]></category><category><![CDATA[Безье]]></category><category><![CDATA[эквалайзер]]></category><category><![CDATA[ких-фильтр]]></category><category><![CDATA[ачх]]></category><category><![CDATA[исходный код]]></category><category><![CDATA[фильтрация]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Асинхронное ядро для ShuttleEngine: Lock‑Free планировщик корутин с ускорением 25 х на i9-14900KF]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096374/</guid>
      <link>https://habr.com/ru/articles/1096374/?utm_campaign=1096374&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/c3/c7/a8/c3c7a8b5ddfb796daaa8846e20221bfe.jpg" /><p>Разработка графического движка на Vulkan API требует параллельного выполнения задач: сборки командных буферов, стриминга ресурсов и генерации кадров.</p><p>В этой статье описана архитектура библиотеки shuttle_async, написанной на бесстековых корутинах C++23. Ниже подробно разобрано устройство многопоточного планировщика Work Stealing на деках Chase-Lev, механизм снижения избыточных пробуждений потоков (Coalesced Wake-ups), а также логика работы Immediate-режима запуска, миграция контекста в котором может приводить к нарушению инвариантов Structured Concurrency.</p> <a href="https://habr.com/ru/articles/1096374/?utm_campaign=1096374&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 20 Oct 2026 11:48:17 GMT</pubDate>
      <dc:creator><![CDATA[shagunov]]></dc:creator>
      
      <category><![CDATA[Async]]></category><category><![CDATA[c++]]></category><category><![CDATA[coroutines]]></category><category><![CDATA[threadpool]]></category><category><![CDATA[lock-free]]></category><category><![CDATA[structured concurrency]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Множество Мандельброта — объемная картина? Выпуклая? И почему из 120 картин кажутся только две?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1095658/</guid>
      <link>https://habr.com/ru/articles/1095658/?utm_campaign=1095658&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/13/bb/0d/13bb0d388b8dd432f765bf99f7d09f6f.jpg" /><p>Это фрагмент множество Мандельброта и я его описал в википедии:<br><a href="https://commons.wikimedia.org/wiki/File:Mandelbrot_Set_Image_118.png" rel="noopener nofollow">https://commons.wikimedia.org/wiki/File:Mandelbrot_Set_Image_118.png</a></p><p>А вот скажите... Кажется ли вам что <strong>объемная картина?</strong> <strong>Выпуклая?</strong> Особенно синий! А почему? Это же очень интересно! Говорят что да. Это мощный оптический эффект трехмерности на плоском рисунке. Наш мозг, привыкший считывать распределение света и тени в реальном мире, мгновенно интерпретирует эти плавные градиенты как трехмерный рельеф, хотя на самом деле мы смотрим на абсолютно плоскую двухмерную проекцию.</p> <a href="https://habr.com/ru/articles/1095658/?utm_campaign=1095658&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 20 Oct 2026 06:00:33 GMT</pubDate>
      <dc:creator><![CDATA[aokoroko]]></dc:creator>
      
      <category><![CDATA[c++]]></category><category><![CDATA[mandelbrot set]]></category><category><![CDATA[множество мандельброта]]></category><category><![CDATA[программирование]]></category><category><![CDATA[алгоритмы]]></category><category><![CDATA[математика]]></category><category><![CDATA[фракталы]]></category><category><![CDATA[визуализация]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[HurriCache: как мы подружили строгую типизацию с RESP‑коннектором]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096284/</guid>
      <link>https://habr.com/ru/articles/1096284/?utm_campaign=1096284&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Спустя некоторое время экспериментов с&nbsp;HurriCache я пришёл к&nbsp;важному выводу: чтобы существующие проекты могли попробовать решение с&nbsp;минимумом изменений, нужен способ быстрого входа без&nbsp;переписывания кода.</p><p>Строгая типизация в&nbsp;HurriCache&nbsp;—&nbsp;осознанный выбор. Мы явно создаём скаляры (целые числа, числа с&nbsp;плавающей точкой, байтовые массивы) и контейнеры (List, Vector, Queue, OrderedSet, HashSet, SortedMap, HashMap) без&nbsp;ленивого приведения типов. Это даёт предсказуемость поведения и контроль над памятью, но&nbsp;повышает порог входа: нельзя просто взять и «подставить» HurriCache вместо Redis, не&nbsp;меняя семантику работы с&nbsp;данными.</p><p>Чтобы решить эту проблему, мы добавили RESP‑коннектор, совместимый с&nbsp;Redis‑клиентами. И сразу столкнулись с&nbsp;фундаментальными различиями моделей данных: то, что&nbsp;в&nbsp;Redis «просто строка», в&nbsp;HurriCache требует явного типа и стратегии создания.</p> <a href="https://habr.com/ru/articles/1096284/?utm_campaign=1096284&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 19 Oct 2026 13:10:39 GMT</pubDate>
      <dc:creator><![CDATA[AlexB2012]]></dc:creator>
      
      <category><![CDATA[redis]]></category><category><![CDATA[grpc]]></category><category><![CDATA[cluster]]></category><category><![CDATA[cache]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Задачи из Jira и GitHub, встречи и заметки в одном окне: полгода соло‑разработки на Qt 6 / C++20]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096258/</guid>
      <link>https://habr.com/ru/articles/1096258/?utm_campaign=1096258&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/90/f8/53/90f853c1b1891246e104c524021c8880.png" /><p>Утро у&nbsp;меня начиналось с&nbsp;вкладки трекера, вкладки календаря, заметок и пары PR, и полгода назад я начал делать себе десктопное приложение, которое собирает это в&nbsp;одно окно с&nbsp;клавиатуры. Ниже&nbsp;— что&nbsp;внутри и где я по&nbsp;дороге наступил на&nbsp;грабли: 13&nbsp;трекеров через один дескриптор, все данные в&nbsp;одном JSON с&nbsp;миграциями и машиной времени, Vim‑клавиши по&nbsp;физическому месту клавиши и задача, которую подсказывает git‑ветка. Называется Tabless, код открыт под&nbsp;MIT.</p> <a href="https://habr.com/ru/articles/1096258/?utm_campaign=1096258&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Как это устроено</a>]]></description>
      
      <pubDate>Mon, 19 Oct 2026 11:57:09 GMT</pubDate>
      <dc:creator><![CDATA[luxaeterna13]]></dc:creator>
      
      <category><![CDATA[Qt 6]]></category><category><![CDATA[QML]]></category><category><![CDATA[local-first]]></category><category><![CDATA[open source]]></category><category><![CDATA[планировщик]]></category><category><![CDATA[Jira]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[Vim]]></category><category><![CDATA[desktop]]></category><category><![CDATA[C++20]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Читаем DataMatrix с конвейера: открытое сравнение четырёх библиотек на 1368 синтетических кадрах]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096110/</guid>
      <link>https://habr.com/ru/articles/1096110/?utm_campaign=1096110&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/75/bb/31/75bb31e549b67c79f81f60956f1281fa.jpg" /><p>На производстве код «Честного знака» читает камера над лентой, и символ на кадре мелкий — 2–3 пикселя на модуль, повёрнутый, смазанный, на изогнутом боку бутылки. Мы сравнили, как с такими кадрами справляются ZXing, zxing-cpp, libdmtx и наша библиотека dmr. Кадры, ожидаемые строки и скрипты замера выложены — любую цифру можно проверить.</p><p>Коротко: — на 1368 синтетических кадрах dmr прочитал 82 %, zxing-cpp — 70 %, libdmtx — 65 %, ZXing (Java) — 3 %; — ложных чтений — ноль у всех четырёх библиотек; — dmr надёжно читает от 1,4 пикселя на модуль и при любом угле поворота; — zxing-cpp примерно в 2,5 раза быстрее; — есть условия, где соперники читают больше dmr, — разбираем их в статье.</p> <a href="https://habr.com/ru/articles/1096110/?utm_campaign=1096110&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Таблицы, графики и данные</a>]]></description>
      
      <pubDate>Mon, 19 Oct 2026 08:17:14 GMT</pubDate>
      <dc:creator><![CDATA[Aleksei_N]]></dc:creator>
      
      <category><![CDATA[DataMatrix]]></category><category><![CDATA[Честный знак]]></category><category><![CDATA[маркировка]]></category><category><![CDATA[GS1]]></category><category><![CDATA[штрихкод]]></category><category><![CDATA[распознавание]]></category><category><![CDATA[машинное зрение]]></category><category><![CDATA[zxing]]></category><category><![CDATA[libdmtx]]></category><category><![CDATA[бенчмарк]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Русский язык в программировании. РУСИ++]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1069968/</guid>
      <link>https://habr.com/ru/articles/1069968/?utm_campaign=1069968&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/401/88a/309/40188a30974546a1b9417e4894464de0.png" /><p>Статья посвящена системному программированию на русском языке с C-подобным синтаксисом. Компилятор для языков программирования РУСИ, РУСИ++ и объектный-РУСИ создан путём модификации и пересборки компилятора GCC 14й версии с превращением его в полноценный русско-английский билингвальный компилятор. Отдельно дана инструкция модификации русской раскладки клавиатуры для добавления в неё фигурных, угловых и квадратных скобок - дабы не переключаться и не терять поток.</p> <a href="https://habr.com/ru/articles/1069968/?utm_campaign=1069968&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать::Далее();</a>]]></description>
      
      <pubDate>Sat, 17 Oct 2026 18:18:11 GMT</pubDate>
      <dc:creator><![CDATA[artrades]]></dc:creator>
      
      <category><![CDATA[си]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[linux]]></category><category><![CDATA[русский язык]]></category><category><![CDATA[си++]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Shared memory в ROS 2 Humble: CycloneDDS + iceoryx на практике]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1095648/</guid>
      <link>https://habr.com/ru/articles/1095648/?utm_campaign=1095648&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/fb/95/38/fb95381777db08b90b2c070273ab99b8.jpeg" /><p>Shared memory в ROS 2 это буквально чит-код на бесплатное ускорение? Одна строка в конфиге, и мегабайтные сообщения летят через общую память, а не через сеть, но ros2 node list показывает пустой список, хотя всё работает. Разбираемся в нюансах и фичах механизмов shm и  zero-copy на примере ROS2 Humble + CycloneDDS.</p> <a href="https://habr.com/ru/articles/1095648/?utm_campaign=1095648&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 17 Oct 2026 13:49:42 GMT</pubDate>
      <dc:creator><![CDATA[remove-rf]]></dc:creator>
      
      <category><![CDATA[ros2]]></category><category><![CDATA[shm]]></category><category><![CDATA[perfomance]]></category><category><![CDATA[microservices]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Препарируем Solocraft в MMORPG: как математически пересобрать групповой контент 3.3.5a под одного игрока]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1095238/</guid>
      <link>https://habr.com/ru/articles/1095238/?utm_campaign=1095238&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/42/6b/91/426b918875d6a977cb4dc8ae9a35abaf.png" /><p>Классические MMORPG золотой эпохи (в частности, стек World of Warcraft времен Wrath of the Lich King) архитектурно строились вокруг так называемой «святой троицы»: танк, целитель, бойцы урона. Вся математика подземелий&nbsp;— тайминги способностей боссов, механики переагривания, периодический урон (DoT), дебаффы и энкаунтеры&nbsp;— изначально рассчитывалась на&nbsp;плотное разделение ролей между 5, 10&nbsp;или 25&nbsp;участниками.</p><p>Однако демография игроков за 15&nbsp;лет кардинально изменилась: порог входа по&nbsp;свободному времени вырос, а&nbsp;потребность в&nbsp;исследовании старого контента осталась. В&nbsp;сообществе эмуляторов (TrinityCore, AzerothCore и кастомных форков) сформировалось целое направление&nbsp;— <strong>Solocraft</strong>.</p><p>Ниже разберем, с&nbsp;какими геймдизайнерскими и математическими вызовами сталкиваются разработчики при&nbsp;адаптации мультиплеерных энкаунтеров под&nbsp;соло‑прохождение, на&nbsp;примере архитектуры проекта WoW Prime.</p> <a href="https://habr.com/ru/articles/1095238/?utm_campaign=1095238&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 16 Oct 2026 10:49:18 GMT</pubDate>
      <dc:creator><![CDATA[Vextor23]]></dc:creator>
      
      <category><![CDATA[wow]]></category><category><![CDATA[world of warcraft]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Почему подсветка док-станции Flydigi выглядит дёшево и как я написал свою]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1095040/</guid>
      <link>https://habr.com/ru/articles/1095040/?utm_campaign=1095040&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/3d/5d/58/3d5d584fd441c721aa578f3706f747cc.png" /><p>У меня геймпад Flydigi Vader 5 Pro и к нему док-станция Charging Dock 2 Pro. На доке 162 RGB-светодиода, и сами по себе они хорошие, а вот эффекты из фирменной Space Station выглядят дёшево: медленные анимации идут ступеньками, градиенты грязнеют в середине.</p><p>Стало интересно, виновато железо или софт. Спойлер: софт. Разобрал, как док принимает кадры, переписал эффекты с нуля и сделал свой редактор подсветки.</p> <a href="https://habr.com/ru/articles/1095040/?utm_campaign=1095040&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 16 Oct 2026 06:30:26 GMT</pubDate>
      <dc:creator><![CDATA[JustLonelyDog]]></dc:creator>
      
      <category><![CDATA[flydigi]]></category><category><![CDATA[rgb]]></category><category><![CDATA[светодиоды]]></category><category><![CDATA[oklab]]></category><category><![CDATA[hid]]></category><category><![CDATA[qt6]]></category><category><![CDATA[c++]]></category><category><![CDATA[реверс-инжиниринг]]></category><category><![CDATA[цветовые пространства]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Заводим C++ корутины на микроконтроллере]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1095012/</guid>
      <link>https://habr.com/ru/articles/1095012/?utm_campaign=1095012&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Мне давно было интересно попробовать запустить корутины на микроконтроллере, но стандарт С++ совершенно не учитывает мир embedded с его ограничениями и не даёт возможности создать корутину в статической памяти.</p><p>Недавно я обнаружил что LLM агенты уже могут реализовывать довольно сложные задачи самостоятельно с неплохим качеством кода.</p><p>И тут я понял - чего бы не попробовать сделать своё расширение для clang с корутинами, которые гарантированно не используют аллокации и поверх этого реализовать небольшую операционную систему на корутинах для микроконтроллера.</p> <a href="https://habr.com/ru/articles/1095012/?utm_campaign=1095012&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 15 Oct 2026 20:53:42 GMT</pubDate>
      <dc:creator><![CDATA[rus084]]></dc:creator>
      
      <category><![CDATA[корутины]]></category><category><![CDATA[микроконтроллеры]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[MicroBuild: DOOM‑Style движок на AVR]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1094808/</guid>
      <link>https://habr.com/ru/articles/1094808/?utm_campaign=1094808&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/e5/be/46/e5be4657bdb49429ecd6f0cd7ab989cd.png" /><p>Что, если я скажу, что&nbsp;на 8-битном микроконтроллере AVR можно запустить честный секторный 3D‑движок? Не&nbsp;рейкастер, не&nbsp;вращающийся куб, а&nbsp;настоящий Build Engine в&nbsp;духе Duke Nukem 3D&nbsp;— с&nbsp;порталами, секторами и перепадами высот?</p><p>Все знают, что Джон Кармак в 1993&nbsp;году сделал DOOM. Гораздо меньше людей знают, что Кен Сильверман тогда&nbsp;же пытался разобраться в&nbsp;BSP‑деревьях Кармака, не&nbsp;понял их&nbsp;— и изобрёл свой движок. На&nbsp;нём потом взлетел Duke Nukem 3D. Я пошёл по&nbsp;его стопам&nbsp;— только вместо ПК&nbsp;— AVR, без&nbsp;FPU, без&nbsp;DMA и с&nbsp;крошечным стеком </p><p>В&nbsp;статье&nbsp;— как&nbsp;я боролся за&nbsp;каждый такт: Fixed‑Point арифметика, бинарное измерение углов, таблицы синусов, замена рекурсии на&nbsp;очередь задач. И почему 12&nbsp;FPS на&nbsp;AVR&nbsp;— это повод для&nbsp;гордости.</p> <a href="https://habr.com/ru/articles/1094808/?utm_campaign=1094808&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 15 Oct 2026 12:47:57 GMT</pubDate>
      <dc:creator><![CDATA[RootTool]]></dc:creator>
      
      <category><![CDATA[AVR]]></category><category><![CDATA[Arduino]]></category><category><![CDATA[DOOM]]></category><category><![CDATA[Build Engine]]></category><category><![CDATA[псевдо-3D]]></category><category><![CDATA[рендеринг]]></category><category><![CDATA[fixed-point]]></category><category><![CDATA[микроконтроллеры]]></category><category><![CDATA[геймдев]]></category><category><![CDATA[порталы]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
