<?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, 13 Jul 2026 01:10:00 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[Пост @MaxRokatansky — Блог компании OTUS (+2) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/otus/posts/1057968/</guid>
    <link>https://habr.com/ru/companies/otus/posts/1057968/?utm_campaign=1057968&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Ошибки, которых не видно в сигнатуре: зачем C++ нужен <code>std::expected</code></strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/73e/512/044/73e51204476db192fd7dca7dbff0395b.jpg" width="2048" height="768"></figure><p>Функция выглядит предсказуемо, пока один из вызовов не бросает исключение, о котором никто не вспомнил. Типы ошибок остаются в документации, управление расползается по <code>try/catch</code>, а изменение глубоко в стеке неожиданно ломает обработку выше.</p><p>Недавно в <a href="https://otus.pw/MLMk/" rel="noopener noreferrer nofollow">статье</a> разобрали <code>std::expected</code> из C++23: как сделать ошибку частью сигнатуры, собирать цепочки через <code>and_then</code> и <code>transform</code>, разделять типы ошибок между слоями и постепенно внедрять подход в legacy-код. Заодно увидели, где <code>std::expected</code> действительно полезен, а где добавит лишнюю сложность.</p><p><strong>16 июля в 20:00</strong> продолжим тему на бесплатном уроке «Выразительный C++: кодируем намерения». На практике разберём, как переносить неявные договорённости в типы, сигнатуры и структуру программы. <a href="https://otus.pw/hShj/" rel="noopener noreferrer nofollow">Присоединяйтесь</a>.</p><blockquote><p><em>Полный список бесплатных уроков июля смотрите </em><a href="https://otus.pw/89kk/" rel="noopener noreferrer nofollow"><em>в дайджесте.</em></a></p></blockquote> <a href="https://habr.com/ru/posts/1057968/?utm_campaign=1057968&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 11 Jul 2026 10:21:59 GMT</pubDate>
    <dc:creator><![CDATA[MaxRokatansky (OTUS)]]></dc:creator>
      
      <category><![CDATA[C++]]></category><category><![CDATA[обработка ошибок]]></category><category><![CDATA[исключения]]></category><category><![CDATA[сигнатура функции]]></category><category><![CDATA[типизация ошибок]]></category><category><![CDATA[c++23]]></category><category><![CDATA[функциональный стиль]]></category><category><![CDATA[архитектура приложений]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @armani-boi — Amazon Web Services (+4) — 10.07.2026 12:13]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1057804/</guid>
    <link>https://habr.com/ru/posts/1057804/?utm_campaign=1057804&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Как и многие подобные истории, эта началась с ночного парсинга, который к утру превратился в тыкву.</p><p>Я запустил скрапер вечером, он собрал пару тысяч страниц, я ушёл спать. Утром в логах сплошные 403 и капчи, а в базе за ночь легло страниц двести. Ок, думаю, прокси спалили. Поменял пул на резидентный, накинул puppeteer-stealth, сверху ещё пачку заплаток с гитхаба. Проработало ровно до следующего вечера. Потом опять тыква.</p><p>Так продолжалось полгода. В какой-то момент мне надоело в сотый раз докидывать заплатку, и я решил разобраться, что конкретно меня палит. Не прокси. Не поведение. Сам браузер.</p><p>Осмотрим пациента</p><p>Любой стелс устроен одинаково: поверх Chrome вешается слой JavaScript, который переписывает то, на что смотрит антибот. navigator, canvas, WebGL и ещё десятки поверхностей. И вот тут первая засада.</p><p>Берём подменённую функцию и просим показать её исходник через toString(). Настоящая функция браузера отвечает [native code]. А моя заплатка честно показывает мой же JavaScript. Спалился на первой строчке.</p><p>Ладно, стелс это тоже патчит. Но детектор не дурак и лезет глубже.</p><ul><li><p>Сверяет главный фрейм с воркером и iframe. Заплатка живёт в одном контексте, а тот же объект, вытащенный из другого, её не видит.</p></li><li><p>Ловит утечку Runtime.enable, по ней сразу понятно, что браузером кто-то рулит по CDP.</p></li><li><p>Смотрит на форму TLS-хендшейка (JA3/JA4) и сверяет её с тем, что обещает User-Agent. Заявляешь Chrome на Windows, а рукопожатие выдаёт питоновский клиент.</p></li><li><p>Перерисовывает один и тот же холст дважды и смотрит, стабилен ли отпечаток, или заплатка подмешивает случайный шум, которого у настоящего железа нет.</p></li></ul><p>Где-нибудь да разъедется. И так будет всегда, потому что я крашу браузер сверху, а не меняю его изнутри. Это не «кривая заплатка», это тупик подхода: маскировка и то, что её просвечивает, написаны на одном языке. Тот, кто читает страницу, всегда на уровень ниже того, кто патчит её из той же страницы.</p><p>Вскрытие</p><p>Раз проблема в слое поверх браузера, надо убрать слой и лезть в сам браузер. Я взял исходники Chromium и пошёл править фингерпринт прямо в C++, в Blink, V8 и BoringSSL.</p><p>Идея простая. Каждое значение, которое читает детектор, должно быть не подменено сверху, а просто другим внутри, ровно как оно было бы на чужой машине. Тогда никакого слоя нет. Подменённый геттер это настоящий C++ геттер, поэтому toString() в любом реалме честно отдаёт [native code]. Сверка «фрейм против воркера» ничего не находит, потому что находить нечего: значение одно и то же везде, оно вкомпилировано в движок. Браузер, который изучает сам себя, видит обычный Chrome. Потому что это и есть обычный Chrome, просто с другими числами внутри.</p><p>Что заработало, а что нет</p><p>Сразу оговорю, чего не заявляю, потому что именно на этом обычно и врут. Это про фингерпринт браузера, а не про поведение сессии. Серверный антифрод конкретной площадки, поведенческий анализ, скорость и траектория мышки, тут я вам не помощник. Fortress чинит браузер, а не то, как вы им управляете.</p><p>А что заявляю, можно проверить руками, не веря мне на слово. Я прогнал сборку по публичным</p><ul><li><p>CreepJS: 0% headless, 0% stealth.</p></li><li><p>Sannysoft: всё зелёное.</p></li><li><p>BrowserScan: пишет «Normal».</p></li><li><p>Живой Cloudflare Turnstile: проходит без клика мышкой.</p></li></ul><p>Всё это воспроизводится одним скриптом tools/<a href="http://gauntlet.py" rel="noopener noreferrer nofollow">gauntlet.py</a> из репозитория, так что можно прогнать самому и убедиться. Персона при этом собирается когерентно: платформа, GPU, таймзона, язык, набор голосов, раскладка клавиатуры и форма TLS съезжаются в один правдоподобный Windows-девайс, а не в ме</p><p>По коду менять нечего</p><p>Движок поднимает сырой CDP на порту 9222, без утечки Runtime.enable. Я цепляю к нему свой ж остальной код работает как работал. Меняется одна строчка, адрес подключения.</p><p>Патчей тридцать четыре, каждый маленький и на одну задачу, читается за минуту. Всё открыто  единому слову, соберите движок сами и проверьте, что внутри ровно то, что заявлено.</p><p>github.com/tiliondev/fortress</p> <a href="https://habr.com/ru/posts/1057804/?utm_campaign=1057804&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 10 Jul 2026 09:13:18 GMT</pubDate>
    <dc:creator><![CDATA[armani-boi]]></dc:creator>
      
      <category><![CDATA[scrapping]]></category><category><![CDATA[browser]]></category><category><![CDATA[data]]></category><category><![CDATA[data mining]]></category><category><![CDATA[antibot]]></category><category><![CDATA[chromium]]></category><category><![CDATA[patch]]></category><category><![CDATA[selenium]]></category><category><![CDATA[opensource]]></category><category><![CDATA[opensource projects]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dirvika — Блог компании Veai (+4) — 07.07.2026 18:08]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/veai/posts/1056666/</guid>
    <link>https://habr.com/ru/companies/veai/posts/1056666/?utm_campaign=1056666&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Почему ИИ-агент для кода промахивается мимо нужного метода</strong></p><p>Несколько последних постов об ИИ-агентах,&nbsp;которые я читала на этой неделе,&nbsp;сошлись в одну мысль:&nbsp;агенты часто ведут себя по-разному на одной и той же задаче,&nbsp;и разгадка почему&nbsp;-&nbsp;находится не там,&nbsp;где ожидаешь.&nbsp;Вот конкретный пример,&nbsp;на котором это видно сразу.</p><p>Агент,&nbsp;который ищет код текстом,&nbsp;физически не отличает <code>OrderService.validate</code> от&nbsp;<code>UserDto.validate</code>:&nbsp;для него это просто совпадение символов «validate». Агент,&nbsp;который спрашивает у IDE&nbsp;«кто на самом деле вызывает этот метод»,&nbsp;получает точный ответ,&nbsp;потому что IDE знает типы,&nbsp;разрешённые ссылки и видимость каждого символа.&nbsp;Разница между этими двумя подходами не абстрактная,&nbsp;она измеряется в конкретных цифрах.</p><p><strong>Точка отсчёта: почему grep и RAG промахиваются</strong></p><p>Кодовый агент ищет по проекту двумя способами:&nbsp;grep/ripgrep по содержимому файлов и векторный поиск по эмбеддингам кусков кода.&nbsp;На маленьком проекте оба варианта работают сносно.&nbsp;На enterprise-репозитории на миллионы строк с десятками модулей поведение ломается одинаково:&nbsp;запрос&nbsp;«найди использования метода&nbsp;<code>validate</code>»&nbsp;возвращает тысячу с лишним совпадений,&nbsp;из которых подавляющее большинство&nbsp;-&nbsp;другие методы с тем же именем в других классах.&nbsp;Векторный поиск находит куски кода,&nbsp;которые&nbsp;«похожи по смыслу»,&nbsp;но это может быть валидация в совершенно другом домене.</p><p><strong>Что показали цифры на 27 задачах</strong></p><p>Мы сравнили <strong>три версии агента</strong> на <strong>27 задачах вида</strong>&nbsp;«найди все места,&nbsp;где используется метод X»&nbsp;из реальных тикетов трёх внутренних репозиториев на Java и Kotlin:&nbsp;агент на ripgrep,&nbsp;агент на ripgrep с векторным RAG и агент на PSI-индексе IntelliJ&nbsp;(<code>find_usages</code>,&nbsp;<code>find_declaration</code>,&nbsp;<code>class_hierarchy</code>&nbsp;вместо текстового поиска).</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/70d/d43/514/70dd4351465ec1abac0efd433b5d47d5.png" alt="Вариант поискаPrecisionRecallF1Контекст, токенов$/ответripgrep0,410,820,5578 4001,12ripgrep + векторный RAG0,580,790,6792 1001,38PSI-индекс0,960,930,9416 7000,21" title="Вариант поискаPrecisionRecallF1Контекст, токенов$/ответripgrep0,410,820,5578 4001,12ripgrep + векторный RAG0,580,790,6792 1001,38PSI-индекс0,960,930,9416 7000,21" width="3200" height="1400"><div><figcaption>Вариант поискаPrecisionRecallF1Контекст, токенов$/ответripgrep0,410,820,5578 4001,12ripgrep + векторный RAG0,580,790,6792 1001,38PSI-индекс0,960,930,9416 7000,21</figcaption></div></figure><p>Precision показывает,&nbsp;сколько из найденного агентом оказалось реальными использованиями метода,&nbsp;а не случайным совпадением имён.&nbsp;Recall показывает,&nbsp;сколько из всех реальных использований в коде агент вообще нашёл,&nbsp;ничего не пропустив.</p><p>У ripgrep recall высокий&nbsp;(0,82):&nbsp;текстовый поиск почти никогда не пропускает совпадения по имени.&nbsp;Но precision низкий&nbsp;(0,41):&nbsp;больше половины найденного&nbsp;-&nbsp;чужие методы с тем же именем,&nbsp;и их приходится разбирать вручную.&nbsp;У PSI-индекса высоки обе величины&nbsp;(0,96 и 0,93):&nbsp;агент находит почти все нужные места и почти не приносит лишнего.&nbsp;F1 сводит обе величины в одно число,&nbsp;и у ripgrep он проседает именно из-за мусора в выдаче,&nbsp;хотя нужные места он и находит.</p><p>Отсюда пятикратная экономия контекста и в пять с лишним раз более дешёвый ответ при кратно более высокой точности:&nbsp;агент на PSI-индексе не читает тысячи лишних строк,&nbsp;которые вернул бы текстовый поиск.</p><p><strong>Точный поиск не отменяет проверку</strong></p><p>Даже когда агент точно нашёл все места,&nbsp;где используется метод,&nbsp;и внёс правку во все,&nbsp;это не гарантирует,&nbsp;что правка корректна:&nbsp;<strong>точный поиск решает только задачу&nbsp;«найти нужные места»</strong>,&nbsp;а не&nbsp;«проверить,&nbsp;что код после правки работает».&nbsp;Поэтому прежде чем объявить об успехе,&nbsp;агент должен прогнать компилятор и тесты:&nbsp;тест зелёный,&nbsp;ошибок компиляции нет,&nbsp;покрытие не просело.&nbsp;Пока в выводе компилятора или тестового прогона есть хоть одна ошибка,&nbsp;агент обязан либо исправить её,&nbsp;либо сообщить о проблеме,&nbsp;а не писать об успехе.</p><p>Но точный поиск снимает с агента часть ручной работы:&nbsp;не нужно самому перепроверять по всему проекту,&nbsp;все ли использования метода он нашёл&nbsp;-&nbsp;эту проверку берёт на себя IDE,&nbsp;как это устроено в Veai,&nbsp;а оставшуюся часть верификации&nbsp;-&nbsp;компилятор и тесты.</p> <a href="https://habr.com/ru/posts/1056666/?utm_campaign=1056666&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 07 Jul 2026 15:08:33 GMT</pubDate>
    <dc:creator><![CDATA[dirvika (Veai)]]></dc:creator>
      
      <category><![CDATA[программирование]]></category><category><![CDATA[ии-агенты]]></category><category><![CDATA[ии и машинное обучение]]></category><category><![CDATA[ии]]></category><category><![CDATA[java]]></category><category><![CDATA[ai-агенты]]></category><category><![CDATA[ai]]></category><category><![CDATA[kotlin]]></category><category><![CDATA[аналитика]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @denis-19 — Windows (+4) — 07.07.2026 15:39]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1056584/</guid>
    <link>https://habr.com/ru/posts/1056584/?utm_campaign=1056584&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Представлен открытый сервис <a href="https://github.com/mrT4ntr4/NtWarden" rel="noopener noreferrer nofollow">NtWARden</a> (Windows Analysis and Research Toolkit), который распознает любые вредоносы и проблемное ПО, даже если эти компоненты находятся глубоко в системе Windows.</p><p>Проект NtWARden:</p><ul><li><p>сканирует процессы, службы, сеть, внутренние механизмы ядра;</p></li><li><p>обнаруживает скрытые вредоносы;</p></li><li><p>убивает майнеры и трояны;</p></li><li><p>показывает реальную картину нагрузки на&nbsp;процессор;</p></li><li><p>помогает контролировать, что&nbsp;находится в&nbsp;системе прямо сейчас: службы, сетевые соединения, скрытые процессы;</p></li><li><p>может подключиться к&nbsp;другому ПК и также отслеживать его процессы.</p></li></ul><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/478/1ca/982/4781ca9826406b9edf32499f866bc939.jpg" width="1280" height="900"></figure> <a href="https://habr.com/ru/posts/1056584/?utm_campaign=1056584&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 07 Jul 2026 12:39:09 GMT</pubDate>
    <dc:creator><![CDATA[denis-19]]></dc:creator>
      
      <category><![CDATA[NtWARden]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Andrey2008 — Блог компании PVS-Studio (+4) — 02.07.2026 14:14]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1054832/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1054832/?utm_campaign=1054832&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как все так ловко ИИ пользуются... Обзоры кода делают...</strong></p><p>Не знаю, то ли я туповат, то ли невезучий, то ли кругом сказочники. Пытаюсь исследовать, какие новые интересные виды ошибок может находить ИИ в С++ коде, о которых не знает PVS-Studio. Claude Opus то нормально мне про интересные баги рассказывает, то на ровном месте с ума сходит.</p><p>Даю файл на вход, а он тревожно:</p><blockquote><p>В присланном файле есть места, где содержимое обрезано/повреждено вставкой <code>&lt;/context&gt;</code>, поэтому их я не рассматриваю как «баги кода» — это артефакты форматирования. Разберу реальные логические ошибки.</p></blockquote><p>Шо? Какой <code>context</code>? Там максимум — это <code>#include "context.hxx"</code>. Ну ладно, давай ошибки посмотрим.</p><p>Так, парочка сообщений по делу. Например, найден лишний аргумент при использовании функции форматирования.</p><pre><code class="cpp">addErrorMessage(&amp;sciErr, API_ERROR_CREATE_ZDOUBLE_IN_NAMED_LIST,
    _("%s: Unable to create list item #%d in Scilab memory"),
    "createComplexZMatrixOfDoubleInNamedList", _iItemPos + 1, _pstName);</code></pre><p>В строке форматирования два спецификатора <code>%s</code> и <code>%d</code>, а передаются три аргумента: <code>funcName</code>, <code>_iItemPos+1</code>, <code>_pstName</code>. Да, это баг. Про подобные паттерны PVS-Studio уже <a href="https://pvs-studio.ru/ru/blog/examples/v576/" rel="noopener noreferrer nofollow">знает</a>, хотя, возможно, нужно подсказать, что <code>addErrorMessage</code> — это printf-подобная функция. В целом, тут неинтересно, идём дальше.</p><p>Ооо, и тут начинается...</p><blockquote><p><code>checkListItemPosition</code> — неправильное сравнение границы:</p></blockquote><pre><code class="cpp">// check a valid item
