Обновить
512K+

Программирование *

Искусство создания компьютерных программ

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

Ревью кода стало узким местом: цифры Anthropic и мой опыт

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

Тут The Register пересказал инженерный блог Anthropic, что мае этого года компания мержила в основную ветку около 2500 изменений в день, к сентябрю уже больше 30 000. Рост более чем в 12 раз потянул за собой инфраструктуру. CI делает около 25 миллионов чекаутов в сутки, и под такую нагрузку компания строит собственную систему контроля версий. В блоге о новом хранилище кода инженеры пишут, что очень часто их роль сводилась к тому, чтобы сказать Claude «нет», потому что агенты иногда нарушают ключевые ограничения системы ради шаблона, который в этом месте не нужен.

Еще, косвенный признак дает колонка Джона Стояна на InfoWorld. Он пишет, что коммитов стало больше, а пул-реквесты двигаются быстрее, зато многие организации сообщают о замедлении деплоев. Механизм он называет следующий: циклы ревью, терпимые на человеческой скорости письма, становятся ограничением, когда разработчики с ИИ выдают в два-три раза больше кода.

Читать далее

Новости

Два git notes add параллельно: оба вернули 0, а одна заметка пропала

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

Две команды git notes add добавляют заметки к двум разным коммитам одновременно. Обе завершаются с кодом 0, но одна заметка исчезает: на обычной Linux-машине — в 25 запусках из 30. Фарид Закария нашёл эту гонку своей детерминированной виртуальной машиной Rewind VM и показывает, как тремя вопросами к записанным прогонам дойти от «тест иногда падает» до одной строки в notes-utils.c, которая обновляет ссылку refs/notes/commits без проверки, что её не успел изменить соседний процесс. Патч уже отправлен в рассылку git.

Читать далее

Чистый контур — агентская прачечная для вашего грязного легаси

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

Два из трех API-вызовов возвращали HTTP 500. Агенты поколениями лепили заплатки поверх заплаток, пока код не превратился в клубок нейросоплей.

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

В статье механизм переноса, 15 правил защиты от новых костылей и эксперимент на 36 запусках DeepSeek: насколько поведение агента зависит от того, какой код и какие правила ему показывают.

Войти в чистый контур

Как Go выбирает механизм defer: open-coded, stack и heap

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

Про defer в Go до сих пор говорят, что он медленный и в горячем коде ему не место. Когда-то так и было: до Go 1.13 каждый defer означал аллокацию в куче. Но с тех пор компилятор научился реализовывать его тремя способами: open-coded, stack и heap. Первые два почти ничего не стоят, а в кучу defer попадает совсем не там, где обычно думают. Разбираемся, как компилятор выбирает между ними, почему defer в цикле всегда дорогой, а рекурсия, горутины и замыкания с захватом переменных на самом деле не страшны, и как посмотреть решение компилятора одной командой.

Читать далее

N+1 в Eloquent: воспроизводим на стенде, считаем запросы и закрываем регрессии тестами

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

Про N+1 в Laravel обычно пишут три строки про with() и расходятся. Я собрал небольшой стенд на Laravel 13 и SQLite, воспроизвёл проблему, посчитал запросы для каждого способа лечения и проверил, что «не ловится» режимом запрета ленивой загрузки. Отдельно разобрал места, где eager loading не помогает или сам создаёт нагрузку. Все числа в статье получены на этом стенде на искусственных данных.

Читать далее

Workflow as a YAML: детерминированная песочница для агента поверх Pydantic AI

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

Агент уже пишет код за нас, но с автоматизацией для бизнеса всё иначе: он косячит на каждом шаге, в JSON-трейсе тысячи вызовов, а переписанный промпт вы даже не заметите. Я перестал перепроверять агента вручную — загнал его в жёсткие рамки: wrapper над Pydantic AI, MCP-инструменты, скиллы и Studio с отладчиком. Рассказываю, почему иначе нельзя, и показываю код.

Читать далее

Когда Python становится слишком медленным: пишем C‑расширение с нуля и сравниваем с pybind11 (бонус JIT‑компилятор)

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

Недавно я прочел статью про pyrusmorph — python обёртку над 30-летним с++ ядром libmorph/rus. Бенчмарки удивили: в 30 раз быстрее PyMorphy3 при обработке текста. После я задумался. Как это вообще работает? Почему мы пишем import pyrusmorph и получаем доступ к нативному с++ коду и функциям прямо внутри python.

В статье я предлагаю пройти этот путь с нуля. Разобраться, как устроен Python «под капотом», написать своё расширение на чистом C‑API, а потом посмотреть, как эту боль лечит pybind11. В конце — бенчмарки и практические советы, когда вообще стоит лезть в c++ для оптимизации. Бонус — немного о компиляторе python кода (JIT‑компилятор)

Читать далее

Как React прерывает рендер: конкурентный рендеринг изнутри

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

Начиная с React 18 рендер можно прервать: срочные обновления обгоняют несрочные, даже если React уже взялся за несрочное. Если задуматься, вопросов много:

Как React посреди рендера отдаёт поток браузеру, чтобы тот обработал ввод, а потом продолжает с того же места?

Почему до React 16 он так не умел?

Кто решает, какие обновления срочные, и почему большинство рендеров не прерывается вообще?

Что происходит с незакоммиченными обновлениями, когда пришло что-то срочное?

И главное, как обновления, которые выстраиваются в очередь, не путаются в порядке, если срочное пришло позже, но должно обогнать несрочные?

Читать далее

«А нам точно нужен Open Source? Мы же вайбкодим вообще всё!»

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

«А нам точно нужен Open Source? Мы же вайбкодим вообще всё!» Это спросил друг, который делает небольшие проекты, и такой вопрос я теперь слышу постоянно. Зачем брать чужую библиотеку или сервис, если за вечер можно навайбкодить своё? Ровно под свою задачу, без лишних фич, без чужой документации и чужих багов.

Вопрос честный, и короткого ответа «потому что так правильно» на него нет. Попробую ответить развёрнуто, на своих проектах.

Читать далее

Командная строка Linux: читать команды так, как их читает bash

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

Вы нашли на форуме рассказ про любопытную команду, скопипастили в терминал, и она сработала. Через неделю вы переносите ее в скрипт, и скрипт спотыкается на первом же файле с пробелом в имени. Чуть подправили, потестили и запустили в работу. А однажды ночью нужного каталога не оказывается на месте, и rm * удаляет файлы в каталоге на котором скрипт остановился. Страшный сон или реальность?

Читать далее

Я встроил процессор RISC-V в веса Qwen 3.5, а памятью ему стали слои DeltaNet

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

Qwenputer — это обычная Qwen 3.5 4B, в веса которой скомпилирован 32-битный процессор RISC-V (RV32IM). Оперативной памятью ему служат собственные слои Gated DeltaNet модели: при гейте 1, силе записи 1 и one-hot-ключах каждая запись перезаписывает ровно одну строку состояния, а one-hot-запрос возвращает точное значение. Процессор занимает 11 слоёв перед 32 слоями Qwen, проходит официальные riscv-tests и выполняет C и MicroPython внутри прямых проходов модели, без внешних инструментов. На длинной арифметике NUPA точность выросла с 48,6% до 100%, примерно на 230 000 позиций вывода не нашлось ни одного расхождения с эталонной машиной. Автор объясняет, как это устроено, где ограничения и как к модели прикрутили файловую систему.

Читать далее

Rust круче C++? Часть 1: скорость

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

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

Спор «Rust или C++» идёт с 2015 года, с выхода Rust 1.0, и за одиннадцать лет превратился в отдельный жанр со своими приколами. «В Rust на каждом индексе проверка, вот он и тормозит». «В плюсах проверок нет, значит, быстрее». «Ага, а у Rust ссылки не пересекаются, так что быстрее как раз он». «Паника дорогая», «исключения дорогие», «абстракции бесплатные». Каждая сторона уверена в своём, а в ассемблер почти никто не смотрит, хотя ответ лежит прямо там (и местами он неприятный для обеих сторон).

В одну статью вопрос «круче ли Rust, чем C++» не влез, так что это первая часть, и она про скорость. Безопасность и прочие поводы поругаться ждут своей очереди.

Читать далее

Harness для коллег: 5 шагов из личного опыта

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

Обвязку для агента сейчас собирают многие. Насмотрелся шортсов, накидал скиллов, подключил MCP, и вот ты весь обвязанный. Моя прошла эту стадию год назад и с тех пор обросла инструментами, проверками и базой знаний. Работала она безотказно, пока пользователь был один. Стоило отдать её коллегам, и она сломалась. Главной её частью оказался...

Читать далее

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

Байты приходят, события нет: проверяем кадры SSE и gzip

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

Сервер отправляет по SSE три сообщения с паузой 250 мс, а клиент видит события только через 750 мс. Собрал стенд на стандартной библиотеке Python и поставил три отметки времени: байты тела ответа, текст после декодера gzip, готовое событие. Незавершённый кадр и сжатие без промежуточного сброса дают одинаковый симптом, но задержка появляется в разных точках.

Читать далее

GPT-6 Astra восстанавливает Electron-приложение: результаты и расходы через OpenAI, OpenRouter и TeamoRouter

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

Одна задача, три API: разобрать дистрибутив Pomotroid, восстановить настольный таймер и добавить импорт и экспорт состояния. Сравниваю готовые приложения, автоматические проверки, время выполнения и фактические списания через OpenAI, OpenRouter и TeamoRouter.

Читать далее

Как генератор трёх слов на баннере вырос в веб-сервис: Ghostscript, CMYK и производственные грабли

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

На фрилансе регулярно просят сверстать простой баннер «АРЕНДА + телефон». Брать за три слова 2 000 рублей неловко, а запускать CorelDRAW, выставлять миллиметры и переводить шрифты в кривые всё равно приходится. Рассказываю, как внутренний скрипт для генерации валидного CMYK PDF вырос в производственный сервис с динамическим разрешением Ghostscript, инспектором структуры PDF, пакетной сборкой из CSV и партнёрским режимом для типографий.

Читать далее

Давай отлаживать по TCP

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

Когда в моей Среде разработки К дошла очередь до отладчика, выбор был такой: по HTTP - проще, но с глюками, знакомыми по мобильной разработке; по TCP - быстрее, но протокол закрытый: им штатная среда говорит с тонким клиентом. Я выбрал TCP: снял обмен с провода и повторил его. RSA-1024 с PKCS#1 v1.5, 192 байта на тройном DES, NTLM, контрольная сумма по полям GUID и идентификатор, который нельзя делать случайным. Рассказываю, где спотыкался и что получилось: точки с условием, шаги, стек, локальные, вычисление и остановка по ошибке - на живом клиенте.

Читать далее

Как немножко обмануть сервер

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

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

Обязательно находится Вася, который играет давно и на рейтинг ему в общем-то пофиг, но проигрывать он не любит. Не любит настолько, что готов потратить на подготовку к матчу больше денег и времени, чем на сам матч, а его соперник заводчанин Василий, который приходит вечером после работы и хочет просто поиграть, имеет средний компьютер, домашний Wi-Fi через две стены и реакцию уставшего человека. Василий иногда выигрывает, но чаще проигрывает, и его это в целом устраивает, пока он уверен, что проигрывает честно.

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

Читать далее

Где Runtime Async в .NET 11 экономит память, а где нет

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

В.NET 11 привычный механизм async/await меняется: управление приостановкой методов переходит к рантайму, а JIT получает новые возможности для оптимизации. Но насколько это снижает аллокации в реальном коде и почему результаты замеров иногда противоречат друг другу? Разбираем Runtime Async на примере бенчмарков, сравниваем результаты с классической реализацией и выясняем, в каких сценариях выигрыш действительно заметен.

Изучить результаты тестов

Восемь ИИ‑агентов и пять способов узнать, что они делают: как мы подключали OpenCode, Kilo и Pi к чёлке Mac

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

Lumio — бесплатное приложение для чёлки MacBook. Оно показывает, что сейчас делают ваши ИИ-агенты: кто работает, кто закончил, кто ждёт разрешения на команду. Разрешить можно прямо из чёлки, не переключаясь в терминал. Ещё есть пиксельный офис, где каждая сессия — человечек за своим столом.

До сегодняшнего дня Lumio понимал Claude Code, Codex, Cursor, GitHub Copilot и Antigravity. В 1.3 добавились OpenCode, Kilo Code и Pi. Казалось бы, ещё три строки в настройках. На деле — три разных способа подключиться и одна неделя, из которой два дня ушли не на код, а на то, чтобы проверить его на настоящих агентах без платных ключей.

Читать далее