Клон pylint на Rust с побайтово идентичным выводом: почти весь написан ИИ-агентом

prylint обещает тот же вывод, что и pylint, включая баги и сообщения о падениях, но в 2328 раз быстрее. Первый же комментарий в треде открыл GitHub — и обнаружил, что каждый коммит сделан Claude, а мейнтейнера никто не знает.

Вкратце

Питч звучит как мечта о бенчмарках: те же предупреждения, что у pylint, те же баги воспроизведены намеренно, а линтинг black за 26,7 часа завершается за 41 секунду. Написан системой агентного программирования Fable при минимальном участии человека.

Тред раскололся быстро. Одни назвали это SEO-мусором с README от LLM и усомнились в легитимности. Другие пожали плечами: если проходит тесты самого pylint, какая разница, кто набирал код?

Линтер, который намеренно копирует баги pylint

prylint — это реализация pylint на Rust с необычной точкой продажи: он не пытается стать лучше, он пытается быть идентичным. Страница прямо об этом: «prylint не "вдохновлён" pylint» — это баг-за-багом порт. Где pylint выдаёт предупреждение, prylint выдаёт то же предупреждение. Где pylint падает, prylint сообщает то же сообщение об ошибке. Заявлен побайтово идентичный вывод, проверенный на 52 продакшн-кодовых базах и примерно 65 000 файлах Python.

Выигрыш — скорость. Диапазон в заголовке: 15–2300x, медиана около 85x, и на больших репозиториях это особенно ощутимо:

Кодовая база pylint prylint Ускорение
black 26,7 ч 41 с 2328x
sentry 3,7 ч 24 с 546x
home-assistant 10,3 ч 82 с 452x
airflow 1,9 ч 17 с 399x

Ещё одна необычная деталь: инструмент создан Fable — агентной системой программирования — за месяцы итераций, а не написан человеком вручную. Именно эта деталь, а не цифры, взорвала тред.

Первый комментарий: «это вообще легитимный проект?»

Самый высоко оценённый ответ сразу открыл репозиторий.

«Смотрю на GitHub — все коммиты от Claude, при этом adamraudonis, похоже, не связан ни с кем другим… этот пост выглядит как SEO-мусор. Это вообще легитимный проект?» — комментатор, проверивший историю коммитов

Читатель с рейтингом 10 тысяч+ нашёл улику прямо в формулировках README:

«Как всегда, с третьей строки понимаешь, что документацию не писал (а может, и не читал) человек. Надоело это предательство доверия.» — давний читатель HN

«Ruff уже существует» — возражение об избыточности

Второй удар не имел отношения к тому, как был написан код. Проверки pylint уже есть в Ruff — быстром линтере на Rust, на который перешло большинство команд.

«Это просто ruff check --select=PL, но хуже во всём, причём поддерживаемый системой, которой уже нет? Он даже использует код Ruff под капотом.» — читатель HN с рейтингом 11 тысяч+

Сам Fable, как заметили несколько человек, уже недоступен, так что автор инструмента — система, которую сегодня даже не запустить.

Контраргумент: «результаты говорят сами за себя»

Затем последовал разворот. Разработчик оспорил саму постановку вопроса: код не может быть «запятнан» способом своего создания.

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

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

Весомое подтверждение пришло от того, кто делал похожее вручную. Инженер описал перенос заброшенного HTML/шаблонного линтера djlint на Rust с помощью LLM — не за один раз, но с побайтовой совместимостью:

«Python-версия была сильно основана на регулярках… В Rust-версии я переключился на полноценную токенизацию файлов с последующим проходом по правилам на AST за один проход… Python-версия работала около 4 минут; Rust-версия на том же коде работает долю секунды.» — инженер, перенёсший djlint на Rust

Другой читатель рассказал, как поручил Fable несвязанную миграцию — с nix+npm на docker+pnpm на стеке, который команда не понимала — и тот «почти за один раз» справился, а после недели стресс-тестирования нашлось мало ошибок.

Почему порты — лёгкий случай для агентов

Тихий главный вывод расположен между двумя лагерями. Несколько инженеров объяснили, почему этот класс задач так хорошо подходит агенту: существующая программа — точная спецификация, тесты — бесплатный оракул, а модель может итерировать до тех пор, пока diff не пустой. Это делает «переписать X на Rust» редкой AI-задачей, где скептицизм — кто написал? — снимается запуском тестов, а вопрос об избыточности — зачем, если уже есть Ruff? — оказывается тем, что на самом деле задевает.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 27 из 33 Читать дальше
🔥Hot Discussion

Kent Beck джуниорам: ваша зарплата — это опционная премия на того, кем вы станете

Мы наняли вас не выполнять задачи, пишет Kent Beck новым инженерам. Мы наняли вас расти — и потратим минимум усилий на тех, кто не справится. Тред прочитал последнюю фразу совсем иначе.

★ 88 · 💬 45 · newsletter.kentbeck.com · 4 мин