if (_iItemPos &gt; iItem)
{
    addErrorMessage(...);
    return sciErr;
}
</code></pre><blockquote><p>Здесь проверка «позиция валидна» использует <code>&gt;</code>, хотя позиции 1-based, а <code>iItem</code> — количество элементов. Это выглядит как граничный дефект, но по сути <code>_iItemPos == iItem</code> допустимо, <code>_iItemPos &gt; iItem</code> — ошибка. Это в порядке — правильная граница. Не баг. (Указываю, чтобы было понятно, что я это проверил.)</p></blockquote><p>Так баг или не баг? Я три раза прочитал текст и посмотрел функцию с кодом. В итоге я не только не понимаю, есть ли здесь ошибка, но и не понимаю, что Claude пытается мне сказать.</p><p>Дальше ещё хуже шарики за ролики зашли.</p><blockquote><p>Баг 5 (реальный): утечка в readCommonMatrixOfPolyInNamedList и др. — нет, это API отдаёт указатели наружу. Не баг.</p></blockquote><p>Это всё описание пятого бага, больше ничего нет. Комментировать — только портить.</p><p>Я не понимаю, как на всём этом можно строить хоть сколько-то надёжные процессы автоматических обзоров кода, про которые в последнее время из разных утюгов вещают.</p><p>На сегодня мне ИИ достаточно. Пойду лучше пройдусь по парку, пока погода хорошая.</p> <a href="https://habr.com/ru/posts/1054832/?utm_campaign=1054832&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 02 Jul 2026 11:14:24 GMT</pubDate>
    <dc:creator><![CDATA[Andrey2008 (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[обзор кода]]></category><category><![CDATA[code review]]></category><category><![CDATA[ии]]></category><category><![CDATA[что-то пошло не так]]></category><category><![CDATA[галлюцинации]]></category><category><![CDATA[галлюцинации ии]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[статический анализ кода]]></category><category><![CDATA[claude]]></category><category><![CDATA[claude opus]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @AleksandraUvarova — Блог компании PVS-Studio (+4) — 01.07.2026 11:19]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1054290/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1054290/?utm_campaign=1054290&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Нарезка кода: что скрывает OrcaSlicer</strong></p><figure class=""><img src="https://habrastorage.org/getpro/habr//post_images/269/d89/3df/269d893df78c3d35065f65dbc07fa297.png"></figure><p>Как не пропустить опасные участки кода при ревью? Можно воспользоваться инструментами статического анализа. Возьмём для примера OrcaSlicer — популярную программу, которая подготавливает 3D-модель к печати. Заглянем внутрь и посмотрим, какие сюрпризы нас ждут.</p><p>Посмотрим на одно из предупреждений статического анализатора <a href="https://pvs-studio.ru/ru/pvs-studio/" rel="noopener noreferrer nofollow">PVS-Studio</a>:</p><p><a href="https://pvs-studio.ru/ru/docs/warnings/v1047/" rel="noopener noreferrer nofollow">V1047</a> Lifetime of the lambda is greater than lifetime of the local variable ‘do_stop’ captured by reference. <a href="https://github.com/OrcaSlicer/OrcaSlicer/blob/a167702038496b97e8495cc79f0c62660063ac87/src/slic3r/GUI/Jobs/FillBedJob.cpp#L250" rel="noopener noreferrer nofollow">FillBedJob.cpp 250</a></p><pre><code class="cpp">void FillBedJob::process(Ctl &amp;ctl)
{
  // ....
  bool do_stop = false;
  // ....
  params.on_packed = 
    [&amp;do_stop] (const ArrangePolygon &amp;ap)
    {
      do_stop = ap.bed_idx &gt; 0 &amp;&amp; ap.priority == 0;
    };
  // ....
}
</code></pre><p>Лямбда-выражение захватывает локальную переменную <code>do_stop</code> по ссылке, а затем сохраняется в <code>params.on_packed</code>. При этом <code>do_stop</code> уничтожается при выходе из метода <code>process</code>, так как заканчивается время жизни локального объекта. Если лямбда будет вызвана после выхода из этой функции-члена, произойдёт обращение к разрушенному объекту, и поведение в этой ситуации не определено.</p><p>Можно было бы сделать захват по значению, но в этой лямбде происходит перезапись переменной <code>do_stop</code>, а значит такой вариант не подходит. Поэтому можно сделать <code>do_stop</code> членом класса <code>FillBedJob</code>.</p><p>Это лишь один фрагмент, показывающий, что даже в работающем продукте могут быть ошибки. А <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1389/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=readmore&amp;utm_content=article" rel="noopener noreferrer nofollow">другие опасные места в коде OrcaSlicer</a> разобрали в новой статье.</p><p>Если вы тоже хотите минимизировать ошибки в своих проектах, сделайте статический анализ частью <a href="https://pvs-studio.ru/ru/pvs-studio/algoritm/" rel="noopener noreferrer nofollow">регулярного процесса</a>, а поможет с этим <a href="https://pvs-studio.ru/ru/pvs-studio/download/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=manual&amp;utm_content=Post_OrcaSlicer_ru" rel="noopener noreferrer nofollow">PVS-Studio</a>.</p> <a href="https://habr.com/ru/posts/1054290/?utm_campaign=1054290&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 01 Jul 2026 08:19:16 GMT</pubDate>
    <dc:creator><![CDATA[AleksandraUvarova (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[pvs-studio]]></category><category><![CDATA[c++]]></category><category><![CDATA[программирование]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[static analysis]]></category><category><![CDATA[ошибки программистов]]></category><category><![CDATA[ошибки в коде]]></category><category><![CDATA[безопасная разработка]]></category><category><![CDATA[3d графика]]></category><category><![CDATA[3d-печать]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Dan-Spec — Блог компании Спецлаб (+4) — 30.06.2026 09:52]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/speclab/posts/1053732/</guid>
    <link>https://habr.com/ru/companies/speclab/posts/1053732/?utm_campaign=1053732&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Илон Маск отдал приоритет видеокамерам. Радар и ультразвуковые датчики были ошибкой, от них больше помех</strong></p><p>Мы тоже часто спорим с коллегами о выборе средства распознавания объектов. С одной стороны, лидары и ультразвук лучше камер работают в темное время суток, что безусловный плюс. С другой, освещение в 21 веке – не экзотика или всегда можно применить ИК-прожекторы. Сегодняшние нейросети неплохо справляются и в ночных условиях. Тем более, что полной темноты в наше время не бывает, видеокамерам хватает света даже от сигареты.</p><p>Сегодняшние&nbsp;<a href="https://www.goal.ru/neuronet/" rel="noopener noreferrer nofollow">нейросети</a>&nbsp;совершают&nbsp;<a href="https://www.goal.ru/hi-tech-security/i-snova-revolyutsiya-v-videonablyudenii-/" rel="noopener noreferrer nofollow">революцию в видеонаблюдении</a>, распознавая даже мелкие объекты и даже в темноте. Наверное, поэтому Илон Маск в интервью про свои беспилотники высказал буквально следующее:</p><iframe id="6a436680a269d5af84018824" src="https://embedd.srv.habr.com/iframe/6a436680a269d5af84018824" class="embed_video embed__content" allowfullscreen="true"></iframe><p>«Честно говоря, радар и ультразвуковые датчики были ошибкой. Особенно радар. Потому что радар позволяет приблизиться к решению задачи и решать задачу в большинстве случаев, кроме тех моментов, когда невозможно соединить радар и нейросеть для визуального распознавания. То есть радар и “зрение” расходятся - кто прав? По сути, нужно избавляться от радара. И как только мы избавились от радара - и кстати команда автопилота была сильно против такого решения - теперь никто не хочет возвращать радар.</p><p>Мне пришлось настоять на своем. Радару тут не место. Радар был костылем, и, если тащить костыль за собой, бежать не получится. Радар - просто сигнал. В конечном счете от радара было больше помех, чем сигналов. Иногда это было очень полезно, но помех от него было больше. От него нужно было избавляться. Как только мы убрали радар, стало очевидно, что наши нейросети гораздо хуже, чем мы думали. Радар им слишком сильно помогал.&nbsp;<strong>Использование компьютерного зрения предполагает, что ни на что больше полагаться нельзя, оно должно работать. Нейросеть должна работать.</strong>&nbsp;Большим изменением стал переход от алгоритма «Bag of points» к его интерпретации нейросетью для определения центра полосы.&nbsp;</p><p>Раньше мы все это делали на «Си». Сейчас архитектура нейросети очень сложна, там много слоев. Какие-то слои удаляются, какие-то добавляются. Мы уже столько раз меняли архитектуру.”</p><p><a href="https://habr.com/ru/post/edit/1053732/" rel="noopener noreferrer nofollow">Доступно на Ютьюб</a></p><p><em>Кстати, программисты Спецлаб тоже, в основном, всё разрабатывают на “C++”. И тоже предпочитают использование видеокамер для объяснения компьютеру окружающего мира.</em></p><p><em>Даниил Гришанин</em><br><em>=Спецлаб=</em></p> <a href="https://habr.com/ru/posts/1053732/?utm_campaign=1053732&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 30 Jun 2026 06:52:22 GMT</pubDate>
    <dc:creator><![CDATA[Dan-Spec (Спецлаб)]]></dc:creator>
      
      <category><![CDATA[нейронные сети]]></category><category><![CDATA[лидары]]></category><category><![CDATA[лидар]]></category><category><![CDATA[нейросеть]]></category><category><![CDATA[умная видеокамера]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @eoanermine — Программирование (+1) — 29.06.2026 20:10]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1053592/</guid>
    <link>https://habr.com/ru/posts/1053592/?utm_campaign=1053592&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Листая на&nbsp;C++ Reference <a href="https://cppreference.com/cpp/29" rel="noopener noreferrer nofollow">список</a> принятых в&nbsp;C++29&nbsp;фичей, увидел в&nbsp;нем пропозал с&nbsp;знакомым названием, <a href="https://wg21.link/P2019" rel="noopener noreferrer nofollow">«Thread attributes» (P2019R9)</a>. И, оказалось, действительно, я <a href="https://t.me/stateofub_shorts/22" rel="noopener noreferrer nofollow">уже читал</a> этот пропозал 4&nbsp;года назад, но&nbsp;не&nbsp;в 9-й его редакции, а&nbsp;в&nbsp;самой первой. 4&nbsp;года понадобилось комитету по&nbsp;стандартизации, чтобы принять пустячный пропозал, позволяющий задать имя и размер стека потока при&nbsp;его создании&nbsp;— востребованную фичу, реализованную в&nbsp;куче библиотек C++.</p><pre><code class="cpp">void f();
int main() {
  // Такой вид задания атрибутов предлагался в первой ревизии
  std::jthread P2019R1(
    f, std::thread_name("Worker"),
    std::thread_stack_size(512*1024));
  // А такой приняли 8 ревизий спустя
  std::jthread P2019R9(
    std::thread::name_hint("Worker"),
    std::thread::stack_size_hint(512*1024), f);
}</code></pre><p>Не безумие ли это? И сколько действительно правильных пропозалов не вошло в C++ лишь по той причине, что их автор не был готов 4 года подряд защищать свое предложение, отвечая на все мелкие придирки различных подкомитетов?</p> <a href="https://habr.com/ru/posts/1053592/?utm_campaign=1053592&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 29 Jun 2026 17:10:16 GMT</pubDate>
    <dc:creator><![CDATA[eoanermine]]></dc:creator>
      
      <category><![CDATA[c++]]></category><category><![CDATA[c++29]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @AI-CMO — Java (+2) — 16.06.2026 15:24]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1048194/</guid>
    <link>https://habr.com/ru/posts/1048194/?utm_campaign=1048194&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Риски ИИ- генерируемого кода - качество, производительность, “УСПЕВАЮ ЛИ Я ЗА ТЕМПОМ”&nbsp;</strong></p><p>ИИ генерирует код быстрее, чем мы успеваем ловить его реальные проблемы.<br>В JPA/Hibernate это особенно больно: код компилируется, тесты зелёные — а внутри N+1 и лишние запросы. Veai проверяет такие гипотезы на фактах проекта прямо в IDE: семантические usages, реальные прогоны тестов, coverage, debugger, доступ к исходникам Hibernate.</p><p>Не “этот код, возможно, тормозит”, а проверка через запуск. Скорость растёт — контроль над качеством остаётся. Большой разбор продукта <a href="https://habr.com/ru/companies/veai/articles/1043752/" rel="noopener noreferrer nofollow">сделан в статье </a></p> <a href="https://habr.com/ru/posts/1048194/?utm_campaign=1048194&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 16 Jun 2026 12:24:28 GMT</pubDate>
    <dc:creator><![CDATA[AI-CMO]]></dc:creator>
      
      <category><![CDATA[программирование]]></category><category><![CDATA[программирование для начинающих]]></category><category><![CDATA[ide]]></category><category><![CDATA[idea]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dugalb — C (+2) — 12.06.2026 17:06]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1046906/</guid>
    <link>https://habr.com/ru/posts/1046906/?utm_campaign=1046906&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>graphics.h в 2026 году: зачем и как запустить</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/e60/96d/99f/e6096d99fb18aa79173335c4d842f03e.png" width="1071" height="628"></figure><p><code>graphics.h</code> — это часть библиотеки BGI (Borland Graphics Interface) родом из 1990-х. В современных IDE её нет: она несовместима с 64-битными системами и не является частью стандарта C++. Тем не менее в учебных задачах она до сих пор встречается — особенно там, где нужно быстро визуализировать алгоритм или сдать лабораторную.</p><p><strong>Когда это оправдано</strong></p><ul><li><p>изучение основ C/C++ и хочется видеть результат за пределами консоли</p></li><li><p>разбор алгоритмов компьютерной графики</p></li><li><p>подготовка к экзамену по предмету, где преподаватель требует именно <code>graphics.h</code></p></li></ul><p>Для production-кода и серьёзных учебных проектов лучше сразу смотреть в сторону актуальных библиотек: <strong>SDL2</strong> (2D, кроссплатформенная), <strong>SFML</strong> (ООП-подход, проще в освоении) или <strong>OpenGL/GLFW</strong> (если нужна 3D-графика и аппаратное ускорение).</p><p><strong>О библиотеке</strong></p><p>Адаптация для современных Windows называется <strong>WinBGIm</strong> — её разработал и поддерживает <a href="https://home.cs.colorado.edu/~main/" rel="noopener noreferrer nofollow">Майкл Мэйн</a>, профессор Колорадского университета в Боулдере. Библиотека открыта для использования и модификации. Скачать можно на официальном сайте: <a href="http://winbgim.codecutter.org" rel="noopener noreferrer nofollow">winbgim.codecutter.org</a>.</p><p>Если хочется сначала почитать вводный разбор — на Хабре есть <a href="https://habr.com/ru/articles/455056/" rel="noopener noreferrer nofollow">статья с обзором WinBGIm</a>, здесь же показан небольшой практический пример-скриншот: инженерная утилита с графическим выводом, которая впоследствии была переписана с использованием современного UI на C++.</p><p><strong>Как запустить: общий принцип</strong></p><p>Для работы используется адаптация WinBGIm — три файла: <code>graphics.h</code>, <code>winbgim.h</code> и <code>libbgi.a</code>.</p><p>Линкер-флаги одинаковы для всех сред:</p><pre><code>-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32</code></pre><p>Известный баг: в оригинальном <code>graphics.h</code> на строке 302 встречается <code>int right=0</code> — это вызывает ошибку компиляции. Исправляется заменой на <code>int txtright=0</code>.</p><p><strong>Dev-C++</strong></p><ol><li><p>Скопировать <code>graphics.h</code> и <code>winbgim.h</code> в <code>MinGW64\x86_64-w64-mingw32\include</code></p></li><li><p>Скопировать <code>libbgi.a</code> в <code>...\lib</code></p></li><li><p><code>Tools → Compiler Options → Parameters → Linker</code> — вставить флаги</p></li><li><p>Переключить профиль компилятора на <strong>32-bit Release</strong></p></li></ol><p><strong>Code::Blocks</strong></p><ol><li><p>Файлы — в соответствующие папки <code>include</code> и <code>lib</code> компилятора MinGW</p></li><li><p><code>Settings → Compiler → Linker settings → Other linker options</code> — вставить флаги</p></li></ol><p><strong>VS Code</strong></p><p>Файлы хранятся внутри проекта. Структура:</p><pre><code>project/
  include/  ← graphics.h, winbgim.h
  lib/      ← libbgi.a</code></pre><p>В <code>.vscode/tasks.json</code> в массив <code>args</code> добавить:</p><pre><code class="json">"-I${workspaceFolder}/include",
"-L${workspaceFolder}/lib",
"-l"-I${workspaceFolder}/include",
"-L${workspaceFolder}/lib",
"-lbgi", "-lgdi32", "-lcomdlg32", "-luuid", "-loleaut32", "-lole32"
bgi", "-lgdi32", "-lcomdlg32", "-luuid", "-loleaut32", "-lole32"</code></pre><p>Компилятор MinGW (<code>g++</code>) должен быть прописан в <code>PATH</code>.</p><p>По материалам видео-инструкции CodeWar</p><p><strong>Тест</strong></p><pre><code class="cpp">#include &lt;graphics.h&gt;
#include &lt;conio.h&gt;

int main() {
    int gd = DETECT, gm;
    initgraph(&amp;gd, &amp;gm, (char*)"");
    circle(250, 250, 100);
    getch();
    closegraph();
    return 0;
}</code></pre><p> Должно открыться окно с белым кругом на чёрном фоне. Если компиляция падает с ошибкой <code>cannot find -lbgi</code> — проверьте путь до <code>libbgi.a</code>. Ошибка <code>undefined reference</code> обычно означает, что флаги линкера не подхватились.  </p> <a href="https://habr.com/ru/posts/1046906/?utm_campaign=1046906&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 12 Jun 2026 14:06:19 GMT</pubDate>
    <dc:creator><![CDATA[dugalb]]></dc:creator>
      
      <category><![CDATA[c++]]></category><category><![CDATA[cpp]]></category><category><![CDATA[программирование]]></category><category><![CDATA[graphics]]></category><category><![CDATA[graphics2d]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @PvsTeam — Блог компании PVS-Studio (+1) — 05.06.2026 09:27]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1043882/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1043882/?utm_campaign=1043882&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Наш архитектор C++ анализатора, Юрий Минаев, выступил в прошлом году на C++ Russia с докладом "<strong>Семантика C++ изнутри компилятора</strong>". </p><p><strong>О чём рассказал Юра:</strong>  </p><ul><li><p>о семантике C++ с точки зрения статического анализатора или фронтенда компилятора;</p></li><li><p>как устроена таблица символов и как происходит поиск имен, а также как семантика влияет на парсинг;</p></li><li><p>о том, как происходит выбор перегрузок и каким образом компилятор находит функции, которые даже не видны в текущей точке программы; </p></li><li><p>о шаблонах и их инстанцировании. </p></li></ul><iframe id="6a226bab6b85845d00f4d02c" src="https://embedd.srv.habr.com/iframe/6a226bab6b85845d00f4d02c" class="embed_video embed__content" allowfullscreen="true"></iframe><p>Посмотреть доклад можно ещё на этих площадках: </p><ul><li><p><a href="https://pvs-studio.ru/ru/blog/video/11740/" rel="noopener noreferrer nofollow">Наш сайт</a></p></li><li><p><a href="https://youtu.be/7P9GkZvnnzU" rel="noopener noreferrer nofollow">YouTube</a></p></li><li><p><a href="https://rutube.ru/video/9c356eeda4ec2efe056d4db6d699cc61/" rel="noopener noreferrer nofollow">Rutube</a></p></li></ul><p>Приятного просмотра! Ждём ваши комментарии!</p> <a href="https://habr.com/ru/posts/1043882/?utm_campaign=1043882&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 05 Jun 2026 06:27:40 GMT</pubDate>
    <dc:creator><![CDATA[PvsTeam (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[доклад]]></category><category><![CDATA[семантика]]></category><category><![CDATA[c++]]></category><category><![CDATA[cpprussia]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[компиляторы]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Andrey2008 — Блог компании PVS-Studio (+4) — 29.05.2026 11:36]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1041016/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1041016/?utm_campaign=1041016&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Дайте посмотреть на нормальный С++ проект, созданный вайб-кодингом</strong></p><p>Чтобы корректировать развитие PVS-Studio я заинтересован смотреть C++ проекты, созданные с использованием генеративного AI или, по-простому, вайб-кодинга. Но вот незадача: все кругом пишут про этот самый вайб-кодинг, но я не знаю, как и где искать такие открытые проекты.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/e78/793/703/e78793703404baf35231193eb12da41a.png" width="1600" height="902"></figure><p>Мне попадается какая-то белиберда типа <a href="https://github.com/gravecan/enhance-client/tree/main" rel="noopener noreferrer nofollow">enhance-client</a>, сгенерированная за $15. Но это даже смотреть несерьёзно. По присутствию в репозитории <code>.obj</code>, <code>.iobj</code>, <code>.ipdb</code> файлов и прочего мусора видно, что автор не понимает, что он делает. Проект не компилируется по разным причинам, например, из-за того, что заложен какой-то огрызок файла <a href="https://github.com/gravecan/enhance-client/blob/642f90eafd954c076a34d60f811de77fdb9f705c/injector/bytes.hpp#L25744" rel="noopener noreferrer nofollow">bytes.hpp</a> (у массива нет конца).</p><p>Если немного поправить и проверить, что удалось собрать, то там лезут перлы вида:</p><pre><code class="cpp">void enhance::modules::autototem::run()
{
  ....
  auto env = enhance::instance-&gt;get_env();
  if (!env)
  {
    env-&gt;DeleteLocalRef(player);
    return;
  }
  ....
}</code></pre><p>Предупреждение PVS-Studio: <a href="https://pvs-studio.ru/ru/docs/warnings/v522/" rel="noopener noreferrer nofollow">V522</a> [CWE-476, CERT-EXP34-C, SEC-NULL] Dereferencing of the null pointer ‘env’ might take place. <a href="https://github.com/gravecan/enhance-client/blob/642f90eafd954c076a34d60f811de77fdb9f705c/enhance/modules/autototem/autototem.cpp#L757" rel="noopener noreferrer nofollow">autototem.cpp 757</a></p><p>Явное разыменование нулевого указателя.</p><p>Или бессмысленные сравнения значения типа <code>int</code> с константой <code>0.1f</code>:</p><pre><code class="cpp">int sdk::minecraft_client::get_attack_cooldown() { .... }

void enhance::modules::shield_breaker::run()
{
  ....
  if (sdk::instance-&gt;get_attack_cooldown() &gt; 0.1f)
  ....
}</code></pre><p>Предупреждение PVS-Studio: <a href="https://pvs-studio.ru/ru/docs/warnings/v674/" rel="noopener noreferrer nofollow">V674</a> [CWE-682, CERT-FLP36-C] The ‘0.1f’ literal of the ‘float’ type is compared to a value of the ‘int’ type. <a href="https://github.com/gravecan/enhance-client/blob/642f90eafd954c076a34d60f811de77fdb9f705c/enhance/modules/shield_breaker/shield_breaker.cpp#L628" rel="noopener noreferrer nofollow">shield_breaker.cpp 628</a></p><p>Такие ляпы нет смысла серьёзно разбирать и описывать.</p><p>Можно спросить: “А что ты хочешь от поделок за 15$?” Да, в общем-то, ничего, но вместо нормальных проектов попадаются они. Мне интересно изучить большие открытые проекты нормального качества, при написании которых активно используется GenAI. А то пока ощущение, что термин “вайб-кодинг” есть, а C++ проектов нет. Или за них стыдно? :)</p><p>Если вы знаете подобные большие проекты, то присылайте ссылки на них в комментарии. Заранее спасибо.</p><p>Предыдущие публикации по мелким проектам:</p><ol><li><p><a href="https://pvs-studio.ru/ru/blog/posts/cpp/1354/" rel="noopener noreferrer nofollow">Давайте заглянем в этот самый вайб-код</a>.</p></li><li><p><a href="https://pvs-studio.ru/ru/blog/posts/cpp/1366/" rel="noopener noreferrer nofollow">Ревью вайб-кода с гнильцой, который притворяется оптимизированным С++ кодом</a>.</p></li></ol> <a href="https://habr.com/ru/posts/1041016/?utm_campaign=1041016&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 29 May 2026 08:36:47 GMT</pubDate>
    <dc:creator><![CDATA[Andrey2008 (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[ии]]></category><category><![CDATA[genai]]></category><category><![CDATA[pvs-studio]]></category><category><![CDATA[генеративный ии]]></category><category><![CDATA[c++]]></category><category><![CDATA[си++]]></category><category><![CDATA[открытый исходный код]]></category><category><![CDATA[вайб-кодинг]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @vibecodingai — C++ (+2) — 19.05.2026 14:13]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1036878/</guid>
    <link>https://habr.com/ru/posts/1036878/?utm_campaign=1036878&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/957/933/46d/95793346d3354475a583aaaf44edba86.jpg" width="1241" height="1280"></figure><p>Бьёрн Страуструп, легендарный создатель C++, в новом двухчасовом интервью резко прошёлся по вайбкодингу.</p><p>Главная претензия простая: сгенерированный код пока слишком часто выглядит красиво только на демке. В реальном проекте он приносит баги, раздувает кодовую базу, плодит уязвимости и плохо поддаётся нормальной проверке.</p><p>Особенно больно это бьёт по опытным разработчикам. Им потом приходится не “магически ускоряться с ИИ”, а читать, чинить и переписывать слоп, который кто-то нагенерировал за пять минут.</p><p>Похожая история уже<a href="https://t.me/linuxacademiya/1109" rel="noopener noreferrer nofollow"> достала и Линуса Торвальдса.</a> Его буквально завалили кривыми AI-отчётами по ядру Linux: вроде бы люди “помогают”, а на практике создают шум, который мешает настоящей разработке.</p><p>Если человек не понимает архитектуру, безопасность, тесты и границы задачи, то вайбкодинг превращается не в ускорение, а в генератор технического долга.</p><p>Сеньоры не боятся ИИ.</p><p>Они просто не хотят провести остаток карьеры, разгребая чужой промптованный мусор.</p><p> Полное интервью нашел в тг тут: <a href="https://t.me/cpluspluc/1451" rel="noopener noreferrer nofollow">https://t.me/cpluspluc/1451</a></p> <a href="https://habr.com/ru/posts/1036878/?utm_campaign=1036878&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 19 May 2026 11:13:57 GMT</pubDate>
    <dc:creator><![CDATA[vibecodingai]]></dc:creator>
      
      <category><![CDATA[c++]]></category><category><![CDATA[страуструп]]></category><category><![CDATA[мнение]]></category><category><![CDATA[легенда]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @vibecodingai — C++ (+2) — 14.05.2026 13:07]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1035112/</guid>
    <link>https://habr.com/ru/posts/1035112/?utm_campaign=1035112&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>В C код может выполниться ещё до <code>main()</code></strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/1e8/810/360/1e881036099cb6d3c0d4263bacd8c79f.jpg" width="905" height="825"></figure><p>В Linux и GCC есть constructor-функции - они запускаются автоматически до входа в main().</p><p>Выглядит почти как магия:</p><p>Такую функцию не нужно вызывать вручную. Компилятор сам пометит её как код, который должен выполниться при старте программы.</p><p>Где это используется:</p><p>- инициализация глобального состояния</p><p>- подготовка shared libraries</p><p>- регистрация плагинов</p><p>- настройка runtime-окружения</p><p>- выполнение служебного кода до основной логики</p><p>Именно поэтому в C-программе не всегда всё начинается с main().</p><p>Иногда до него уже кто-то успел поработать.</p><p>Подсмотрел в тг про С++ : <a href="https://t.me/cpluspluc/1449" rel="noopener noreferrer nofollow">https://t.me/cpluspluc/1449</a></p> <a href="https://habr.com/ru/posts/1035112/?utm_campaign=1035112&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 14 May 2026 10:07:36 GMT</pubDate>
    <dc:creator><![CDATA[vibecodingai]]></dc:creator>
      
      <category><![CDATA[c]]></category><category><![CDATA[cpp]]></category><category><![CDATA[linux]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @fascwind — C++ (+1) — 08.05.2026 11:59]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1032934/</guid>
    <link>https://habr.com/ru/posts/1032934/?utm_campaign=1032934&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/d6e/916/cd0/d6e916cd06cd57cf22e8d695f39a4b51.png" width="1280" height="720"></figure><p><br>Я С++ разработчик из Тюмени. Хочу представить вам свой проект : "Инструментарий Мастера Подземелья" <a href="https://mastertoolkit.ru/" rel="noopener noreferrer nofollow">https://mastertoolkit.ru/</a> (тут лежит рабочий прототип)</p><p>Исходный код выложен тут : <a href="https://gitlab.com/R1nk/dungeonmastertoolkit" rel="noopener noreferrer nofollow">https://gitlab.com/R1nk/dungeonmastertoolkit</a></p><p>В данный момент чувствую выгорание над проектом. Сайт выложен год назад, но не получал ни одного фидбэка. Прошлой осенью провел сессию по днд и выявил для себя пару ошибок и недоработок.</p><p>На текущий момент внесены изменения над кодом и функционалом и не завершен в рабочую сборку. </p><p>Инструментарий для мастеров подземелья. Есть 2 вида генерации событий:</p><ol><li><p>Абстрактная навигация (карты таро, описание мастей и значений. где масти можно описать как положительные так и негативные последствия, а значения можно более конкретизировать. Например отряд гоблинов как препятсвие или обвал).</p></li><li><p>Это события. можно описать дерево событий, из которых можно выбрать случайным способом. Например можно описать случайные квесты или встречи.</p></li><li><p>Журнал приключений (в режиме Сессия туда попадают все выпадающие события и абстрактная навигация)</p></li><li><p>Статистика так же работает в режиме сессии. Графики по выпавшим ситуациям.</p></li></ol> <a href="https://habr.com/ru/posts/1032934/?utm_campaign=1032934&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 08 May 2026 08:59:06 GMT</pubDate>
    <dc:creator><![CDATA[fascwind]]></dc:creator>
      
      <category><![CDATA[dungeons and dragons]]></category><category><![CDATA[tools]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @DrMayDay — Rust (+1) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1032036/</guid>
    <link>https://habr.com/ru/posts/1032036/?utm_campaign=1032036&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Rust + LLM: новая и сильная “ОПГ” против C++ и его друзей…</p><p>Есть такая штука с Borrow Checker - он ненавидит людей. Не потому, что он плохой, а потому, что требует держать в голове графы данных всего приложения всё время, пока пишешь. Люди устают, раздражаются, и в итоге - <code>unsafe</code>, чувство стыда перед собой и коллегами, и понеслась. А LLM на это просто… скажем, кхм, “не важно”. Ну, надо так надо. LLM итерирует. И самое забавное - ей можно запретить <code>unsafe</code> прямо в промпте, и она не будет искать обходные пути(ну, может, разок другой - Opus попробует, но это ловится простым поиском по файлам, даже PVS-Studio не нужен, хотя с ним было бы фееричнее). Скорее всего, LLM просто найдёт решение в рамках safe Rust. И это круто.</p><p>Про Python и JS - там ведь основная проблема не скорость даже(и синтаксически значимые пробелы у некоторых), а то, что деплоится не программа, а среда. Интерпретатор, зависимости, версии, “а на проде другой питон”… Сейчас с линковщиком от Zig можно прямо из Windows собрать бинарник под Linux - статически, без танцев(привет musl!), одним пинком. И это не какой-то хак, это просто работает. Получаешь один файл, который либо запустится, либо нет - без сюрпризов в середине.</p><p>C++ тут проигрывает не потому, что он сложный или плохой - он интересный, мощный, с огромной историей и экосистемой. Но именно эта мощность становится проблемой когда код - генерирует LLM(можно выстрелить себе в ногу из гранатомёта, и, самое страшное - не заметить этого). Модель получает слишком много способов сделать что-то, и часть из них - UB. Rust убивает целый класс таких подходов к реализации на уровне компилятора. Это не договорённость и не линтер - это просто не скомпилируется.</p><p>Мне кажется, уникальность этой связки тут в том, что задачи разделились очень чисто: LLM думает про логику, компилятор думает про корректность. И они не мешают друг другу. В C++ - см. выше. Именно то, что делает Rust тяжёлым для людей(кроме евангелистов и стримеров), делает его почти идеальным для этой связки.</p><p>Ну и если кто был травмирован неудачным опытом с “вайб-кодингом”, и сложилось впечатление, что вся эта пляска с LLM, это не серьёзно - попробуйте отложить китайщину(MiniMax, GLM, DeepSeek...), взять фронтир-модель типа “OpenAI Codex GPT-5.5 на XtraHigh” - и дать ей хотелку в виде описания какого-нибудь серверного приложения на Rust, и просто посмотреть что будет через 15-20 минут. Забейте на клоунов со “змейкой” и прочей мелочёвкой из бенчмарков на ютубе, попробуйте реальную задачку(многохопывый релей между серверами со своим протоколом КВН например и клиентами для Win/Linux). Оно сделает. Быстро. Качественно. Это довольно странное ощущение, честно говоря, видеть такое…</p><p>Просто мысли вслух, хотелось поделиться)</p><p>        -s. TekMetrics certified “Master C programmer”, July 1999</p> <a href="https://habr.com/ru/posts/1032036/?utm_campaign=1032036&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 06 May 2026 09:20:56 GMT</pubDate>
    <dc:creator><![CDATA[DrMayDay]]></dc:creator>
      
      <category><![CDATA[Rust]]></category><category><![CDATA[LLM]]></category><category><![CDATA[c++]]></category><category><![CDATA[borrow checker]]></category><category><![CDATA[rust is faster than go]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @MeLiza_Beth — Блог компании PVS-Studio (+1) — 30.04.2026 14:33]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1030096/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1030096/?utm_campaign=1030096&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Тихий враг или молчаливый союзник? Коротко о выравнивании в C++. Часть 3 </strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/595/7c4/284/5957c4284de4c393cd96e36170d73858.png" width="1600" height="902"></figure><p>Мы уже разобрали базовое выравнивание полей и изучили, как наследование наслаивает данные друг на друга. Казалось бы, теперь-то всё — все ловушки изучены. Но не тут-то было! Есть у этой темы ещё одна, по-настоящему тёмная сторона, про которую не так часто говорят. </p><p>Одно короткое слово virtual полностью переписывает "геометрию" класса, внося в выравнивание свои коррективы, которые трудно игнорировать. Давайте разберёмся, что на самом деле происходит под капотом, когда выравнивание сталкивается <a href="https://pvs-studio.ru/ru/blog/posts/cpp/1369/" rel="noopener noreferrer nofollow">с виртуальностью</a>.</p> <a href="https://habr.com/ru/posts/1030096/?utm_campaign=1030096&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 30 Apr 2026 11:33:07 GMT</pubDate>
    <dc:creator><![CDATA[MeLiza_Beth (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[pvs-studio]]></category><category><![CDATA[alignment]]></category><category><![CDATA[virtual]]></category><category><![CDATA[padding]]></category><category><![CDATA[c++]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @YuriPanchul — C++ (+4) — 27.04.2026 18:59]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1028712/</guid>
    <link>https://habr.com/ru/posts/1028712/?utm_campaign=1028712&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Чернобыльское лето 1986 года, когда все киевские одноклассники разъехались по разным концам СССР подальше от радиации, было для меня супер-продуктивным в смысле изучения программирования. Я ходил в контору человека по фамилии Долина, бывшего полковника танковых войск из Донецка, который переквалифицировался в компьтеризатора украинского образования. Там я работал на компьютерах MSX Yamaha, выучил программирование на Си. Компилятор назывался ASCII C (сейчас в комментах появятся умники которые будут мне говорить, что ASCII это кодировка, а я им буду кидать ссылку что это еще и японская компания).</p><p>Долине мое увлечение Си не нравилось, он хотел чтобы я больше писал программ на Бейсике, которые он демонстрировал людям из украинских министерств и студии мультфильмов (некоторые программы были графические). Кроме графики я сделал еще например программу которая фиксировала в реальном времени действия футболистов во время матча, через нажатия клавиш наблюдателем. Контора Долины была у стадиона, оттуда доносились вопли болельщиков. Долина это показывал кому-то по спортивной линии.</p><p>В конце лета я полетел на Новосибирскую Летнюю Школу Юных Программистов, где выучил ассемблер Z80 и сделал поддержку параллельного выполнения нескольких Си функций с помощью переключения контекстов в обработчике прерывания по таймеру. С сохранением регистров в дексрипторе задачи в списке задач. За это я получил диплом первой степени. По-моему дипломы вручал академик Ершов, хотя может я путаю и мы встретились с ним в академгородке куда на тоже возили.</p><p>На школе было невероятное количество комаров, а также красивая девочка из Томска, которая мне нравилась, и ее подружка, которой нравился я. Из Украины еще был юный гений из Харькова, который постоянно спорил со мной, что персоналки фигня, а мейнфреймы - это круто. Так как я успел поработать и на мейнфреймах, споры были довольно развесистые.</p><p>Еще там я увидел первые советские программы западного качества - редактор tor(?), программу низкоуровневой работы с диском и оконный отладчик. Они были написаны на Си и ассемблере аккуратно, как примеры в западных книжках. Советский код который я видел до этого (и большинство после этого) был написан тяп-ляп. Писали эти программы местные аспиранты которые были также преподавателями школы.</p><p>Помимо этих программ я привез на флоппи-дисках со школы CP/M (хуже файловая система чем в MSX-DOS), среду Turbo Pascal, интерпретатор Lisp, компилятор Nevada Fortran, еще два компилятора Си (Aztec C и BDS C) и даже компилятор с подмножества языка Ada, который я знал теоретически, но никогда не использовал.</p><p>29 лет спустя, в 2017 году я приехал на ту же новосибирскую школу в качестве инструктора по Verilog и FPGA. Еще там был Борис Файфель который учил детей Лиспу или чему-то такому.</p> <a href="https://habr.com/ru/posts/1028712/?utm_campaign=1028712&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 27 Apr 2026 15:59:08 GMT</pubDate>
    <dc:creator><![CDATA[YuriPanchul]]></dc:creator>
      
      <category><![CDATA[Lisp]]></category><category><![CDATA[ADA]]></category><category><![CDATA[Z80]]></category><category><![CDATA[Летняя Школа Юных Программистов]]></category><category><![CDATA[ЛШЮП]]></category><category><![CDATA[Ершов]]></category><category><![CDATA[Новосибирск]]></category><category><![CDATA[Yamaha]]></category><category><![CDATA[Чернобыль]]></category><category><![CDATA[СССР]]></category>
  </item>
  

	
  

  

  

    

  

  
  <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>
  

	
  

  

  

      

      

      

    
  </channel>
</rss>
