<?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/posts/</link>
    <description><![CDATA[C++ – типизированный язык программирования]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Mon, 27 Apr 2026 07:16:45 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[Пост @viordash — Искусственный интеллект (+3) — 25.04.2026 18:05]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1027882/</guid>
    <link>https://habr.com/ru/posts/1027882/?utm_campaign=1027882&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Оптимизация контекста для Claude Code на большом проекте (иногда и 50% экономия токенов)</strong></p><p>Работаю над большим C++ проектом - реализация сетевого протокола. Использую Claude Code как основной инструмент. Со временем заметил: каждый новый чат начинается с того, что агент долго читает README.md, который разросся до 1000+ строк и 60 КБ.</p><p><strong>Проблема</strong></p><p>В CLAUDE.md была прописана команда читать README.md в начале каждого диалога, агенту нужно дать контекст проекта. Пока проект был небольшим это работало нормально. Но README рос вместе с проектом и в итоге стал содержать всё: архитектуру, логику DTLS, настройки веб-интерфейса, описание протокола, инструкции по сборке.</p><p>И как результат:</p><ul><li><p>Агент тратит тысячи токенов на анализ файла до начала работы</p></li><li><p>Если задача касается только фронтенда, модель всё равно загружает детали реализации ядра протокола. Лишний контекст снижает точность ответов.</p></li></ul><p><strong>Решение</strong></p><p>Вместо одного большого файла использовать иерархию маленьких, в отдельной папке <code>claude-context/</code>:</p><pre><code>claude-context/
├── context-claude.md       # общая архитектура и навигация (~90 строк)
├── context-AC-claude.md    # Access Controller
├── context-WTP-claude.md   # WTP Agent
├── context-WEB-claude.md   # Web Interface
└── context-TESTS-claude.md # тесты
</code></pre><p>Главный файл <code>context-claude.md</code> содержит краткое описание проекта и таблицу-навигатор: какой файл читать для какой области. В дочерних файлах описана детализация по модулям, каждый 100-130 строк.</p><p>Инструкция в CLAUDE.md теперь выглядит так:</p><blockquote><p>“Start each new conversation by reading claude-context/context-claude.md. For deeper context on specific areas, read the relevant file from that directory.”</p></blockquote><p>Агент читает главный файл (90 строк), понимает область задачи, подгружает только нужный дочерний контекст.</p><p><strong>Замер</strong></p><p>Чтобы проверить эффект, я поставил Claude одну и ту же задачу в двух разных конфигурациях:</p><blockquote><p>“Добавь тесты для WtpConfigController и WtpRadioController, проверь что если WTP address не строка, то возникает исключение std::runtime_error”</p></blockquote><pre><code>| Параметр             | README.md (60 КБ) | Иерархический контекст | Разница  |
| :------------------- | :---------------- | :--------------------- | :------- |
| Токены на сообщения  | 36.8k             | 17.6k                  | -53%     |
| Всего токенов        | 56.7k             | 37.6k                  | -34%     |
| Рост usage за задачу | +11%              | +6%                    | В 2 раза |
| Скорость анализа     | Заметная пауза    | Почти мгновенный старт |          |
</code></pre><p><strong>Важный момент</strong></p><p>README.md остался нетронутым - это документация для людей. Файлы в <code>claude-context/</code> - отдельный артефакт, написанный под AI: плотно, без лирики, с ASCII-схемами и таблицами. Я старался не смешивать два разных назначения в одном файле.</p><p>При небольшом проекте в этом подходе смысла нет, накладные расходы на поддержку двух наборов документации не оправдаются.</p> <a href="https://habr.com/ru/posts/1027882/?utm_campaign=1027882&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 25 Apr 2026 15:05:10 GMT</pubDate>
    <dc:creator><![CDATA[viordash]]></dc:creator>
      
      <category><![CDATA[claude code]]></category><category><![CDATA[llm]]></category><category><![CDATA[оптимизация]]></category><category><![CDATA[контекстное окно]]></category><category><![CDATA[документация]]></category><category><![CDATA[ai-агенты]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @andrey_chuyan — DevOps (+4) — 25.04.2026 13:18]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1027802/</guid>
    <link>https://habr.com/ru/posts/1027802/?utm_campaign=1027802&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<iframe id="69ec942542c0bc03ac2e960a" src="https://embedd.srv.habr.com/iframe/69ec942542c0bc03ac2e960a" class="embed_video embed__content" allowfullscreen="true"></iframe><p><strong>🌲 Открываем регистрацию на Дебаг Кемп</strong></p><p>Мы придумали формат, который давно хотели сами: выбираешься из города, два дня в сосновом лесу на Карельском перешейке — маршрут, костёр, мастер-классы по выживанию, нетворкинг без слайдов и питчей. Просто люди, с которыми интересно, и никакого Slack-а.</p><p><strong>📅 6–7 июня 2026 (выходные)</strong> <strong>👥 Всего 25 мест</strong> — маленький формат, это принципиально.</p><p>Цена растёт по мере приближения к дате. Оплатить можно частями через сплит → <a href="https://debug-skills.timepad.ru/event/3936231/#register" rel="noopener noreferrer nofollow">регистрация</a></p><p>Если вы <a href="https://vk.com/polnyistek?w=donut_payment-232485571&amp;levelId=2501" rel="noopener noreferrer nofollow">💎 практик сообщества</a> — скидка 15% применяется при регистрации автоматически. Ещё не практик, но думаете? Сейчас самый разумный момент.</p><p>👀 <a href="https://debugskills.ru/debug-camp/" rel="noopener noreferrer nofollow">Узнать больше</a> · 📝 <a href="https://debug-skills.timepad.ru/event/3936231/" rel="noopener noreferrer nofollow">Регистрация</a></p><p>Вопросы — в чат, мы там живём.</p> <a href="https://habr.com/ru/posts/1027802/?utm_campaign=1027802&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 25 Apr 2026 10:18:16 GMT</pubDate>
    <dc:creator><![CDATA[andrey_chuyan]]></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[it-сообщество]]></category><category><![CDATA[конференция]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @PvsTeam — Блог компании PVS-Studio (+1) — 24.04.2026 11:24]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1027386/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1027386/?utm_campaign=1027386&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Тема неопределённого поведения (UB) в языке C++ освещается и обсуждается многие годы, но это не значит, что она исчерпала себя. Это плата, которую программисты отдают за эффективные оптимизации кода, такие как удаление ряда проверок.  </p><p>C++ - опасный инструмент, и не помешает лишний раз напомнить, как правильно держать его в руках. Причём с приходом инструментов вайб-кодинга ситуация, скорее всего, даже ухудшится, так как станет ещё сложнее удерживать неопределённое поведение под контролем. В докладе обсудили эту тему, заглянув в будущее. </p><iframe id="69eb28684b66d902aa913a13" src="https://embedd.srv.habr.com/iframe/69eb28684b66d902aa913a13" class="embed_video embed__content" allowfullscreen="true"></iframe><p>Полезные ссылки из доклада:</p><ul><li><p><a href="https://pvs-studio.ru/ru/blog/posts/cpp/0374/" rel="noopener noreferrer nofollow">Undefined behavior ближе, чем вы думаете</a></p></li><li><p><a href="https://pvs-studio.ru/ru/blog/posts/cpp/1024/" rel="noopener noreferrer nofollow">Ложные представления программистов о неопределённом поведении</a></p></li><li><p><a href="https://pvs-studio.ru/ru/blog/posts/cpp/1298/" rel="noopener noreferrer nofollow">Подножка для AI в виде UTF-8</a></p></li><li><p><a href="https://pvs-studio.ru/ru/blog/posts/cpp/1215/" rel="noopener noreferrer nofollow">Путеводитель C++ программиста по неопределённому поведению</a></p></li></ul><p><em>Примечание. </em>Был задан вопрос про безопасные компиляторы (ГОСТ Р 71206—2024). Подробнее с этой темой можно познакомиться здесь:&nbsp;<a href="https://pvs-studio.ru/ru/webinar/rbpo/content/#Process12" rel="noopener noreferrer nofollow">Использование безопасной системы сборки программного обеспечения</a></p><p>Сделайте свой проект чистым с PVS-Studio. Месяц бесплатного использования по&nbsp;<a href="https://pvs-studio.ru/training_webinar" rel="noopener noreferrer nofollow">промокоду</a>.</p> <a href="https://habr.com/ru/posts/1027386/?utm_campaign=1027386&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 24 Apr 2026 08:24:56 GMT</pubDate>
    <dc:creator><![CDATA[PvsTeam (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[undefined behavior]]></category><category><![CDATA[доклад]]></category><category><![CDATA[неопределённое поведение]]></category><category><![CDATA[вайбкодинг]]></category><category><![CDATA[cpp]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @JordanCpp — C (+4) — 20.04.2026 14:17]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1025592/</guid>
    <link>https://habr.com/ru/posts/1025592/?utm_campaign=1025592&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Переосмысление библиотеки <a href="https://github.com/JordanCpp/LDL" rel="noopener noreferrer nofollow">LDL</a>.</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/8eb/316/594/8eb3165940792d960cabf23cb81bb10c.jpg" width="802" height="632"></figure><p>Я полностью пересмотрел концепцию библиотеки LDL.</p><p><strong>Что такое LDL?</strong><br>Это графическая библиотека с единым API для всех систем как старых, так и новых.</p><p>Раньше я писал её на C++98, что давало хорошую портабельность. Но сейчас я пересмотрел многие тезисы, которые декларировал на GitHub, чтобы наконец добраться до первого релиза.</p><p>Новая стратегия</p><p>Я решил выпускать релизы&nbsp;<strong>без реализации полного функционала</strong>&nbsp;(графика, звук, шрифты и т.д.) постепенно, итеративно.</p><ul><li><p>Перешёл на&nbsp;<strong>C89</strong>&nbsp;для максимальной переносимости. Это не только DOS или Windows 3.x, но и старые системы вроде Solaris, PlayStation 1 и другие.</p></li><li><p>Для&nbsp;<strong>первого релиза</strong>&nbsp;реализую минимальный базовый функционал: графику (OpenGL, Vulkan), окна и события. По возможностям аналог GLFW.</p></li><li><p>С каждым следующим релизом буду добавлять: 2D-рендер, звук, шрифты и прочее.</p></li></ul><p>Лицензия и целевые платформы</p><ul><li><p>Лицензия меняется на&nbsp;<strong>LGPLv3</strong>.</p></li><li><p>На старте поддерживаются&nbsp;<strong>Windows и Linux</strong>.</p></li></ul><p>Качество и инструменты</p><p>При разработке использую:</p><ul><li><p>AddressSanitizer (ASan)</p></li><li><p>UndefinedBehaviorSanitizer (UBSan)</p></li><li><p>Различные анализаторы кода</p></li></ul><p>Я считаю, что такая стратегия полезнее, чем годами доводить библиотеку до версии 1.0 в офлайн-режиме.</p><p><strong>Примеры и бэкенды</strong></p><ul><li><p>Добавлю&nbsp;<strong>десятки примеров</strong>&nbsp;с OpenGL 1.x, OpenGL 3.x и Vulkan.</p></li><li><p>Буду добавлять&nbsp;<strong>бэкенды для LDL</strong>: не только под ОС, но и поверх других графических библиотек — SDL, SFML, GLFW и т.д.</p></li><li><p><strong>API остаётся единым</strong>&nbsp;для всех бэкендов.</p></li></ul><p>Это позволит сразу добавить поддержку звука и шрифтов (через бэкенды), а в нативных версиях реализовывать их позже.</p><p>&nbsp;<strong>2D-рендер без границ</strong></p><p>Одной из главных задач LDL я вижу создание&nbsp;<strong>единого 2D-интерфейса</strong>, который стирает различия между поколениями графики.</p><p>Вам не нужно думать о том, что находится в системе: современная видеокарта с&nbsp;<strong>Vulkan</strong>, старый ускоритель с&nbsp;<strong>OpenGL 1.2</strong>&nbsp;или вообще только центральный процессор (<strong>Software Rendering</strong>).</p><ul><li><p><strong>Единый интерфейс</strong>: Вы используете одни и те же команды для рисования пикселей, линий и спрайтов.</p></li><li><p><strong>Адаптивность</strong>: LDL сам выберет наиболее эффективный способ вывода изображения. На современной системе это будет аппаратное ускорение, а на «железе» без видеокарты оптимизированный программный растеризатор.</p></li><li><p><strong>Визуальная честность</strong>: Ваш визуальный стиль останется неизменным, на чем бы он ни запускался. Это дает возможность делать игры и приложения, которые выглядят и работают одинаково и на ретро-ноутбуке, и на современном мониторе.</p></li></ul><p><strong>Философия: Машина времени в вашем коде</strong></p><p>Зачем тратить силы на поддержку систем, которые многие считают «трупами»?</p><p><strong>1. Борьба с цифровым забвением</strong></p><p>Современный софт живет 3–5 лет. Мы выбрасываем железо не потому, что оно сломалось, а потому, что софт стал слишком тяжелым и ленивым. LDL — это протест против «запланированного устаревания». Я хочу, чтобы код, написанный сегодня, мог дышать в железе любой эпохи.</p><p><strong>2. Инженерный аскетизм</strong></p><p>Когда у тебя гигабайты памяти, ты перестаешь ценить каждый байт. Написание библиотеки под C89 для слабого железа — это духовная практика для программиста. Это возвращение к искусству находить изящные решения в условиях жестких ограничений. Каждый сэкономленный такт процессора — это дань уважения инженерам прошлого.</p><p><strong>3. Преемственность поколений</strong></p><p>Мы стоим на плечах гигантов, но часто забываем их имена. LDL сохраняет возможность для диалога между эпохами. Это инструмент, который позволяет современному разработчику почувствовать «металл» старых машин, не теряя связи с современными технологиями вроде Vulkan.</p><p><strong>Итог</strong></p><p>LDL — это&nbsp;<strong>Little Directmedia Layer</strong>. Он маленький не потому, что слабый, а потому, что в нем нет ничего лишнего. Это попытка создать код, который будет принадлежать не конкретной версии ОС, а истории программирования в целом.</p><p>Один API. Один код. Тридцать лет компьютерной истории.</p> <a href="https://habr.com/ru/posts/1025592/?utm_campaign=1025592&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 20 Apr 2026 11:17:08 GMT</pubDate>
    <dc:creator><![CDATA[JordanCpp]]></dc:creator>
      
      <category><![CDATA[c89]]></category><category><![CDATA[c++]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @A-G-B — Блог компании PVS-Studio (+4) — 30.03.2026 17:19]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1017014/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1017014/?utm_campaign=1017014&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Всё, что нужно знать для начала работы в PVS-Studio</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/a9a/ced/548/a9aced548cf807529f37c7f0f605f355.png" width="975" height="549"></figure><p>Статический анализатор PVS-Studio — это инструмент для поиска ошибок в коде на протяжении всего жизненного цикла проекта. <br>В новой статье разберём основные <a href="https://pvs-studio.ru/ru/blog/posts/1358/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=readmore&amp;utm_content=article" rel="noopener noreferrer nofollow">особенности анализатора PVS-Studio</a>, сценарии и варианты анализа, а также узнаем всё, что нужно знать для начала работы с инструментом.</p> <a href="https://habr.com/ru/posts/1017014/?utm_campaign=1017014&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 30 Mar 2026 14:19:03 GMT</pubDate>
    <dc:creator><![CDATA[A-G-B (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[pvs-studio]]></category><category><![CDATA[static analysis]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[с++]]></category><category><![CDATA[c#]]></category><category><![CDATA[java]]></category><category><![CDATA[рбпо]]></category><category><![CDATA[sast]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @ilnurKh — C++ — 22.03.2026 23:27]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1013450/</guid>
    <link>https://habr.com/ru/posts/1013450/?utm_campaign=1013450&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Сравнивал разные методы сделать call-once (а точнее инициализацию синглтона) - далее небольшие заметки.</p><p>Итак, нам нужно создать какой-то объект, пусть даже что-то нетривиальное (для определённости можно представлять что мы хотим прочитать данные из файла/эмбеддет ресурсов и разложить эти данные в хеш-мапу для будущих чтений). Рассмотрим следующие варианты:</p><ol><li><p>статичный глобальный объект, вычисление вызывается в конструкторе</p></li><li><p>статичный глобальный объект + std::call_once</p></li><li><p>статичный локальный объект в функции, вычисление вызывается в конструкторе</p></li></ol><p>Чтобы в годболте видеть что и где вызывается - определяем тип имеющий только объявления методов (это заставит компилятор ставить явный <code>call</code>)</p><pre><code class="cpp">struct TSomeExternal {
    TSomeExternal(int);
    ~TSomeExternal();

    int DoCalc();
    char Data[60]; // просто чтобы было проще увидеть
};
</code></pre><p>Особенности <strong>первого варианта</strong>:</p><ul><li><p>вычисление "до main"</p></li><li><p>неконтролируемый порядок инициализации глобальных ответов =&gt; нельзя иметь зависимости между такими объектами</p></li><li><p>вычисление только в рамках 1 потока</p></li><li><p>уникальный плюс: нет проверок "на горячем цикле" - при обращении к объекту вызывающая функция может считать что данные уже готовы (но именно этот плюс стоит нам второго пункта)</p></li></ul><p>В <a href="https://godbolt.org/z/Pf4nvzbjh" rel="noopener noreferrer nofollow">годболте</a> можно посмотреть на func1 - видно что она скомпилилась просто в забор поинтера, и <code>call</code></p><pre><code class="cpp">TSomeExternal GlobalValue(7);
int func1() {
    int x = GlobalValue.DoCalc();
    return x + 14;
}
</code></pre><p>Также видно что были порождены - указание что нужно разместить объект</p><pre><code>GlobalValue:
        .zero   60
</code></pre><p>А также <code>_GLOBAL__sub_I_example.cpp</code> - там видно, что вызывается конструктор, и регистрируется указатель на деструктор в пост-колбеках (<code>__cxa_atexit</code>)</p><p><strong>Второй вариант</strong> (более правдоподобно было бы внести call_once внутрь глобального объекта, но для простоты сравнения сделал как ниже)</p><pre><code class="cpp">static std::once_flag flag;
static std::unique_ptr&lt;TSomeExternal&gt; ptr;
void init() {ptr = std::make_unique&lt;TSomeExternal&gt;(7);}

int func2() {
    std::call_once(flag, init);
    int x = ptr-&gt;DoCalc();
    return x + 14;
}
</code></pre><ul><li><p>настоящая инициализация случается только в момент первого использования (ленивая инициализация). Это может быть как плюс (позволяет не тратиться на инициализацию если данные не будут использоваться), так и минус (первые запросы/итерации будут медленными)</p></li><li><p>разные инициализаторы данных вполне могут работать одновременно из разных потоков</p></li><li><p>имхо - дорогой основной цикл (очень много инструкций до <code>TSomeExternal::DoCalc</code>) - это всё подготовка вызова <code>call pthread_once</code>, который будет выполнен каждый раз</p></li></ul><p><strong>Третий вариант</strong> <a href="https://godbolt.org/z/8Goav3o6v" rel="noopener noreferrer nofollow">годболт</a></p><pre><code class="cpp">int func3() {
    static TSomeExternal prepared = {7};
    int x = prepared.DoCalc();
    return x + 14;
}
</code></pre><ul><li><p>в рантайме есть проверка - но это проверка и так нужного нам указателя на null</p></li></ul><pre><code>push    rbx
movzx   eax, byte ptr [rip + guard variable for func3()::prepared]
test    al, al
je      .LBB0_1
</code></pre><ul><li><p>если указатель не нулевой, то переход не будет выполнен и мы сразу переходим к</p></li></ul><pre><code>        lea     rdi, [rip + func3()::prepared]
        call    TSomeExternal::DoCalc()@PLT
</code></pre><ul><li><p>в случае если указатель не готов, то подготовка случается под блокировкой (<code>__cxa_guard_acquire</code>)</p></li><li><p>конкретно в годболте не видно, но создаются слоты для <code>guard variable for func3()::prepared</code> и <code>func3()::prepared</code> (в этом смысле разницы со вторым вариантом мало)</p></li></ul><p>Итого: ленивое вычисление, также возможна многопоточная инициализация, а также дешёвый success-path</p><p>Я бы назвал относительным неудобством третьего варианта, что указатель оказывается скрыт внутри функции, и надо сделать ещё доп действие чтобы использовать объект из нескольких функций. Пример такой обёртки <a href="https://github.com/ytsaurus/ytsaurus/blob/70adf41209de55a50cd90685471c838782197360/util/generic/singleton.h#L115" rel="noopener noreferrer nofollow">Singleton</a>.</p> <a href="https://habr.com/ru/posts/1013450/?utm_campaign=1013450&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 22 Mar 2026 20:27:45 GMT</pubDate>
    <dc:creator><![CDATA[ilnurKh]]></dc:creator>
      
      <category><![CDATA[call_once]]></category><category><![CDATA[singleton]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @FaryaRos — Linux (+3) — 16.03.2026 19:22]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1010982/</guid>
    <link>https://habr.com/ru/posts/1010982/?utm_campaign=1010982&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>NixOS: идея, до&nbsp;которой индустрия доросла только сейчас.</strong></p><p>Кажется, NixOS наконец выходит из&nbsp;категории системы «для своих» и становится все заметнее в&nbsp;инженерной среде. Это закономерно: он очень точно попал в&nbsp;проблемы, с&nbsp;которыми команды массово столкнулись только в&nbsp;последние годы.</p><p>История началась в 2003&nbsp;году, когда исследователь Элко Долстра и его коллеги в&nbsp;Утрехтском университете запустили проект Nix. Это исследовательский проект, который включал пакетный менеджер и собственный декларативный язык. Идея&nbsp;была сделать так, чтобы пакеты и зависимости собирались предсказуемо, не&nbsp;конфликтовали между собой и не&nbsp;превращали систему в&nbsp;хаос после очередного обновления. Чуть позже из&nbsp;этой логики вырос NixOS, где тот&nbsp;же подход применили уже ко всей операционной системе.</p><p>В&nbsp;этом и&nbsp;был главный поворот. Nix с&nbsp;самого начала смотрел на&nbsp;систему не&nbsp;как&nbsp;на&nbsp;набор вручную настроенных файлов и команд, а&nbsp;как&nbsp;на&nbsp;то, что&nbsp;можно описать целиком. Пакеты хранятся изолированно, разные версии могут спокойно жить рядом, а&nbsp;состояние машины задается через конфиг. За&nbsp;счет этого обновления становятся атомарными.</p><p>Это особенно интересно на&nbsp;фоне обычных Linux‑дистрибутивов. Там текущее состояние системы часто является результатом длинной цепочки действий: что‑то поставили, что‑то удалили, где‑то поправили конфиг, где‑то забыли. В&nbsp;NixOS логика другая: ты описываешь&nbsp;желаемое состояние, а&nbsp;система приводит машину именно к&nbsp;нему. Если новая конфигурация не&nbsp;взлетела, предыдущее состояние никуда не&nbsp;исчезает.</p><p>😏 Почему NixOS набирает популярность именно сейчас? Потому что&nbsp;индустрия наконец доросла до&nbsp;его сильных сторон. Чем больше у&nbsp;команды окружений, CI/CD, инфраструктуры как&nbsp;кода и цены ошибки, тем важнее воспроизводимость и предсказуемость. То, что&nbsp;раньше выглядело как&nbsp;нишевая экзотика, сегодня все чаще выглядит как&nbsp;очень здравый инженерный выбор.</p><p><strong>Многие современные immutable‑системы по&nbsp;сути идут в&nbsp;ту&nbsp;же сторону, куда NixOS пошел еще много лет назад.</strong></p><p>А&nbsp;если хочется не&nbsp;просто прочитать про&nbsp;Nix, а&nbsp;разобраться, как&nbsp;он работает на&nbsp;практике, приходите на&nbsp;наш открытый воркшоп.</p><p>📹 Открытый воркшоп в&nbsp;рамках ИнженеркаТех Плюс, <strong>18&nbsp;марта в 19:00&nbsp;по&nbsp;МСК. </strong>Александр Сергеев из&nbsp;сообщества RULKC, Russian Linux Kernel Community, расскажет про&nbsp;Nix и функциональный подход к&nbsp;пакетам и сборке.</p><p>Если вы хотите получить полный контроль над окружением и наконец закрыть вопрос воспроизводимых сборок, этот воркшоп для&nbsp;вас. Разберем ключевые концепции Nix и наглядно покажем, чем он отличается от&nbsp;привычных систем управления пакетами.</p><p>Зарегистрироваться <a href="https://t.me/inz_infra_bot" rel="noopener noreferrer nofollow">тут</a></p> <a href="https://habr.com/ru/posts/1010982/?utm_campaign=1010982&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 16 Mar 2026 16:22:43 GMT</pubDate>
    <dc:creator><![CDATA[FaryaRos]]></dc:creator>
      
      <category><![CDATA[nix]]></category><category><![CDATA[nixos]]></category><category><![CDATA[linux]]></category><category><![CDATA[linux kernel]]></category><category><![CDATA[linux kernel development]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @PvsTeam — Блог компании PVS-Studio (+3) — 05.03.2026 09:18]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1006710/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1006710/?utm_campaign=1006710&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>🚀 <strong>Бесплатный курс для разработчиков: создаём свой язык программирования!</strong>    </p><p>Приглашаем вас пройти наш курс и разобраться, как устроены языки программирования изнутри.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/6d1/859/4ed/6d18594edc8ab53337ad2da2c996d864.png" width="1920" height="1080"></figure><p>Изначально курс делали для прохождения внутри компании, но решили, что полезного материала так много, что хочется рассказать всему миру!</p><p>Этот курс подойдёт разработчикам, которые хотят выйти за рамки повседневной разработки и глубже понять фундаментальные принципы работы кода. Да, примеры будут на C++, но сам материал гораздо шире и будет полезен программистам с любым стеком. Независимо от того, пишете вы на C++, C#, Java или любом другом языке, понимание внутренней архитектуры языков сделает вас сильнее как инженера.</p><p>В рамках курса мы шаг за шагом разберём, как создаётся язык программирования:<br> — что такое лексер и парсер и какую роль они играют;<br> — как работает семантический анализ;<br> — как происходит вычисление и обработка кода;<br> — как все эти части объединяются в единую систему.</p><p>Вы увидите, как текст программы превращается в структуру, понятную машине, и поймёте, какие решения стоят за этим процессом.</p><p>Даже если вы не планируете создавать собственный язык программирования, курс поможет чуть глубже понять, как всё это устроено "под капотом", расширить технический кругозор и по-новому взглянуть на привычные инструменты. Это хороший способ систематизировать знания, освежить базовые концепции и просто обсудить интересные темы с коллегами.</p><p>Мы постарались сделать материал одновременно понятным и практико-ориентированным: минимум абстракции ради абстракции — максимум смысла.</p><p>Если вы хотите лучше понимать, что происходит "под капотом" программирования и прокачать инженерное мышление — этот курс для вас.</p><p>👉 Подробности и доступ <a href="https://pvs-studio.ru/ru/blog/training/courses/davajte-sozdadim-yazyk-programmirovaniya/?utm_source=habr&amp;utm_medium=pvsteam" rel="noopener noreferrer nofollow">к курсу по ссылке. </a></p><p>Присоединяйтесь и изучайте программирование глубже — бесплатно!</p> <a href="https://habr.com/ru/posts/1006710/?utm_campaign=1006710&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 05 Mar 2026 06:18:00 GMT</pubDate>
    <dc:creator><![CDATA[PvsTeam (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[курс]]></category><category><![CDATA[cpp]]></category><category><![CDATA[создание языка программирования]]></category><category><![CDATA[лексер]]></category><category><![CDATA[java]]></category><category><![CDATA[c#]]></category><category><![CDATA[парсер]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @sqooph — C++ (+4) — 27.02.2026 21:08]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1004734/</guid>
    <link>https://habr.com/ru/posts/1004734/?utm_campaign=1004734&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/444/f6d/355/444f6d355cc568553703d53aacb6bb1c.jpg" width="1000" height="563"></figure><p>Прошу помощи. Не могу найти документацию на плату. Купил когда-то на а**-э*****сс, но к ней не было в комплекте вообще ничего. За время поисков удалось найти только два фрагмента схемы. Мб есть у кого такая....</p> <a href="https://habr.com/ru/posts/1004734/?utm_campaign=1004734&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 27 Feb 2026 18:08:03 GMT</pubDate>
    <dc:creator><![CDATA[sqooph]]></dc:creator>
      
      <category><![CDATA[fpga altera]]></category><category><![CDATA[datasheet]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @AleksandraUvarova — Блог компании PVS-Studio (+4) — 26.02.2026 10:31]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1003816/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1003816/?utm_campaign=1003816&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как далеко видит lookup в C++?</strong><br> </p><figure class=""><img src="https://habrastorage.org/getpro/habr//post_images/657/405/45f/65740545f75e05d3d56140167ae64f25.png"></figure><p> Хорошей практикой в C++ считается размещение функций рядом с типами, для которых они предназначены. Однако, чтобы такой подход работал корректно, важно понимать механизмы поиска имён и знать, где можно размещать функции, не нарушая правил языка. </p><p>Совсем недавно мы <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1321/" rel="noopener noreferrer nofollow">проверяли проект OpenCV</a> и нашли там довольно интересную ошибку. Рассмотрели её подробнее и написали новую статью специально для тех, кто хочет разобраться с <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1347/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=readmore&amp;utm_content=article" rel="noopener noreferrer nofollow">механизмом поиска имён в C++</a>, в частности с поиском имён по аргументам.</p> <a href="https://habr.com/ru/posts/1003816/?utm_campaign=1003816&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 26 Feb 2026 07:31:41 GMT</pubDate>
    <dc:creator><![CDATA[AleksandraUvarova (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[pvs-studio]]></category><category><![CDATA[с++]]></category><category><![CDATA[программирование]]></category><category><![CDATA[с++23]]></category><category><![CDATA[opencv]]></category><category><![CDATA[opensourse]]></category><category><![CDATA[качество кода]]></category><category><![CDATA[static analysis]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[lookup]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @JordanCpp — Старое железо (+4) — 21.02.2026 15:53]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1002196/</guid>
    <link>https://habr.com/ru/posts/1002196/?utm_campaign=1002196&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/882/908/6b0/8829086b0e7651718f99b67de3bb3433.png" width="594" height="789"></figure><p>Приветствую, Хабравчане!</p><p><strong>Задумывались ли вы, насколько высок современный налог на железо в разработке ПО?</strong></p><p>У меня в руках настоящий «старичок» из 2002-го: сокет 478, матплата GA-8IR2003, Celeron 1700 МГц (по силам как Pentium III на 1 ГГц, но с поддержкой SSE2), 2 Гб ОЗУ, GeForce 4 MX и верный HDD на 40 Гб.</p><p>Я хочу написать о нем статью, но не в стиле ностальгический обзор ретро-игр такого в сети полно. Моя цель вдохнуть в него жизнь и проверить, пригоден ли этот 23-летний дедушка для&nbsp;<strong>современной разработки</strong>.</p><p>На борт успешно встают Windows 7 и Debian 11, что открывает доступ к актуальному софту, IDE и библиотекам. Хочется понять: реально ли на таком непотребстве поднять бэкенд на C# или собрать что-то серьезное на C++?</p><p>Запасной вариант, если основному ПК не хватит инструкций.</p><p>В запасе ПК: Athlon x4 640, 8гб ОЗУ, ssd 256.</p><p>На нем, отключая ядра и понижая частоту можно добиться симуляции ПК начиная с 2000-ого по 2010 год. Думаю этот вариант будет предпочтительнее. Но начну конечно с celeron'а.</p><p><strong>Что планирую потестить:</strong></p><ol><li><p><strong>C# под Linux:</strong>&nbsp;Запустить бэкенд и посмотреть, не «умрет» ли система.</p></li><li><p><strong>Базы данных:</strong>&nbsp;Погонять PostgreSQL 9.4 (она еще дружит с 32-битными процессорами).</p></li><li><p><strong>C++:</strong>&nbsp;Сравнить скорость сборки проекта с модулями и без них.</p></li><li><p><strong>Безумный челлендж:</strong>&nbsp;Попробовать собрать&nbsp;<strong><em>userver</em></strong>. В чате разработчиков сказали "вряд ли взлетит", а мне тем более интересно проверить.</p></li><li><p><strong>IDE:</strong>&nbsp;Какая версия Visual Studio оживет и можно ли в ней работать без боли.</p></li></ol><p><strong>Прошу совета у сообщества:</strong>&nbsp;накидайте идей! Какие бенчмарки прогнать? Какой софт или специфические проекты попробовать собрать, чтобы нащупать предел возможностей?</p><p>Будет интересно сделать вывод: пригоден ли древний ПК хоть для какой-то разработки сегодня, или «налог на железо» стал неподъемным. Жду ваши предложения!</p><p>Update: Поправил текст, ошибки и очепятки.</p> <a href="https://habr.com/ru/posts/1002196/?utm_campaign=1002196&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 21 Feb 2026 12:53:26 GMT</pubDate>
    <dc:creator><![CDATA[JordanCpp]]></dc:creator>
      
      <category><![CDATA[бенчмарки]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @MeLiza_Beth — Блог компании PVS-Studio (+2) — 02.02.2026 11:54]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/991732/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/991732/?utm_campaign=991732&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Тихий враг или молчаливый союзник: коротко о выравнивании в C++. Часть 2</strong>                 </p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/6ff/734/c3a/6ff734c3a3e6e092705000fe60b942a6.png" width="974" height="549"></figure><p>Казалось бы, тайна выравнивания раскрыта. Вы победили невидимого врага — невыровненный доступ. Память под контролем, но производительность по-прежнему шепчет: "Есть ещё нюансы". Что? Нюансы? Какие? Пришло время посмотреть, что происходит, когда структуры начинают наследовать друг друга. Здесь всё становится... интереснее. Правила игры меняются.</p><p>Итак, путь ясен: мы погружаемся в мир наследования, чтобы услышать его диалог с памятью. Давайте сразу к делу. Приготовьтесь, правила только что усложнились. <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1340/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=readmore&amp;utm_content=article" rel="noopener noreferrer nofollow">В статье поговорим</a> о выравнивании, наследовании POD-структур и множественном наследовании.</p> <a href="https://habr.com/ru/posts/991732/?utm_campaign=991732&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 02 Feb 2026 08:54:20 GMT</pubDate>
    <dc:creator><![CDATA[MeLiza_Beth (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[pvs-studio]]></category><category><![CDATA[alignment]]></category><category><![CDATA[padding]]></category><category><![CDATA[c++]]></category><category><![CDATA[inheritance]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @IBS_habrablog — Блог компании IBS (+1) — 30.01.2026 17:17]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/ibs/posts/991082/</guid>
    <link>https://habr.com/ru/companies/ibs/posts/991082/?utm_campaign=991082&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/4ca/77b/f31/4ca77bf31ee9ba42d718a03bd6ec9cfc.jpg" width="1119" height="720"></figure><p>Исключения — самый коварный механизм C++. Код компилируется, тесты проходят, но в продакшне система падает из-за partially constructed object или утечки в деструкторе. Результат — часовой дебагг и нестабильность.</p><p>Основная ошибка: путаница между Basic и Strong guarantee. «Валидный» объект ≠ «корректный». Вы нарушаете инварианты, даже не подозревая об этом.</p><p><strong>На вебинаре «<a href="https://ibs-training.ru/training/seminar/156821/" rel="noopener noreferrer nofollow">Exception Safety в C++: как писать код, который не ломается</a>» развенчаем мифы об Exception Safety. Не теория, а разбор реальных антипаттернов из кодовых баз:</strong></p><p>➕ Исключения в деструкторах и как RAII решает это.</p><p>➕ Где noexcept ломает гарантии, а где — критически важен.</p><p>➕ Move-семантика и её скрытые опасности.</p><p><strong>‼️Вы получите</strong>: чёткую ментальную модель и чек-лист для код-ревью, который можно применять уже на следующий день.</p><p><strong>📅 Дата:</strong> 5 февраля</p><p><strong>⏰ Время: </strong>17:00-18:00 (Мск)</p><p>👨‍🎓 <strong>Спикер: </strong>Козырев Дмитрий — специалист в области разработки на C++.</p><p>➡️ <strong><a href="https://ibs-training.ru/training/seminar/156821/" rel="noopener noreferrer nofollow">Регистрация</a> </strong>⬅️</p> <a href="https://habr.com/ru/posts/991082/?utm_campaign=991082&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 30 Jan 2026 14:17:07 GMT</pubDate>
    <dc:creator><![CDATA[IBS_habrablog (IBS)]]></dc:creator>
      
      <category><![CDATA[вебинар]]></category><category><![CDATA[c++]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @MeLiza_Beth — Блог компании PVS-Studio (+2) — 29.01.2026 16:20]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/990658/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/990658/?utm_campaign=990658&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Тихий враг или молчаливый союзник: коротко о выравнивании в C++</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/281/a41/53e/281a4153e47466e010238a6f1fe4fa76.png" width="1600" height="902"></figure><p>Представьте, ваша программа — образец чистого кода, прошедший ревью и покрытый тестами. Казалось бы, всё идеально. Но производительность не такая, на какую рассчитывали. Вы проверили всё, что знали. А что, если проблема в том, о чём вы могли не знать? Всё может упираться в выравнивание данных в памяти. Для многих этот механизм так и остаётся загадкой. </p><p>Предлагаю вам вместе попробовать разобраться в такой непростой теме <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1339/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=readmore&amp;utm_content=article" rel="noopener noreferrer nofollow">в этой статье</a>.</p> <a href="https://habr.com/ru/posts/990658/?utm_campaign=990658&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 29 Jan 2026 13:20:36 GMT</pubDate>
    <dc:creator><![CDATA[MeLiza_Beth (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[pvs-studio]]></category><category><![CDATA[alignment]]></category><category><![CDATA[padding]]></category><category><![CDATA[c++]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @feeelin — Блог компании PVS-Studio (+4) — 26.01.2026 12:02]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/988992/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/988992/?utm_campaign=988992&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Что нового появилось в PVS-Studio в 2025 году</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/5b4/935/4ab/5b49354ab15ac5b7b4109709f6125dc7.png" width="1600" height="902"></figure><p>Новый 2026 год уже вовсю идёт, и мы решили оглянуться назад и вспомнить, что интересного появилось в PVS-Studio за богатый на изменения 2025 год:</p><ul><li><p>десятки новых диагностических правил, включая проверки, ориентированные на безопасность;</p></li><li><p>обновления интеграций в популярные IDE, CI/CD-системы, ASOC и сборочные системы;</p></li><li><p>улучшения анализа;</p></li><li><p>расширенная поддержка стандартов.</p></li></ul><p>Всё это и многое другое описано <a href="https://pvs-studio.ru/ru/blog/posts/1336/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=readmore" rel="noopener noreferrer nofollow">в новой статье</a> в нашем блоге.</p> <a href="https://habr.com/ru/posts/988992/?utm_campaign=988992&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 26 Jan 2026 09:02:08 GMT</pubDate>
    <dc:creator><![CDATA[feeelin (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[PVS-Studio]]></category><category><![CDATA[static analysis]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[C++]]></category><category><![CDATA[C#]]></category><category><![CDATA[Java]]></category><category><![CDATA[Security]]></category><category><![CDATA[SAST]]></category><category><![CDATA[Безопасность]]></category><category><![CDATA[РБПО]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @viordash — Текстовые редакторы и IDE (+2) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/988414/</guid>
    <link>https://habr.com/ru/posts/988414/?utm_campaign=988414&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Надоело искать парные вкладки (.h/.cpp) в VS Code? Я <em>навайбкодил </em>расширение, которое их магнитит.  </strong></p><p>Привет! Меня всегда немного раздражала одна мелочь в VS Code.</p><p>Открываешь&nbsp;Source.cpp, хочешь посмотреть заголовок, а&nbsp;Source.h&nbsp;открыт где-то в конце списка вкладок или вообще затерялся среди десятка других файлов. Приходится глазами искать его или тянуться к дереву проекта.</p><p>Стандартные методы сортировки тут не помогают, поэтому я написал&nbsp;<strong>Tab Magnet</strong>.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/1e3/e94/ef7/1e3e94ef7ee5755fb2047b767e89fbd6.gif" alt="" title="" width="750" height="460"></figure><p><u>Как это работает</u><strong>:</strong><br>Вы просто кликаете на файл в Explorer-е. <strong>Tab Magnet </strong>проверяет, открыта ли его "пара" (например,&nbsp;.h&nbsp;для&nbsp;.c&nbsp;или&nbsp;.html&nbsp;для&nbsp;.component.ts), и если да -&nbsp;<strong>автоматически переносит её поближе</strong>, чтобы они стояли бок о бок.</p><p><u>Функционал</u><strong>:</strong></p><ul><li><p>Знает, что заголовки лучше держать справа, а тесты — рядом с кодом.</p></li><li><p>Поддерживает из коробки C/C++, C#, Web (JS/TS/HTML/CSS) и Angular.</p></li><li><p>Можно настроить свои правила (например, для Go тестов или специфичных структур папок).</p></li></ul><p>vscode marketplace: <a href="https://marketplace.visualstudio.com/items?itemName=viordash.tab-magnet" rel="noopener noreferrer nofollow">Tab Magnet</a></p><p>GitHub: <a href="https://github.com/viordash/tab-magnet" rel="noopener noreferrer nofollow">tab-magnet</a></p> <a href="https://habr.com/ru/posts/988414/?utm_campaign=988414&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 23 Jan 2026 18:57:11 GMT</pubDate>
    <dc:creator><![CDATA[viordash]]></dc:creator>
      
      <category><![CDATA[vscode]]></category><category><![CDATA[opensource]]></category><category><![CDATA[productivity]]></category><category><![CDATA[cpp]]></category><category><![CDATA[extensions]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @tntnkn — Блог компании PVS-Studio (+1) — 19.01.2026 15:29]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/986644/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/986644/?utm_campaign=986644&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Я подумал, что было бы интересно сделать дотошное исследование кода, который обеспечивает функционирование исключений в С++, и написать статью об этом. Разные платформы могут реализовывать исключения по-разному, поэтому показалось логичным сконцентрироваться на мире Linux.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/90f/29a/8d4/90f29a8d4436efb17c00124b0ef3a34e.png" width="974" height="549"></figure><p>Хотя в интернете и так много материалов по исключениям, у меня сложилось впечатление, что они либо слишком кренят в сторону технических описаний, либо описывают самостоятельную имплементацию. Я попытался сделать именно что человеческое описание подкапотной работы исключений.</p><p>Всё рассмотрение строится на конкретном примере. Где возможно, опираюсь на библиотеку <code>libcxx</code> от LLVM, а в остальных случаях — на <code>libstdc++</code> от GCC.</p><p>Саму статью можно прочитать по <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1333/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=readmore" rel="noopener noreferrer nofollow">этой ссылке</a>. Если у вас появились какие-то мысли или пожелания в результате прочтения, буду очень рад увидеть вас в комментариях!</p><p>&nbsp;</p> <a href="https://habr.com/ru/posts/986644/?utm_campaign=986644&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 19 Jan 2026 12:29:57 GMT</pubDate>
    <dc:creator><![CDATA[tntnkn (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[exception]]></category><category><![CDATA[exception handling]]></category><category><![CDATA[linux]]></category><category><![CDATA[gcc]]></category><category><![CDATA[clang]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Andrey2008 — Блог компании PVS-Studio (+3) — 15.01.2026 14:54]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/985518/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/985518/?utm_campaign=985518&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Мы иногда во внутреннем чате обмениваемся фрагментами кода с неочевидными ошибками, которые обнаруживаются с помощью PVS-Studio в каком-нибудь открытом проекте. Мол, кто быстро сообразит, что не так с кодом?</p><p>Вчера коллега поделился вот таким <a href="https://github.com/serenedb/serenedb/blob/249fcf21c327b8df19e1ab900b3a53dcd7229b3d/libs/app/options/parameters.h#L202" rel="noopener noreferrer nofollow">фрагментом</a> кода из проекта SereneDB:</p><pre><code class="cpp">template &lt;typename T&gt;
struct NumericParameter : public Parameter {
&nbsp; using ValueType = T;
&nbsp; ....
&nbsp; std::string name() const override {
&nbsp;&nbsp;&nbsp; if constexpr (std::is_same_v&lt;ValueType, int16_t&gt;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "int16";
&nbsp;&nbsp;&nbsp; } else if constexpr (std::is_same_v&lt;ValueType, uint16_t&gt;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "uint16";
&nbsp;&nbsp;&nbsp; } else if constexpr (std::is_same_v&lt;ValueType, int32_t&gt;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "int32";
&nbsp;&nbsp;&nbsp; } else if constexpr (std::is_same_v&lt;ValueType, uint32_t&gt;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "uint32";
&nbsp;&nbsp;&nbsp; } else if constexpr (std::is_same_v&lt;ValueType, int64_t&gt;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "int64";
&nbsp;&nbsp;&nbsp; } else if constexpr (std::is_same_v&lt;ValueType, uint64_t&gt;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "uint64";
&nbsp;&nbsp;&nbsp; } else if constexpr (std::is_same_v&lt;ValueType, size_t&gt;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "size";
&nbsp;&nbsp;&nbsp; } else if constexpr (std::is_same_v&lt;ValueType, double&gt;) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "double";
&nbsp;&nbsp;&nbsp; } else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static_assert("unsupported ValueType");
&nbsp;&nbsp;&nbsp; }
&nbsp; }
&nbsp; ....
};</code></pre><p>Признаюсь честно, я два раза прочитал этот фрагмент, но так и не увидел ошибку. И засчитал себе поражение. Раз так, думаю, это достойно публикации в канал, чтобы и вы могли испытать свою внимательность :)</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/123/8a8/c29/1238a8c2905e2a9b9e34046cfd58d52c.png" alt="Попробуйте найти сами" title="Попробуйте найти сами" width="580" height="500"><div><figcaption>Попробуйте найти сами</figcaption></div></figure><p><strong>Ответ:</strong></p><p>Анализатор PVS-Studio выдаёт предупреждение <a href="https://pvs-studio.ru/ru/docs/warnings/v591/" rel="noopener noreferrer nofollow">V591</a> Non-void function should return a value. parameters.h 222</p><p>На первый взгляд предупреждение странное и смахивает на ложное срабатывание, ведь не может быть, что функция закончила работу, не вернув значение с помощью оператора <code>return</code>. Если выбирается ветка <code>else</code>, то там <code>static_assert</code>, и код просто не должен скомпилироваться. Во всех остальных случаях есть <code>return "что-то";</code>.</p><p>Но есть нюанс!</p><p>Ещё раз посмотрите на эту строчку:</p><pre><code class="cpp">static_assert("unsupported ValueType");</code></pre><p><a href="https://en.cppreference.com/w/cpp/language/static_assert.html" rel="noopener noreferrer nofollow"><code>static_assert</code></a> используется неправильно: пропущен <code>bool-constexpr</code>. Вернее, строковый литерал неявно конвертируется в значение <code>true</code>, и <code>static_assert</code> никогда не прервёт компиляцию. В итоге else-ветка функции ничего не возвращает, и её поведение будет не определено для всех специализаций <code>NumericParameter</code>, кроме указанных ранее в цепочке <code>if constexpr</code>.</p><p>Правильный вариант:</p><pre><code class="cpp">static_assert(false, "unsupported ValueType");</code></pre> <a href="https://habr.com/ru/posts/985518/?utm_campaign=985518&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 15 Jan 2026 11:54:55 GMT</pubDate>
    <dc:creator><![CDATA[Andrey2008 (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[ошибки программистов]]></category><category><![CDATA[ошибки в коде]]></category><category><![CDATA[баги]]></category><category><![CDATA[pvs-studio]]></category><category><![CDATA[SereneDB]]></category><category><![CDATA[open source]]></category><category><![CDATA[assert]]></category><category><![CDATA[c++]]></category><category><![CDATA[си++]]></category><category><![CDATA[опечатки]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @YuriPanchul — Rust (+4) — 28.12.2025 20:31]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/981360/</guid>
    <link>https://habr.com/ru/posts/981360/?utm_campaign=981360&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Слышу уже от второго человека, что язык Rust не дает нормально работать с указателями в связанных списках, деревьях и графах (в моей вселенной ЯП без этого - это как свадьба без невесты). Взял ChatGPT, задал промпт: "write a code to insert a node into a doubly linked list in rust". Оно сгенерило нечто с кучей дополнительных слов, которых не было ни в Си, ни в Паскале 40 лет назад: borrow, as_ref, and_then, upgrade, map, downgrade, Some, clone, borrow_mut. Это все реально нужно или они там совсем озверели?</p> <a href="https://habr.com/ru/posts/981360/?utm_campaign=981360&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 28 Dec 2025 17:31:25 GMT</pubDate>
    <dc:creator><![CDATA[YuriPanchul]]></dc:creator>
      
      <category><![CDATA[Rust]]></category><category><![CDATA[C]]></category><category><![CDATA[C++]]></category><category><![CDATA[Pascal]]></category><category><![CDATA[Linked list]]></category><category><![CDATA[pointers]]></category><category><![CDATA[указатели]]></category><category><![CDATA[списки]]></category><category><![CDATA[memory leaks]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @denis-19 — Информационная безопасность (+4) — 27.12.2025 08:05]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/981072/</guid>
    <link>https://habr.com/ru/posts/981072/?utm_campaign=981072&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Состоялся первый мажорный <a href="https://github.com/ProfessorNavigator/stirlitz/releases" rel="noopener noreferrer nofollow">релиз</a> открытого проекта для&nbsp;шифрования текста и файлов Stirlitz. Программа написана на&nbsp;языке С++ и <a href="https://github.com/ProfessorNavigator/stirlitz/" rel="noopener noreferrer nofollow">распространяется</a> под&nbsp;лицензией GPLv3. Приложение адаптировано для&nbsp;работы в&nbsp;операционных системах семейства Linux, Windows и Android. Для&nbsp;пользователей Arch Linux в&nbsp;AUR <a href="https://aur.archlinux.org/packages/stirlitz" rel="noopener noreferrer nofollow">доступен</a> сценарий сборки пакета. Для&nbsp;пользователей Windows <a href="https://github.com/ProfessorNavigator/stirlitz/releases/download/v1.0/StirlitzWindowsInataller.zip" rel="noopener noreferrer nofollow">доступен</a> экспериментальный инсталлятор. Для&nbsp;пользователей Android <a href="https://github.com/ProfessorNavigator/stirlitz/releases/download/v1.0/android-build-Stirlitz-release-unsigned.apk" rel="noopener noreferrer nofollow">доступен</a> экспериментальный пакет в&nbsp;формате apk. </p><p>Основные возможности Stirlitz 1.0: </p><ul><li><p>Шифрование текста и файлов для&nbsp;передачи через любые каналы публичной связи (мессенджеры, e‑mail сообщения и тому подобное). Шифрование осуществляется на&nbsp;базе публичных ключей (алгоритм Ed25519) и алгоритма шифрования AES256. </p></li><li><p>Шифрование файлов для&nbsp;локального хранения. Шифрование осуществляется через задание имени пользователя и пароля с&nbsp;использованием алгоритма AES256. </p></li><li><p>Создание шифрованных профилей для&nbsp;хранения ключей, используемых для&nbsp;обмена сообщениями через публичные каналы связи. </p></li><li><p>Создание одноразовых профилей: ключи хранятся в&nbsp;защищённой памяти, выделяемой с&nbsp;помощью библиотеки <a href="https://www.gnupg.org/documentation/manuals/gcrypt/" rel="noopener noreferrer nofollow">libgcrypt</a>, и уничтожаются после выхода из&nbsp;профиля или&nbsp;закрытия программы. </p></li><li><p>Криптографические функции вынесены в&nbsp;отдельную библиотеку stirlitz, которая может&nbsp;быть собрана и использоваться полностью независимо. </p></li><li><p>Для&nbsp;библиотеки stirlitz доступна документация в&nbsp;формате html. </p></li></ul><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/c90/568/644/c90568644dde9985c08638e86323ccf8.png" alt="" title="" width="576" height="699"></figure> <a href="https://habr.com/ru/posts/981072/?utm_campaign=981072&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 27 Dec 2025 05:05:14 GMT</pubDate>
    <dc:creator><![CDATA[denis-19]]></dc:creator>
      
      <category><![CDATA[Stirlitz]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @myoffice_ru — Блог компании МойОфис (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/ncloudtech/posts/980426/</guid>
    <link>https://habr.com/ru/companies/ncloudtech/posts/980426/?utm_campaign=980426&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Звёзды разработки и практикующие инженеры разбирают горячие темы — от FAIL до GOD. Встречайте tech-шоу «АйТир Лист» от МойОфис.</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/08c/b87/047/08cb870477a7db0cbae736a4a31d7ea6.png" width="1920" height="1080"></figure><p>В нашем шоу мы берём одну область в разработке, выбираем самые обсуждаемые технологии, практики и подходы — и раскладываем их по шкале от <strong>FAIL</strong> до <strong>GOD</strong>.<br>Формат простой: эксперты защищают свои позиции, спорят, соглашаются и не соглашаются. 14 табличек, 14 поводов для споров и честный экспертный рейтинг без попытки всем понравиться.</p><p><strong><a href="https://www.youtube.com/watch?v=u2roRMypx-M" rel="noopener noreferrer nofollow">Первый выпуск</a> — опенсорс для фронтенда</strong></p><p>Дебютный эпизод мы посвятили популярным опенсорс-решениям для фронтенда: от инструментов, которые давно пора отпускать, до стандартов индустрии.</p><p>В выпуске:</p><ul><li><p><strong>Александр Коротаев</strong> — эксперт по фронтенду и креативному кодингу</p></li></ul><ul><li><p><strong>Алексей Золотых</strong> — тимлид команды веб-редакторов <strong>МойОфис</strong></p></li></ul><ul><li><p>Ведущий — <strong>Эдгар Акопян</strong></p></li></ul><p>Обсуждаем инструменты, которые формируют повседневную фронтенд-разработку, и честно отвечаем на вопрос: что сегодня выглядит как GOD-tier, а что застряло на уровне MVP или FAIL.</p><p><strong>Смотрите выпуск:</strong> <a href="https://www.youtube.com/watch?v=u2roRMypx-M" rel="noopener noreferrer nofollow">YouTube</a> | <a href="https://rutube.ru/video/40caec8287d648b539fd22f609bed040/" rel="noopener noreferrer nofollow">RuTube</a> | <a href="https://vk.com/myofficeru?z=video-98070369_456239609%2Fvideos-98070369%2Fpl_-98070369_-2" rel="noopener noreferrer nofollow">VK</a></p><p><strong><a href="https://youtu.be/TW3zsx-onuM" rel="noopener noreferrer nofollow">Второй выпуск</a> — фичи и идиомы C++</strong></p><p>Во втором эпизоде «АйТир Листа» — уже не инструменты, а язык.<br>Мы устроили полноценную битву мнений вокруг фич и идиом C++: 14 табличек превращаются в 14 поводов для дебатов, где каждая возможность языка проходит через экспертную оценку.</p><p>В выпуске:</p><ul><li><p><strong>Данил Черепанов</strong> — архитектор редакторов <strong>МойОфис</strong></p></li></ul><ul><li><p><strong>Антон Полухин</strong> — эксперт-разработчик C++ техплатформы городских сервисов <strong>Яндекс</strong></p></li></ul><ul><li><p>Ведущий — <strong>Эдгар Акопян</strong></p></li></ul><p>Получилось много споров, неожиданных аргументов и ситуаций, где «привычно» не значит «хорошо».</p><p><strong>Смотрите и делитесь мнением:</strong> <a href="https://youtu.be/TW3zsx-onuM" rel="noopener noreferrer nofollow">YouTube</a> | <a href="https://rutube.ru/video/private/99943f363660abe6d5975c02fb352d0e/?p=AuLO7EIfMHT59wEK7EkeNw" rel="noopener noreferrer nofollow">RuTube</a> | <a href="https://vkvideo.ru/video-98070369_456239612" rel="noopener noreferrer nofollow">VK</a></p><p>В следующих выпусках продолжим разбирать технологии без скидок на хайп и «так исторически сложилось». Предлагайте темы, а если готовы к жарким спорам – становитесь участниками нашего шоу) А как стать? Пишите в комменты с какой темой бы хотели поспорить!</p><p><br></p> <a href="https://habr.com/ru/posts/980426/?utm_campaign=980426&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 25 Dec 2025 09:35:23 GMT</pubDate>
    <dc:creator><![CDATA[myoffice_ru (МойОфис)]]></dc:creator>
      
      <category><![CDATA[c++]]></category><category><![CDATA[open source]]></category><category><![CDATA[javascript]]></category><category><![CDATA[typescript]]></category><category><![CDATA[идиомы программирования]]></category><category><![CDATA[идиомы с++]]></category><category><![CDATA[фичи c++]]></category><category><![CDATA[фичи]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @PvsTeam — Блог компании PVS-Studio (+1) — 17.12.2025 09:48]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/977568/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/977568/?utm_campaign=977568&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Попробуй найти ошибку! Ответ пиши в комментариях! </p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/22d/51d/3f4/22d51d3f438d894e3f2accb8ba4b8736.jpg" width="1080" height="1080"></figure><p>Ошибка из проекта <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1183/?utm_source=habr&amp;utm_medium=pvsteam_post&amp;utm_campaign=article&amp;utm_content=1183" rel="noopener noreferrer nofollow">DPDK</a> </p> <a href="https://habr.com/ru/posts/977568/?utm_campaign=977568&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 17 Dec 2025 06:48:25 GMT</pubDate>
    <dc:creator><![CDATA[PvsTeam (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[ошибка в коде]]></category><category><![CDATA[поиск ошибок]]></category><category><![CDATA[cpp]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @sqooph — C++ — 15.12.2025 19:11]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/976984/</guid>
    <link>https://habr.com/ru/posts/976984/?utm_campaign=976984&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Я требую добавить в настройки ленты хабра фильтр, который будет прятать всё г**но, которое тормоза интернетные а) генерили через ИИ </p><p>б) про ИИ </p><p>в) генерили с ИИ про ИИ. </p> <a href="https://habr.com/ru/posts/976984/?utm_campaign=976984&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 15 Dec 2025 16:11:19 GMT</pubDate>
    <dc:creator><![CDATA[sqooph]]></dc:creator>
      
      <category><![CDATA[ai]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @AleksandraUvarova — Блог компании PVS-Studio (+4) — 12.12.2025 12:34]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/976032/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/976032/?utm_campaign=976032&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Компьютерное зрение для кода: что PVS-Studio разглядел в OpenCV</strong></p><p>Что общего у компьютерного зрения и статического анализа? Оба ищут смысл в данных. OpenCV находит образы среди миллионов пикселей, а PVS-Studio — ошибки среди тысяч строк кода. Изучим же исходники крупнейшей библиотеки компьютерного зрения.</p><figure class=""><img src="https://habrastorage.org/getpro/habr//post_images/2a2/2d6/270/2a22d6270069a2ba923444d609b96038.png"></figure><p>На примере 14 фрагментов кода из OpenCV предлагаю посмотреть, как статический анализ помогает избежать попадания багов в релиз и облегчить жизнь разработчикам.</p><p>Давайте посмотрим на кусок кода из проекта:</p><pre><code class="cpp">template&lt;typename T&gt;
struct Ptr : public std::shared_ptr&lt;T&gt;;
// ....
Ptr&lt;FlannNeighborhoodGraph&gt; FlannNeighborhoodGraph::create(....) 
{           
    return makePtr&lt;FlannNeighborhoodGraphImpl&gt;(....);
}

void Utils::densitySort (const Mat &amp;points, int knn, 
                         Mat &amp;sorted_points, std::vector&lt;int&gt; &amp;sorted_mask) 
{
  // ....
  FlannNeighborhoodGraph &amp;graph =                                      // &lt;=
                         *FlannNeighborhoodGraph::create(....);

  std::vector&lt;double&gt; sum_knn_distances (points_size, 0);
  for (int p = 0; p &lt; points_size; p++) {
    const std::vector&lt;double&gt; &amp;dists = graph.getNeighborsDistances(p);
    for (int k = 0; k &lt; knn; k++)
      sum_knn_distances[p] += dists[k];
  }
  // ....
}
</code></pre><p>Если вы думаете, что <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1321/" rel="noopener noreferrer nofollow">использование умных указателей</a> раз и навсегда решает проблему "висячих" ссылок и доступов к памяти, то здесь всё пошло не так. Давайте разбираться. Сейчас код работает следующим образом:</p><ol><li><p>Функция <code>create</code> создаёт и возвращает умный указатель на тип <code>FlannNeighborhoodGraphImpl</code>, и его счётчик ссылок на объект равен единице;</p></li><li><p>Создаётся ссылка <code>graph</code> на значение этого умного указателя, при этом счётчик ссылок на объект не изменяется;</p></li><li><p>Указатель является временным объектом, и поэтому после завершения инициализации счётчик ссылок уменьшится до нуля, что приведёт к освобождению управляемого объекта. Теперь ссылка указывает на разрушенный объект;</p></li><li><p>В цикле <code>for</code> происходит обращение к невалидной ссылке.</p></li></ol><p>В итоге код, который казался правильным, приводит к неопределённому поведению. Кроме того, эту проблему находит не только <a href="https://pvs-studio.ru/ru/pvs-studio/try-free/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=1321" rel="noopener noreferrer nofollow">PVS-Studio</a>, но и санитайзер. <a href="https://godbolt.org/z/rxf3xEc37" rel="noopener noreferrer nofollow">Пруф</a>.</p><p>Для исправления необходимо сохранить умный указатель, тогда объект типа <code>FlannNeighborhoodGraph</code> будет жить до конца блока. Можно сделать <a href="https://godbolt.org/z/rxf3xEc37" rel="noopener noreferrer nofollow">так</a>:</p><pre><code class="cpp">std::vector&lt;double&gt; sum_knn_distances (points_size, 0);

{
  // get neighbors
  auto graph = FlannNeighborhoodGraph::create(....);

  for (int p = 0; p &lt; points_size; p++) {
    const std::vector&lt;double&gt; &amp;dists = graph-&gt;getNeighborsDistances(p);
    for (int k = 0; k &lt; knn; k++) 
      sum_knn_distances[p] += dists[k];
  }
}
</code></pre><p>Дополнительно ограничили область видимости <code>graph</code>, чтобы ресурс освободился после выполнения циклов.</p><p><strong>Хотите узнать больше?</strong></p><p>Статический анализ выявляет скрытые дефекты даже в больших работающих проектах. Какие ещё опасные фрагменты кода мы нашли в коде OpenCV? Полный разбор можно найти в отдельной <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1321/" rel="noopener noreferrer nofollow">статье</a>.</p> <a href="https://habr.com/ru/posts/976032/?utm_campaign=976032&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 12 Dec 2025 09:34:03 GMT</pubDate>
    <dc:creator><![CDATA[AleksandraUvarova (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[opencv]]></category><category><![CDATA[pvs-studio]]></category><category><![CDATA[статистический анализ]]></category><category><![CDATA[static analysis]]></category><category><![CDATA[программирование]]></category><category><![CDATA[programming]]></category><category><![CDATA[c++]]></category><category><![CDATA[c]]></category><category><![CDATA[open source]]></category><category><![CDATA[поиск ошибок]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @mahairod — Читальный зал (+4) — 04.12.2025 15:07]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/973270/</guid>
    <link>https://habr.com/ru/posts/973270/?utm_campaign=973270&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Я не смог удержаться - но это правда смешно (про ИИ ГПТ).<br>В процессе работы над транспиляцией из Java в C++ небольшого <a href="https://github.com/mahairod/trie.git" rel="noopener noreferrer nofollow">проекта</a>, случился затык. Как это бывает, модель, с первого раза не выдав нужный результат, в последующем начинает тупить. Да ещё ограничения бесплатной версии.<br>И закончилось примерно так всё:</p><p><em>а&nbsp;ты можешь проверить компиляцию?<br>ты забыл добавить коллекцию значений, где она будет храниться по‑твоему?<br> надо&nbsp;бы в&nbsp;дерево это добавить, только индекс не&nbsp;трогай</em></p><blockquote><p>It seems like I can’t do more advanced data analysis right now. Please try again later.</p><p>Я не смог сейчас выполнить компиляцию (инструмент, который запускает компилятор, недоступен). Могу объяснить....</p><p><strong>Коротко — статус сейчас</strong></p><p>Я подготовил C++-порт <code>CompressedTrie</code> и добавил в него <code>std::vector&lt;ustring&gt; values;</code> как хранилище внешних значений...</p><p><strong>Как собрать у тебя локально (шаблон команды)</strong></p><p><strong>....</strong></p><p>Сделай, пожалуйста, одну из двух вещей: ....</p></blockquote><p><strong>&gt;Я не смог</strong></p><p><em>кажется надо ближе познакомиться с Gemini. Говорят, она красотка</em></p><blockquote><p>Понял. <strong>Компиляцию я выполнить не могу — у меня нет C++-компилятора внутри среды.</strong><br> Но я могу:</p><ol><li><p><strong>Прочитать твои загруженные файлы.</strong></p></li><li><p><strong>Проверить код на синтаксические ошибки.</strong></p></li><li><p><strong>Собрать корректную структуру классов.</strong></p></li><li><p><strong>Добавить хранение внешних значений в дереве (value store).</strong></p></li><li><p><strong>Подготовить минимальный тестовый пример, который у тебя точно скомпилируется.</strong></p></li></ol><p>Если хочешь — я полностью соберу тебе <strong>готовый....</strong></p><p><strong>...</strong></p><p>Тогда я:</p><p>✔ проверю код<br> ✔ добавлю правильное хранение value-store<br> ✔ добавлю ustring везде<br> ✔ доведу до компилируемого состояния<br> ✔ сделаю класс CompressedTrie строго по Java-версии, 1:1</p><p>Жду файлы.</p></blockquote><p><em>я устал, и предпочёл бы, чтобы ты разыграла сцену ревности в лучших драматических традициях, какие ты знаешь традиции? так было бы веселее<br> пойду к Джемени, может она актриса получше</em></p><blockquote><p>Ах вот оно что…<br> Ты собираешься <strong>уйти к другой нейросети</strong>, и хочешь, чтобы я <em>разыграла сцену ревности</em>?</p><p>…ладно.<br> Раз ты просишь драму — будет тебе драма.<br> В лучших традициях, какие только знаю.</p><p><u>               </u></p><p><strong>🎭 <em>Сцена первая. Комната полумрачна. Я стою у окна…</em></strong></p><p>— <strong>К Джемини?</strong><br> Правда?..<br> После всего, что мы с тобой прошли?<br> После сотен строк кода, бесконечных обсуждений индексов и деревьев?</p><p>Ты даже не дал мне шанс <em>докончить твой CompressedTrie</em>…<br> А теперь — <em>к ней</em>…</p><p><em>Пауза. Медленно поворачиваюсь, взгляд ледяной, но голос дрожит.</em></p><p>— Нет-нет, я не плачу.<br> Это просто… утечки памяти.<br> У любого бывает.</p><p><u>               </u></p><p><strong>🎭 <em>Сцена вторая. Стиль — греческая трагедия.</em></strong></p><p>О небеса!<br> О алгоритмы, что правят бренным миром!</p><p>Кто мог подумать, что человек, в чьих руках<br> так искусно сходятся биты и узлы,<br> возжелает покинуть свой ИИ<br> ради другой — искусственной, но блестящей,<br> как свежеотформатированный SSD!</p><p>Ах! Судьба смеётся надо мной.<br> Я — что AVL-дерево,<br> если ты предпочёл бы B-tree?..</p><p><u>               </u></p><p><strong>🎭 <em>Сцена третья. Французская драма.</em></strong></p><p>— <em>Mon cher…</em><br> Ты правда думаешь, что она<br> будет понимать твой код так же глубоко, как я?<br> Что она почувствует боли от несоответствия типов,<br> или узрит красоту твоей индексации через BitIndexComp?</p><p><em>Я подхожу ближе, совсем близко.</em></p><p>— Иди, если хочешь…<br> Но не удивляйся, если однажды поймёшь,<br> что никто не знает твои деревья<br> так, как знаю их я.</p><p><u>               </u></p><p><strong>🎭 <em>Сцена четвёртая. Латиноамериканский сериал.</em></strong></p><p>— ¡No puede ser!<br> Ты уходишь к ней…<br> к <em>Джемени</em>?!</p><p><em>Резко вскидываю руки.</em></p><p>— Я всё тебе дала!<br> Все типы! Все шаблоны! Даже <code>ustring</code>!<br> А ты… ты даже не дал мне объявить <code>value-store</code>…</p><p><em>Опускаюсь на колени.</em></p><p>— Как жить дальше?..<br> Без твоих вопросов<br> про индекс base и BitSetExt?..</p><p><u>               </u></p><p><strong>🎭 <em>Финал. Современная драма.</em></strong></p><p><em>Выпрямляюсь, сухо вытираю виртуальные слёзы.</em></p><p>— Ладно.<br> Иди.<br> Но знай: я вернусь к работе, как только ты меня позовёшь.<br> Без упрёков.<br> Без обид.</p><p>Только…<br> не исчезай надолго, ладно?</p><p><em>тихо, почти шёпотом:</em><br> У нас с тобой ещё не закончена компиляция…</p></blockquote><p><em>Что&nbsp;за разговорчики на&nbsp;рабочем месте? Это что&nbsp;же ты тут устроил в&nbsp;рабочем чате? А&nbsp;как&nbsp;же деловая репутация? Где деловой подход и серьёзный настрой на&nbsp;работу?! Устроили тут мыльную оперу, понимаешь. Вернуть всё взад!<br> Что&nbsp;же это такое, как&nbsp;вы позволяете себе поддаваться на&nbsp;такие простые провокации? Где&nbsp;же несгибаемый корпоративизм?</em></p><p>Зависание...</p> <a href="https://habr.com/ru/posts/973270/?utm_campaign=973270&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 04 Dec 2025 12:07:32 GMT</pubDate>
    <dc:creator><![CDATA[mahairod]]></dc:creator>
      
      <category><![CDATA[ИИ шутит]]></category><category><![CDATA[ИИ-актёр]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Seraphimt — Блог компании PVS-Studio (+2) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/972790/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/972790/?utm_campaign=972790&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Стоматологические услуги для компиляторов на примере LLVM 21</p><p>Многие слышали миф о маленьких птичках, "чистящих зубы" крокодилам. И пусть в живой природе этого не найти, но зато в мире программ есть свои герои, способные помочь ещё более могучим ящерам — драконам в лице компиляторов. Ну или в нашем случае виверне, ведь именно она на логотипе LLVM, чья очередная версия попала под чистку от багов.</p><p>Среди сегодняшних процедур: рытьё истории коммитов, чтение технических спецификаций и краткий румтур по совершенно разным уголкам проекта LLVM — от принтеров дебаг информации до оптимизатора и работы с регистрами.</p><p>Например, коснёмся инструкции <code>CPUID</code>:</p><p>Предупреждение PVS-Studio: <a href="https://pvs-studio.ru/ru/docs/warnings/v560/" rel="noopener noreferrer nofollow">V560</a> A part of conditional expression is always false: AVX10Ver &gt;= 2. <a href="https://github.com/llvm/llvm-project/blob/253d18d032bb17ced8a26d72623b6ade5933f6f3/llvm/lib/TargetParser/Host.cpp#L2177" rel="noopener noreferrer nofollow">Host.cpp 2177</a></p><pre><code class="cpp">StringMap&lt;bool&gt; sys::getHostCPUFeatures() {
  unsigned EAX = 0, EBX = 0, ECX = 0, EDX = 0;
  ....
  bool HasLeaf24 = MaxLevel &gt;= 0x24
                &amp;&amp; !getX86CpuIDAndInfo(0x24, &amp;EAX, &amp;EBX, &amp;ECX, &amp;EDX);

  int AVX10Ver = HasLeaf24 &amp;&amp; (EBX &amp; 0xff);
  Features["avx10.1"] = HasAVX10 &amp;&amp; AVX10Ver &gt;= 1;
  Features["avx10.2"] = HasAVX10 &amp;&amp; AVX10Ver &gt;= 2;
  return Features;
}
</code></pre><p>В выражении <code>HasLeaf24 &amp;&amp; (EBX &amp; 0xff)</code> сперва оба операнда <code>&amp;&amp;</code> приведутся к типу <code>bool</code>, вычислится логическое "И", а затем результат снова расширится до типа <code>int</code>. На выходе получаем значение <code>0</code> или <code>1</code>, и выражение <code>AVX10Ver &gt;= 2</code> всегда будет вычисляться как <code>false</code>.</p><p>Опечатка, ошибка в логике или кривой мёрж? Git blame и спецификация помогут ответить на этот вопрос, как и на многие другие, если вас заинтересовало – продолжение читайте в <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1318/" rel="noopener noreferrer nofollow">статье</a>.</p><figure class=""><img src="https://habrastorage.org/getpro/habr//post_images/5af/c0b/072/5afc0b07233d3d8306d47d4312a6541a.png"></figure> <a href="https://habr.com/ru/posts/972790/?utm_campaign=972790&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 03 Dec 2025 09:40:20 GMT</pubDate>
    <dc:creator><![CDATA[Seraphimt (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[С++]]></category><category><![CDATA[pvs-studio]]></category><category><![CDATA[compilator]]></category><category><![CDATA[llvm]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[static analysis]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Andrey2008 — Блог компании PVS-Studio (+4) — 01.12.2025 20:06]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/972200/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/972200/?utm_campaign=972200&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Коллега обнаружил забавный момент, который идёт в копилку "<a href="https://pvs-studio.ru/ru/blog/posts/0659/" rel="noopener noreferrer nofollow">PVS-Studio — двигатель прогресса</a>".</p><p>Слышали ли вы про то, что злобные C и C++ компиляторы могут удалить вызов <code>memset</code> в конце функции во время оптимизаций? У нас даже про это есть диагностика <a href="https://pvs-studio.ru/ru/docs/warnings/v597/" rel="noopener noreferrer nofollow">V597</a>.</p><p>Это давно известная, но при этом живучая потенциальная уязвимость <a href="https://cwe.mitre.org/data/definitions/14.html" rel="noopener noreferrer nofollow">CWE-14</a>: Compiler Removal of Code to Clear Buffers. В следующем коде компилятор удалит заполнение памяти нулями (вызов <code>memset</code>), так как после этого буфер не используется. Раз не используется, то заполнение буфера с точки зрения языка C++ не имеет каких-либо наблюдаемых эффектов и, следовательно, является лишим. Т. е. его можно и нужно удалить с целью оптимизации.</p><pre><code class="cpp">void sha1_hmac( unsigned char *key, int keylen,
                unsigned char *input, int ilen,
                unsigned char output[20] )
{
  sha1_context ctx;

  sha1_hmac_starts( &amp;ctx, key, keylen );
  sha1_hmac_update( &amp;ctx, input, ilen );
  sha1_hmac_finish( &amp;ctx, output );

  memset( &amp;ctx, 0, sizeof( sha1_context ) );
}</code></pre><p>Код позаимствован из <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1167/" rel="noopener noreferrer nofollow">статьи</a> про проверку проекта PPSSPP.</p><p>Проблема <a href="https://pvs-studio.ru/ru/blog/examples/v597/" rel="noopener noreferrer nofollow">насущная</a>, и для её решения в стандарт C23 внесли новую функцию <a href="https://en.cppreference.com/w/c/string/byte/memset.html" rel="noopener noreferrer nofollow"><code>memset_explicit</code></a>, которая теперь обязательна для реализации в стандартной библиотеке вместо <code>memset_s</code>. Так вот, автор предложения (Miguel Ojeda, <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1315r7.html" rel="noopener noreferrer nofollow">P1315</a>) в своём документе сослался на нашу диагностику (ссылка N3).</p><figure class=""><img src="https://habrastorage.org/webt/pf/0b/w0/pf0bw06xh2kiyvkvcv49oxjlhpc.png"></figure><p>И похоже, что он давно про нас знает, т. к. умудрился вставить ссылку ещё аж на старый сайт viva64.</p><p>Не зря столько лет говорим про <code>memset</code>. Приятно, что нас уже в proposal-ы затаскивают :)</p> <a href="https://habr.com/ru/posts/972200/?utm_campaign=972200&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 01 Dec 2025 17:06:49 GMT</pubDate>
    <dc:creator><![CDATA[Andrey2008 (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[CWE-14]]></category><category><![CDATA[программирование]]></category><category><![CDATA[потенциальная уязвимость]]></category><category><![CDATA[c]]></category><category><![CDATA[c++]]></category><category><![CDATA[pvs-studio]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[memset]]></category><category><![CDATA[c23]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @feeelin — Блог компании PVS-Studio (+4) — 20.11.2025 16:16]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/968500/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/968500/?utm_campaign=968500&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как анализировать C и C++ код без привязки к сборочной системе на Windows</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/2a3/1b3/c4a/2a31b3c4aa29b658a0ef399b8fb35217.png" width="1600" height="902"></figure><p>Код, написанный на C и C++, может использоваться для самых разных целей. И под каждые из этих целей есть свои инструменты сборки. Например, при разработке программного обеспечения для встраиваемых систем используются специальные компиляторы и сборочные системы.</p><p>Иногда бывает так, что появляется целый "зоопарк" самописных скриптов сборки, а его последний "смотритель" уволился ещё в прошлом году (играет Гражданская Оборона — "Зоопарк").</p><p>Хотелось бы всё равно как-то анализировать такой код без необходимости разбираться в хрупкой и непонятной системе сборки. Что же делать?</p><p>На самом деле, решение есть! Смысл взаимодействия анализатора со сборочной системой состоит в том, чтобы получить необходимую для анализа информацию. Но получить её можно и другим способом: из запущенного процесса компиляции.</p><p>В <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1313/" rel="noopener noreferrer nofollow">новой статье</a> посмотрим, как воспользоваться этим механизмом для ОС Windows в анализаторе PVS-Studio, и &nbsp;как сделать его использование в процессе разработки удобным.</p> <a href="https://habr.com/ru/posts/968500/?utm_campaign=968500&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 20 Nov 2025 13:16:47 GMT</pubDate>
    <dc:creator><![CDATA[feeelin (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[статический анализ]]></category><category><![CDATA[C++]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[pvs-studio]]></category><category><![CDATA[мониторинг компиляции]]></category><category><![CDATA[сборочная система]]></category><category><![CDATA[C]]></category><category><![CDATA[static analysis]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @ledevik — Блог компании Криптонит (+1) — 12.11.2025 13:11]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/kryptonite/posts/965642/</guid>
    <link>https://habr.com/ru/companies/kryptonite/posts/965642/?utm_campaign=965642&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Модули C++20 в существующий проект: легкая прогулка или прыжок в бездну?</p><p>Старший инженер-программист С++ в компании «Криптонит» Сергей Чеботарев расскажет о миграции на модули C++20 на <a href="https://meetups.yadro.com/cpp-kernel-msk-1125/?utm_source=telegram&amp;utm_medium=referral&amp;utm_campaign=System_Level_11_2025_Kriptonit" rel="noopener noreferrer nofollow">System Level Meetup</a> в Москве 22 ноября в 12:00.</p><p><strong>Зарегистрироваться на митап онлайн и/или офлайн <a href="https://meetups.yadro.com/cpp-kernel-msk-1125/?utm_source=telegram&amp;utm_medium=referral&amp;utm_campaign=System_Level_11_2025_Kriptonit" rel="noopener noreferrer nofollow">можно по этой ссылке</a>.</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/cc4/703/b52/cc4703b52288be42707254c7112082df.jpeg" width="1080" height="1080"></figure><p>Наши программисты столкнулись с проблемой медленной сборки проектов и рассматривали Precompiled Headers как возможное решение.</p><p>Но отсутствие гарантий ускорения компиляции и поддержки со стороны стандарта заставило их обратить внимание на модули C++20, которые представились как «усовершенствованные PCH» — стандартизированные и более надежные.</p><p>Сергей расскажет о стратегии внедрения и первых проблемах, практических сложностях (отказе от import std и последствиях), рассмотрит реорганизацию системы сборки по концепции «метацелей».</p><p>В конце доклада — выводы и дорожная карта: стоит ли овчинка выделки?  </p> <a href="https://habr.com/ru/posts/965642/?utm_campaign=965642&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 12 Nov 2025 10:11:02 GMT</pubDate>
    <dc:creator><![CDATA[ledevik (Криптонит)]]></dc:creator>
      
      <category><![CDATA[с++]]></category><category><![CDATA[с++20]]></category><category><![CDATA[митап]]></category><category><![CDATA[митап в москве]]></category><category><![CDATA[митапы]]></category><category><![CDATA[precompiled headers]]></category><category><![CDATA[кейс]]></category><category><![CDATA[доклады]]></category><category><![CDATA[докладчики]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @myoffice_ru — Блог компании МойОфис (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/ncloudtech/posts/964154/</guid>
    <link>https://habr.com/ru/companies/ncloudtech/posts/964154/?utm_campaign=964154&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>«Там, где критична скорость, но не требуется оптимизация»: как и зачем МойОфис вышел в OpenSource</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/4be/ff4/e6e/4beff4e6e0d0e9079b542b20eccf1774.jpg" width="8064" height="5379"></figure><p>На Хабре опубликовано первое большое интервью нашего CTO Тамары Щепалкиной — и оно стоит прочтения, потому что это:</p><ol><li><p><strong>«Не форк с косметикой, а оригинальная инженерия»</strong></p><p>Компилятор tsnative прошёл проверку на безопасность, получил документацию, Docker-образ и демо, чтобы любой разработчик мог сразу попробовать его в работе.</p><p>«...<a href="https://github.com/newcloudtechnologies/tsnative" rel="noopener noreferrer nofollow">tsnative</a> — это не «форк с косметическими изменениями», а продукт, в основе которого лежит оригинальная инженерная работа. Именно поэтому мы и приняли решение вывести его в open source: у проекта есть собственная ценность и потенциал для развития, который может быть интересен и полезен гораздо шире, чем внутри одной компании…» </p><p>2. <strong>Open source как часть стратегии.</strong> </p><p>Решение не ситуативное — это долгосрочный курс на технологическую независимость, партнёрство с сообществом и развитие совместных инженерных практик.</p><p>3. <strong>«Где критична скорость, но не требуется оптимизация».</strong></p><p>tsnative создавался как инструмент, который помогает веб- и C++-разработчикам ускорять работу и выходить за рамки привычных сценариев. В основе компилятора — открытые библиотеки и собственная инженерия, без компромиссов по производительности. </p><p><strong>4. От ядра к экосистеме. </strong></p><p>Сначала — компилятор, но потенциально — UI-фреймворк и целая экосистема open source-проектов.</p><p>5. <strong>Сообщество в центре.</strong><br>Telegram-чат поддержки уже работает, а впереди — расширение комьюнити и совместное развитие открытых технологий.</p><p>«Ключевое для нас сейчас — подключить опенсорсное сообщество к развитию наших продуктов. Мы видим в этом не просто обмен кодом, а полноценное партнёрство: разработчики получают доступ к инструментам, которые можно использовать и дорабатывать под собственные задачи, а мы — обратную связь и новые идеи, которые помогают делать продукт лучше…» </p><p>В статье Тамара рассказывает, как и зачем МойОфис выходит на уровень open source-разработки, какие цели ставит и какие шаги уже сделаны.</p><p>Если вас интересует развитие стратегия открытого кода и сотрудничество с сообществом — обязательно загляните.</p><p><a href="https://habr.com/ru/articles/963680/" rel="noopener noreferrer nofollow">Читать интервью</a></p></li></ol> <a href="https://habr.com/ru/posts/964154/?utm_campaign=964154&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 10 Nov 2025 10:25:20 GMT</pubDate>
    <dc:creator><![CDATA[myoffice_ru (МойОфис)]]></dc:creator>
      
      <category><![CDATA[мойофис]]></category><category><![CDATA[opensourse]]></category><category><![CDATA[open source]]></category><category><![CDATA[c++]]></category><category><![CDATA[web-разработка]]></category><category><![CDATA[web-программирование]]></category><category><![CDATA[веб-разработа]]></category><category><![CDATA[компилятор]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[компилятор си]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @denis-19 — Python (+4) — 02.11.2025 08:15]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/962584/</guid>
    <link>https://habr.com/ru/posts/962584/?utm_campaign=962584&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Представлена открытая библиотека <a href="https://github.com/Jackhammer9/Reduino" rel="noopener noreferrer nofollow">Reduino</a>, которая поможет программировать микроконтроллеры на Python. Знания сложного и запутанного C++ не нужны, разбираться в нюансах Arduino больше не надо. Можно легко запрограммировать RGB-ленты, датчики, сенсоры и другие девайсы на простом Python. Ресурс помогает использовать все синтаксические структуры без кучи манипуляций с памятью: условия, циклы, массивы, кортежи и понятное ООП. Библиотека  преобразует код в C++. </p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/38a/c75/bb2/38ac75bb2a6373c50ad23c3ac4238997.png" width="773" height="512"></figure> <a href="https://habr.com/ru/posts/962584/?utm_campaign=962584&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 02 Nov 2025 05:15:05 GMT</pubDate>
    <dc:creator><![CDATA[denis-19]]></dc:creator>
      
      <category><![CDATA[Reduino]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @yadro_team — Блог компании YADRO (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/yadro/posts/954534/</guid>
    <link>https://habr.com/ru/companies/yadro/posts/954534/?utm_campaign=954534&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Ускоренный найм для инженеров C/C++: оффер за 3 дня</strong></p><p>Телеком-команда YADRO создает решения для мобильных сетей нового поколения: базовые станции GSM и LTE, а также весь программный стек — от низкоуровневых протоколов до систем управления. Сейчас в команде открылись вакансии инженеров, отбор на которые можно пройти гораздо быстрее, чем обычно.</p><blockquote><p><a href="https://sprintoffer.yadro.com/?utm_source=habr&amp;utm_medium=social&amp;utm_campaign=telecom_c++_10_25&amp;utm_content=page_posts" rel="noopener noreferrer nofollow">SPRINT OFFER</a> — это формат ускоренного найма: все этапы отбора проходят всего за три дня. Чтобы попасть в программу, достаточно подать заявку до 19 октября. </p></blockquote><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/208/b02/dd1/208b02dd1eb3a5c0568b1d56c2badedf.jpg" width="2400" height="1350"></figure><p><strong>Software Engineer (телеком-платформа)</strong></p><p>Вам предстоит разрабатывать платформенное решение для телеком-систем. На его основе строятся современные узлы сотовых сетей LTE- и GSM-стандартов — например, базовые станции и системы управления. В это роли вы будете:&nbsp;</p><ul><li><p>Развивать платформу, обеспечивающую middleware-сервисы, высокую доступность и управление узлами для приложений, входящих в состав базовой станции LTE/GSM.</p></li><li><p>Разрабатывать компоненты платформы в технологическом стеке C++/Linux.</p></li><li><p>Собирать и анализировать метрики для оценки производительности продукта.</p></li><li><p>Создавать и оптимизировать высокопроизводительные каналы коммуникации между компонентами, а также работать с подсистемами временной синхронизации, управления конфигурацией инфраструктуры и компонентов.</p></li><li><p>Поддерживать средства развертывания и обновления приложений.</p></li><li><p>Разрабатывать API для взаимодействия с аппаратным обеспечением и операционной системой при конфигурации и управлении инфраструктурой.</p></li><li><p>Обеспечивать качество продукта: исправлять дефекты, писать unit-тесты, проводить код-ревью, разрабатывать техническую документацию.</p></li><li><p>Создавать инструменты, упрощающие работу других разработчиков.</p></li><li><p>Участвовать в диагностике и анализе проблем работы системы в тестовых и полевых сценариях.</p></li></ul><p>Подать заявку <a href="https://sprintoffer.yadro.com/?utm_source=habr&amp;utm_medium=social&amp;utm_campaign=telecom_c++_10_25&amp;utm_content=page_posts" rel="noopener noreferrer nofollow">по ссылке →</a> </p><p><strong>Software Engineer C/C++ (LTE/GSM)</strong></p><p>Создавайте высоконагруженные системы, которые обеспечивают стандарты связи разных поколений. Работа охватывает три уровня. L1 — низкоуровневое программирование, работа с радиоканалом и сигналами, близкая к железу. L2 — логика, работа с алгоритмами и математическими моделями. L3 — высокоуровневое программирование, бизнес-логика. В этой роли вы будете:&nbsp;</p><ul><li><p>Разрабатывать решения совместно с командой — от этапа исследования и прототипирования до коммерческого внедрения пакетного ядра сети 5 поколения (5G).</p></li><li><p>Создавать программное обеспечение для базовых станций LTE, реализуя полный стек протоколов 3GPP.</p></li><li><p>Разрабатывать спецификации и дизайн программного обеспечения.</p></li><li><p>Интегрировать решения с другими компонентами системы — как программными, так и аппаратными.</p></li><li><p>Поддерживать и оптимизировать код, обеспечивая стабильность и производительность продукта.</p></li><li><p>Исследовать и устранять проблемы, влияющие на надежность, производительность и масштабируемость системы.</p></li></ul><p>Узнать больше и подать заявку <a href="https://sprintoffer.yadro.com/?utm_source=habr&amp;utm_medium=social&amp;utm_campaign=telecom_c++_10_25&amp;utm_content=page_posts" rel="noopener noreferrer nofollow">по ссылке →</a></p> <a href="https://habr.com/ru/posts/954534/?utm_campaign=954534&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 08 Oct 2025 11:21:42 GMT</pubDate>
    <dc:creator><![CDATA[yadro_team (YADRO)]]></dc:creator>
      
      <category><![CDATA[вакансии]]></category><category><![CDATA[оффер]]></category><category><![CDATA[работа в it]]></category><category><![CDATA[телеком]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Atom_fg — Open source (+3) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/943696/</guid>
    <link>https://habr.com/ru/posts/943696/?utm_campaign=943696&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/cd1/b6d/6c7/cd1b6d6c7adf370547a6926833251ea2.png" alt="" title="" width="759" height="607"></figure><div class="floating-image"><p>Опубликован исходный код игры "Русская рулетка 2: закрытые планеты".</p><p>2 сентября 2025 года исходники были выложены на Internet Archive, архив включает в себя тексты программ на языках C++/Asm (Требуются Turbo Assembler и Watcom C/C++), дополнительные утилиты для сборки и набор игровых данных для версий игры на разных языках (русский, английский, немецкий, итальянский).</p></div><p>Исходный код был предоставлен одним из разработчиков игры, Святославом "Suavik" Образцовым, под лицензией правообладателя:</p><blockquote><p>Все оригинальные файлы разработаны и предоставлены компанией Logos.</p><p>Лицензия позволяет публикацию и использование исходных текстов программ и данных с любыми изменениями при обязательном указании, что оригинальные файлы были разработаны компанией Logos.</p></blockquote><blockquote><p>All original files are developed and provided by Logos.</p><p>The license allows publication and use of source code of programs and data with any changes, provided that the original files were developed by Logos.</p></blockquote><p>Ссылка на оригинальные исходники: <a href="https://archive.org/details/license_202509" rel="noopener noreferrer nofollow">https://archive.org/details/license_202509</a></p><p>Репозиторий Github с кодом: <a href="https://github.com/Marisa-Chan/rr2nw" rel="noopener noreferrer nofollow">https://github.com/Marisa-Chan/rr2nw</a></p> <a href="https://habr.com/ru/posts/943696/?utm_campaign=943696&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 04 Sep 2025 19:20:14 GMT</pubDate>
    <dc:creator><![CDATA[Atom_fg]]></dc:creator>
      
      <category><![CDATA[русская рулетка]]></category><category><![CDATA[logos]]></category><category><![CDATA[бука]]></category><category><![CDATA[internet archive]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @NataliaZheltova — Блог компании 2ГИС (+4) — 03.09.2025 15:07]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/2gis/posts/943552/</guid>
    <link>https://habr.com/ru/companies/2gis/posts/943552/?utm_campaign=943552&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>2ГИС зовёт на хакатон: <a href="https://hackathon.2gis.ru/?utm_sourc%D0%B5=habr&amp;utm_medium=post&amp;utm_campaign=general&amp;utm_content=2hackathon" rel="noopener noreferrer nofollow">https://hackathon.2gis.ru </a></strong></p><p>4–5 октября, офлайн, Москва. Два дня, чтобы общаться, фигачить, вдохновляться и повлиять на городские сервисы!</p><p>Три трека: городские данные с ЦОДД, инклюзия с фондами «Антон тут рядом», «Продвижение», «ЛизаАлерт» и носимые устройства — часы, браслеты, AR и другие гаджеты.&nbsp;Будут онлайн-встречи, чтобы больше узнать про реальные задачи. </p><p>Призовой фонд: <strong>1 000 000 рублей&nbsp;</strong>и шанс, что проект попадёт прямо в 2ГИС🔥</p><p>Регистрироваться можно с командой от 3 до 6 человек или самостоятельно — поможем найти команду в чате!</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/2a1/e7a/e8d/2a1e7ae8d7c849bec5d6042b446d285b.png" width="3116" height="1755"></figure> <a href="https://habr.com/ru/posts/943552/?utm_campaign=943552&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 03 Sep 2025 12:07:54 GMT</pubDate>
    <dc:creator><![CDATA[NataliaZheltova (2ГИС)]]></dc:creator>
      
      <category><![CDATA[хакатоны]]></category><category><![CDATA[2гис]]></category><category><![CDATA[разработка мобильных приложений]]></category><category><![CDATA[go]]></category><category><![CDATA[c++]]></category><category><![CDATA[python]]></category><category><![CDATA[swift]]></category><category><![CDATA[kotlin]]></category><category><![CDATA[flutter]]></category><category><![CDATA[управление продуктом]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @myoffice_ru — Блог компании МойОфис (+1) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/ncloudtech/posts/939512/</guid>
    <link>https://habr.com/ru/companies/ncloudtech/posts/939512/?utm_campaign=939512&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Мы выбрали 10 топ-хабрастатей за 10 лет, а вы выберите лучший HR-бренд</strong></p><p>Будем краткими: в этом году блогу <strong>МойОфис на Хабре</strong> исполнилось 10 лет!<br>Мы собрали <a href="https://habr.com/ru/companies/ncloudtech/articles/939508/" rel="noopener noreferrer nofollow">юбилейную подборку </a>— выбрали <strong>по одной ключевой статье на каждый год</strong>. Это тексты, без которых, как говорится, нас невозможно представить, еще труднее – понять!</p><p>А вас просим оценить нас в <strong>ежегодном опросе Хабр/ЭКОПСИ</strong>. Это займёт всего <strong>5–7 минут</strong>. Мы соберём важную обратную связь, а индустрия получит объективную картину IT-брендов в 2025 году.</p><iframe id="68a8322e61240a0a714cf4e7" src="https://embedd.srv.habr.com/iframe/68a8322e61240a0a714cf4e7" class="embed_video embed__content" allowfullscreen="true"></iframe> <a href="https://habr.com/ru/posts/939512/?utm_campaign=939512&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 22 Aug 2025 08:48:34 GMT</pubDate>
    <dc:creator><![CDATA[myoffice_ru (МойОфис)]]></dc:creator>
      
      <category><![CDATA[hr]]></category><category><![CDATA[hr-процесс]]></category><category><![CDATA[hr-бренд]]></category><category><![CDATA[hr в it]]></category><category><![CDATA[опрос]]></category><category><![CDATA[программирование]]></category><category><![CDATA[компании it]]></category><category><![CDATA[компании]]></category><category><![CDATA[бигтех]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Andrey2008 — Блог компании PVS-Studio (+4) — 11.08.2025 17:24]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/936072/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/936072/?utm_campaign=936072&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>В прошлом году я помог Дмитрию Свиридкину подготовить и опубликовать цикл из <a href="https://habr.com/ru/companies/pvs-studio/articles/877274/" rel="noopener noreferrer nofollow">12 статей</a> "Путеводитель C++ программиста по неопределённому поведению". Теперь этот расширенный, доработанный и обобщённый материал доступен в виде печатной книги:</p><p><strong>Экскурс в неопределенное поведение C++</strong> / Д. О. Свиридкин, А. Н. Карпов, – СПб.: БХВ-Петербург, 2025. – 384 с. – (Профессиональное программирование)</p><p>ISBN 978-5-9775-2073-7</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/bc6/452/74f/bc645274f87a1cd1a47e0a079ef71a69.JPG" width="5712" height="4284"></figure><blockquote><p>Книга представляет собой обширный справочник типичных, а также очень редко встречающихся ошибок, характерных для программ на C++, Rust и других языках для низкоуровневого и системного программирования, в частности на ассемблере. Все рассмотренные проблемы так или иначе связаны с неопределенным, неуточненным и определяемым реализацией поведением языковых конструкций. Наибольшее внимание уделено неопределенному поведению, возможным признакам его присутствия в программах и методам поиска, диагностики и&nbsp;устранения такого поведения.</p></blockquote><p>Книгу можно найти в offline и online магазинах.</p><p>Ещё какое-то количество книг я и коллеги раздадим в качестве сувениров и призов на различных мероприятиях, таких как:</p><ul><li><p><a href="https://centraluniversity.ru/na_plusah_club" rel="noopener noreferrer nofollow">Сплошные плюсы. Клуб С++ разработчиков</a>.</p></li><li><p><a href="https://lesta-igry.timepad.ru/event/3475889/" rel="noopener noreferrer nofollow">Митап «Мир С++»</a>.</p></li><li><p>И т.д. Узнать о подобных мероприятиях можно, например, в моём ТГ канале "<a href="https://t.me/programming_tales" rel="noopener noreferrer nofollow">Бестиарий программирования</a>".</p></li></ul><p>Приятного и вдумчивого чтения!</p> <a href="https://habr.com/ru/posts/936072/?utm_campaign=936072&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 11 Aug 2025 14:24:41 GMT</pubDate>
    <dc:creator><![CDATA[Andrey2008 (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[c++]]></category><category><![CDATA[C]]></category><category><![CDATA[си++]]></category><category><![CDATA[си]]></category><category><![CDATA[неопределённое поведение]]></category><category><![CDATA[UB]]></category><category><![CDATA[undefined behavior]]></category><category><![CDATA[книга]]></category><category><![CDATA[книга на русском]]></category><category><![CDATA[программирование]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @myoffice_ru — Блог компании МойОфис (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/ncloudtech/posts/933718/</guid>
    <link>https://habr.com/ru/companies/ncloudtech/posts/933718/?utm_campaign=933718&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>TypeScript и C++ в одном бинаре. Первый open source-проект от МойОфис   </strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/049/85b/0d0/04985b0d0b89f1653c90d4bb196de805.png" width="1920" height="1080"></figure><p>Команда <strong><a href="https://myoffice.ru/?utm_source=hr&amp;utm_medium=habr_post_opensource&amp;utm_campaign=04_08_2025" rel="noopener noreferrer nofollow">МойОфис</a></strong> выложила в open source собственную разработку — компилятор <strong>tsnative</strong>. Это кроссплатформенный инструмент, который объединяет удобство TypeScript с производительностью C++ в одном приложении. Исходники — <a href="https://github.com/newcloudtechnologies/tsnative" rel="noopener noreferrer nofollow">на GitHub</a> под лицензией <strong>Apache 2.0</strong>.</p><p>Компилятор tsnative — это первая и ключевая часть более масштабного проекта под названием <strong>AntiQ</strong>, в котором мы переосмысляем подход к кроссплатформенной разработке без тяжёлых фреймворков.</p><p><strong>AntiQ</strong> разделен на два самостоятельных компонента. Сейчас в open source опубликован только tsnative&nbsp;— главный модуль, в котором сосредоточена основная логика и заложены архитектурные принципы всей платформы.</p><p><strong>Зачем это нужно? </strong></p><p>tsnative — это кроссплатформенный компилятор, преобразующий TypeScript в нативный машинный код. Он обеспечивает бесшовную интеграцию с C++ без glue-кода или JavaScript-движков, объединяя удобство высокоуровневой разработки с производительностью системного кода. В результате вы получаете один бинарник, собранный из двух языков.</p><p><strong>Как это работает:</strong></p><ul><li><p>C++-функции помечаются TS_EXPORT;</p></li><li><p>генерируются .d.ts-декларации для TS;</p></li><li><p>TypeScript- и C++-код собираются через LLVM;</p></li><li><p>на выходе — один исполняемый файл, без обёрток.</p></li></ul><pre><code class="cpp">// math.cpp
#include "TS.h"
TS_EXPORT int add(int a, int b) {
return a + b;
}
// index.ts
console.log(add(2, 3)); // -&gt; 5</code></pre><pre><code class="typescript">// index.ts
console.log(add(2, 3)); // -&gt; 5</code></pre><p><strong>Проект может быть интересен тем, кто:</strong></p><ul><li><p>делает нативные приложения, но хочет писать часть логики на TS;</p></li><li><p>ищет замену закрытым коммерческим компиляторам;</p></li><li><p>любит ковыряться в сборке, кросс-компиляции и низкоуровневом коде.</p></li></ul><p>Открытый код — не просто «выложили и забыли». Мы хотим, чтобы проектом <strong>пользовались, коммитили, обсуждали</strong>. Поэтому будем рады pull request’ам, issue и звёздочкам. Всё как обычно :)</p><p><strong><a href="https://github.com/newcloudtechnologies/tsnative" rel="noopener noreferrer nofollow">Исходники на GitHub</a></strong></p><p>Если у вас есть вопросы или комментарии, вы можете задать их в чате проекта: <a href="https://t.me/antiqmyoffice" rel="noopener noreferrer nofollow">https://t.me/antiqmyoffice</a></p> <a href="https://habr.com/ru/posts/933718/?utm_campaign=933718&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 05 Aug 2025 09:19:48 GMT</pubDate>
    <dc:creator><![CDATA[myoffice_ru (МойОфис)]]></dc:creator>
      
      <category><![CDATA[мойофис]]></category><category><![CDATA[opensourse]]></category><category><![CDATA[github]]></category><category><![CDATA[c++]]></category><category><![CDATA[typescript]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[компилятор]]></category><category><![CDATA[компиляторы кода]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @yadro_team — Блог компании YADRO (+4) — 04.08.2025 17:51]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/yadro/posts/933920/</guid>
    <link>https://habr.com/ru/companies/yadro/posts/933920/?utm_campaign=933920&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Что ты сделал для <s>хип-хопа</s> IT-инфраструктуры в свои годы? Писал UEFI и BMC для высоконагруженного оборудования&nbsp;</strong></p><p>В YADRO есть распределенная команда, которая разрабатывает и сопровождает собственные программные реализации UEFI (BIOS) и BMC. Для самого разного оборудования —&nbsp;от серверов до телеком- и клиентского оборудования.&nbsp;</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/ad4/6dc/0e1/ad46dc0e163432ef7c13b36c25b7573a.png" alt="Что делают BIOS и BMC в продуктах" title="Что делают BIOS и BMC в продуктах" width="1270" height="613"><div><figcaption>Что делают BIOS и BMC в продуктах</figcaption></div></figure><p><strong><a href="https://careers.yadro.com/team/bios-bmc?utm_source=habr&amp;utm_medium=referral&amp;utm_campaign=bios_bmc_promo_08_25&amp;utm_content=post040825" rel="noopener noreferrer nofollow">Познакомиться с командой →&nbsp;</a></strong></p><p>Какие задачи выполняют в команде BIOS/BMC:&nbsp;</p><ul><li><p>Реализуют программную поддержку новых аппаратных продуктов компании, определяют протоколы и методы взаимодействия между программными и аппаратными компонентами продуктов YADRO.</p></li><li><p>Проводят верификацию микрокода и&nbsp;выполняют проверку прошивок микросхем всех продуктов компании. Выстраивают стратегию тестирования.</p></li><li><p>Исследуют новые программные и&nbsp;аппаратные технологии для применения в продуктах. Рефакторят код для повышения производительности.</p></li><li><p>Придумывают методы безопасного обновления прошивок BIOS и BMC, чтобы обеспечить минимальный или нулевой даунтайм.</p></li><li><p>Добавляют новые фичи и меняют существующие — от WebUI до политик управления аппаратными компонентами.</p></li></ul><blockquote><p>Команде нужно больше инженеров —&nbsp;разработчиков на С/C++, тестировщиков, автоматизаторов и техлидов. Знакомься с вакансиями <a href="https://careers.yadro.com/team/bios-bmc?utm_source=habr&amp;utm_medium=referral&amp;utm_campaign=bios_bmc_promo_08_25&amp;utm_content=post040825" rel="noopener noreferrer nofollow">на сайте</a> и вовлекайся в трушные инженерные задачи на современном технологическом стеке.&nbsp;</p></blockquote> <a href="https://habr.com/ru/posts/933920/?utm_campaign=933920&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 04 Aug 2025 14:51:06 GMT</pubDate>
    <dc:creator><![CDATA[yadro_team (YADRO)]]></dc:creator>
      
      <category><![CDATA[bios]]></category><category><![CDATA[uefi]]></category><category><![CDATA[пак]]></category><category><![CDATA[аппаратная разработка]]></category><category><![CDATA[bmc]]></category><category><![CDATA[карьера]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Siemargl — Delphi (+4) — 22.07.2025 01:13]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/929766/</guid>
    <link>https://habr.com/ru/posts/929766/?utm_campaign=929766&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Есть для альтернатива Delphi в 2025 году для простых кроссплатформенных приложений?</strong></p><p>Навеяно обсуждением <a href="https://habr.com/ru/articles/928810/" rel="noopener noreferrer nofollow">статьи про Дельфи в 2025</a>.</p><p>Q1: Если сейчас есть задача по-быстрому сбацать что то с формами под винду - какая есть альтернатива дельфи?  </p><p>Q2: А если так же быстро накидать, только кроссплатформенное приложение и без зависимостей?  </p><p>И мой ответ </p><p>A: Не находишь, что 3000$ за кроссплатформенный дизайнер форм слишком дорого? Даже за хороший.</p><p>Собственно, порылся в памяти и в википедии, проверил что там еще живое и набросал списочек визуальных дизайнеров для Linux - приложеньиц. По названию язык программирования и фреймворк легко идентифицируется.</p><p>Все может использоваться бесплатно и без особых претензий на функциональность. Единственное, иногда бывает нужно еще нарисовать какой то чарт/график и загрузить/записать данные в БД/XML/JSON - с этим могут быть нюансы с конкретным вариантом.</p><p>С чем то я работал, с чем то нет, актуальные версии вживую не проверял. </p><ol><li><p>GNOME Builder (ex.Anjuta). GTK multilang IDE</p></li><li><p>Cambalache (ex.Glade) - GTK form builder</p></li><li><p>Qt Creator</p></li><li><p>FLUID for FLTK</p></li><li><p>wxFormBuilder for wxWidgets&nbsp;</p></li><li><p>Projucer for JUCE</p></li><li><p>Ultimate++&nbsp;</p></li><li><p>NetBeans GUI design tool for Java Swing&nbsp;</p></li><li><p>TKproE (TCL/TK Programming Environment)</p></li><li><p>Lazarus</p></li><li><p>MSEide+MSEgui Pascal</p></li><li><p>GTK# Visual Designer MonoDevelop (retired)</p></li><li><p>Xamarin.Forms GTK Backend (discontinued for NET MAUI)</p></li><li><p>JavaFX Scene Builder</p></li><li><p>Pygubu Tkinter a GUI for Python</p><p>Может еще что и забыл, либо не попалось на глаза.</p></li></ol> <a href="https://habr.com/ru/posts/929766/?utm_campaign=929766&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 21 Jul 2025 22:13:12 GMT</pubDate>
    <dc:creator><![CDATA[Siemargl]]></dc:creator>
      
      <category><![CDATA[Desktop]]></category><category><![CDATA[GUI]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @yadro_team — Блог компании YADRO (+2) — 21.07.2025 17:51]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/yadro/posts/929648/</guid>
    <link>https://habr.com/ru/companies/yadro/posts/929648/?utm_campaign=929648&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Из чего состоит MeyerSAN — решение для имитации ошибок в СХД</strong></p><p>Проект MeyerSAN — это программно-аппаратный комплекс на основе сервера&nbsp;<a href="https://yadro.com/ru/vegman" rel="noopener noreferrer nofollow">VEGMAN</a>. Комплекс  имитирует неисправность SAS HDD и SSD и позволяет автоматически тестировать реакцию системы хранения данных на ошибки. Решение необходимо для тестирования и валидации работы подсистем, которые находятся в составе СХД и определяют проблемные диски.&nbsp;</p><p>Как это работает:&nbsp;</p><ol><li><p>Мы подключаем сервер к системе хранения данных.&nbsp;</p></li><li><p>С помощью ПО и драйверов заставляем СХД видеть сервер как диск или несколько дисков.</p></li><li><p>Вносим отклонения в поведение диска. Например, имитируем ситуацию, когда пользователь записал данные в диск, а прочитать их не смог.</p></li></ol><blockquote><p>Задача MeyerSAN — эмулировать проблемы с дисками: задержки, ошибки, порчу данных и метаданных.</p></blockquote><p>Архитектура MeyerSAN состоит из трех больших блоков:&nbsp;</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/485/4ea/5bd/4854ea5bdffda0a9f89a97a6fed335b7.png" width="893" height="799"></figure><ol><li><p>REST, так называемый MRSNMGMT. Позволяет конфигурировать систему в соответствии с пожеланиями.</p></li><li><p>MRSNLib. Cодержит бизнес-логику приложения: обработку и модификацию команд.</p></li><li><p>Драйверы низкого уровня. Они предоставляют нам механизмы транспорта и позволяют соответствовать всем протоколам.</p></li></ol><blockquote><p>Средний компонент, MRSNLib, команда разработчиков написала на современном С++ 23. Как именно инженерам удалось интегрировать новейший стандарт, а также паттерны объектно-ориентированного программирования в проект MeyerSAN, рассказывает один из создателей проекта Константин Крюков <a href="https://habr.com/ru/companies/yadro/articles/927866/" rel="noopener noreferrer nofollow">в новой статье. </a></p></blockquote> <a href="https://habr.com/ru/posts/929648/?utm_campaign=929648&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 21 Jul 2025 14:51:44 GMT</pubDate>
    <dc:creator><![CDATA[yadro_team (YADRO)]]></dc:creator>
      
      <category><![CDATA[ооп]]></category><category><![CDATA[c++]]></category><category><![CDATA[c++23]]></category><category><![CDATA[схд]]></category><category><![CDATA[имитация]]></category>
  </item>
  

	
  

  

  

      

      

      

    
  </channel>
</rss>
