На своём MacBook M4 я не замечал проблем. Два скрипта на Node.js 18 собирали информацию по проекту, обходили файлы, считали строки, агрегировали данные и отрабатывали за пару секунд. Жить можно.
А потом на созвоне коллега расшарил экран. У него удалённый рабочий стол, Intel Core i5-1035G1, 8 ГБ RAM. Он запустил тот же скрипт, и мы оба смотрели на терминал восемь секунд. В тишине. Восемь секунд это много, когда ты запускаешь скрипт десять раз в день.
Я переписал оба скрипта на Rust с помощью AI-ассистента (Claude Code). Получил 5-10x ускорение. Ниже то что сработало, что нет, и стоит ли вам делать то же самое.
Контекст
Два CLI-скрипта для внутренних нужд проекта:
Скрипт 1: рекурсивный обход директорий через glob, подсчёт строк в файлах по расширениям, вывод агрегированной статистики.
Скрипт 2: парсинг Markdown-файлов, извлечение front matter, построение индекса контента.
Оба на Node.js 18. На M4 работали незаметно. На железе коллеги тормозили ощутимо. Проект рос, файлов становилось больше, и разрыв в производительности между машинами только увеличивался.
Проблемы в коде были понятные: старый glob без оптимизации, промисы запускались последовательно вместо параллельного выполнения. Можно было исправить на Node.js. Но когда видишь, как коллега ждёт по 8 секунд на каждом запуске хочется решить проблему с запасом, а не впритык.
Почему Rust, а не оптимизация Node.js
Прагматичный ответ: скрипты делали ровно то, в чём Rust силён file traversal и CPU-bound агрегация. Это тот же класс задач, где ripgrep и fd показывают 10-20x ускорение по сравнению с системными grep/find.
Непрагматичный ответ: было интересно проверить, насколько реально использовать AI для генерации кода на незнакомом языке в production-сценарии.
Важно: я осознанно выбрал простую задачу. Два скрипта, каждый это пара сотен строк, без сложной бизнес-логики, без сетевых вызовов, без многопоточности. Идеальный кандидат для эксперимента. На сложном проекте с архитектурными решениями результат был бы другим.
Процесс
Отдал оба скрипта Claude Code с задачей переписать на Rust. Дальше произошло кое-что, что хорошо иллюстрирует, почему Rust + AI-генерация работает лучше, чем ожидаешь.
Компилятор Rust нашёл проблемы в сгенерированном коде. AI их исправил. Итеративно, без моего участия в отладке. Строгая система типов Rust создаёт tight feedback loop: ошибки конкретные, с указанием места и причины. Не размытые runtime-ошибки чёткий сигнал. Компилятор фактически выступает code reviewer для AI.
Что я делал: ревью финального кода (~20 минут). Читал, проверял логику, сравнивал с оригинальными скриптами. Код был понятный, Rust читается проще, чем пишется.
Чего я не делал: не отлаживал, не гуглил ошибки компилятора, не разбирался с lifetimes.
Распространение бинарников
Отдельная задача это как доставить Rust-бинарники в проект. Они platform-specific, хранить в git очень плохая идея.
Посмотрел на подход esbuild: npm-пакеты с platform-specific бинарниками. npm install и получаешь бинарник для своей ОС. Без исходников в репозитории, без тяжёлых файлов. Сделал так же вышло лучше чем ожидал.
Результаты
Машина | Node.js 18 | Rust | Ускорение |
|---|---|---|---|
i5-1035G1, 8 ГБ RAM | ~8 сек | ~1-1.5 сек | 5-7x |
MacBook M4 | ~2 сек | ~0.3 сек | ~6x |
Результат предсказуемый для данного класса задач (file I/O + CPU-bound обработка). Не уникальный: ccusage показал до 1000x ускорения отдельных операций после миграции с Node.js на Rust.
Где это не сработает
Честность важнее хайпа. Вот ограничения:
По задаче:
Если узкое место сеть (API вызовы, база данных), выигрыш будет минимальный. Rust не ускорит ожидание ответа от сервера.
Если скрипт и так быстрый (< 1 сек) овчинка не стоит выделки.
Профилируйте перед тем, как переписывать.
node --profили простоtime node script.jsубедитесь, что bottleneck там, где думаете.
По подходу (AI-генерация):
Простые скрипты для меня ок. Сложная архитектура с десятками модулей, trait objects, async runtime совсем другая история.
Я не стал Rust-разработчиком. Я могу читать этот код и вносить мелкие правки через AI. Но если понадобится серьёзный рефакторинг для меня это будет проблема. Хотя всегда можно подучиться.
Зависимость от AI для обслуживания кода на языке, который не знаешь это технический долг. Осознанный, но долг. И не факт, что кроме тебя его вообще кто-то поймет и вообще сможет исправить.
Итого
Для конкретного класса задач (CLI-утилиты, file traversal, CPU-bound обработка) переписывание Node.js → Rust через AI-ассистента дало предсказуемый результат: 5-10x ускорение при минимальных затратах времени.
Подход работает, когда:
Задача простая и изолированная
Bottleneck в CPU/I/O, а не в сети
Вы готовы к тому, что обслуживание кода будет через AI
Не работает, когда:
Сложная бизнес-логика с архитектурными решениями
Нужно глубокое понимание экосистемы (async Rust, unsafe, FFI)
Команда должна поддерживать код без AI
Оригинал статьи с дополнительными деталями: ifonin.ru/blog/nodejs-rust-claude-code
