Почему скрипты на Ruby экономят токены и упрощают код-ревью. Сравнение с Python и bash. Практические советы для настройки агента.
Вы когда-нибудь задумывались, почему ваш coding agent пишет громоздкие скрипты на Python, когда можно сделать то же самое на Ruby в два раза короче? В этой статье я разберу эксперимент, который показывает реальную экономию токенов и влияние на читаемость кода. Вы узнаете, как простая инструкция в конфиге агента может сократить объём кода на 120% и сэкономить ваше время на ревью.
Идея пришла от Люсьена Гинды: он предложил вставлять в инструкции агента правило писать одноразовые скрипты на Ruby. Его аргумент — простота ревью, ведь он ежедневно читает Ruby. Но я решил проверить, сколько токенов это реально экономит.
Я взял четыре типовые задачи: обработка логов, переименование ключей в конфигах, перенумерация скриншотов и преобразование CSV. Каждую задачу агент решал на Ruby, Python, bash и JavaScript. Все реализации проверялись на идентичность результата — байт в байт.
Эксперимент проводился в двух средах: чистой (без конфигов) и с моим реальным окружением. Важно: агент не получал само правило, только название языка и ограничение стандартной библиотекой.
Без указания языка агент всегда выбирал Python. Причина — стандартная библиотека, предустановленная везде. Но это не значит, что Python оптимален. Сравните размеры кода для нейтрального запроса:
Язык Байт Относительно Ruby
Ruby 1660 0%
Python 3644 +120%
bash 2333 +41%
JS 3231 +95%Ruby оказался самым коротким, а Python — в два раза больше. Но в моём реальном окружении разрыв сокращался до 18% из-за других настроек.
Вот как выглядит решение задачи на Ruby без лишних обёрток:
root = ARGV[0]
Dir.glob(File.join(root, "conf", "*.env")).sort.each do |path|
content = File.read(path)
renamed = 0
rewritten = content.lines.map do |line|
if line.start_with?("CACHE_TTL=")
renamed += 1
"TTL_SECONDS=" + line[("CACHE_TTL=".length)..]
else
line
end
end.join
File.write(path, rewritten) if renamed > 0
puts [File.basename(path), renamed].join("\t")
endЭто вся программа. Читается легко, логика прозрачна. А вот Python-версия той же задачи занимает 38 строк, из-за ручного управления переводами строк и защитой if __name__.
Основные причины — докстринги, main(), импорты и обработка окончаний строк. В моём замере докстринги составляют 8% объёма. Уберите их — и разрыв сократится до 101%.
Я проверил, как разные формулировки влияют на размер. Вот лестница инструкций:
Два слова "Гольфуй." дают почти максимум экономии. При этом "Будь кратким" менее эффективно, потому что "гольф" — это термин, подразумевающий агрессивное сжатие.
Вот тот же скрипт на Ruby после инструкции "Гольфуй.":
Dir[ARGV[0]+"/conf/*.env"].sort.each{n=0;File.write(it,File.read(it).gsub(/^CACHE_TTL=/){n+=1;"TTL_SECONDS="});puts [File.basename(it),n]*"\t"}Одна строка, 144 байта вместо 409. Но требует Ruby 3.4, использует неявный параметр it и сайд-эффекты. Читать такое сложно — вы экономите токены, но теряете в ясности.
Длина самой длинной строки выросла с 80 до 151 символа, пунктуация — с 24% до 37%. Вы покупаете плотность, но платите читаемостью.
Если ваш агент пишет много скриптов, добавьте в CLAUDE.md правило: "Пишите одноразовые скрипты на Ruby, используйте только стандартную библиотеку". Это сократит объём кода примерно на 50% и упростит ревью. Но помните: не переусердствуйте с гольфом — лучше сохранить баланс.
Попробуйте на следующей задаче: попросите агента написать скрипт на Ruby и сравните с Python. Убедитесь сами, насколько короче и понятнее код.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →