Эксперимент опроверг миф: динамические языки не экономят токены у ИИ-агентов

В сети давно ходит и часто цитируется пост, из которого делают вывод: динамические и лаконичные языки программирования обходятся ИИ-агентам дешевле по токенам, чем статически типизированные. Эту мысль повторяет даже ИИ-обзор Google в поисковой выдаче: у динамически типизированных языков токены обычно дешевле, чем у статических, потому что без явных объявлений типов код компактнее. Обзор Google ссылается на тот же исходный пост и говорит, что экономные динамические языки стоят от 1/2 до 1/3 токенов по сравнению со статическими вроде Rust, Go и C++. В самом посте-первоисточнике указан разрыв в 2,6 раза между языком C (наименее токен-экономным в сравнении) и Clojure (самым экономным); отдельно упомянут язык J, он расходует в среднем всего 70 токенов на Rosetta Code задачах против 109 у Clojure, то есть почти вдвое меньше.

Автор блога danluu.com относится к этому выводу скептически: задачи в исходных сравнениях, по его наблюдению, тривиальны (решаются буквально в десятки токенов), а в одном из вторичных сравнений обнаружен баг разметки тестов, искажающий результат для Rust. Прежде чем ставить собственный эксперимент, автор заранее, до результатов, зафиксировал прогнозы: с уверенностью 95%, что общий вывод «динамические языки эффективнее» не подтвердится на более сложных задачах; с уверенностью 60%, что на максимальном уровне усилий модели статические языки окажутся немного лучше динамических; и с уверенностью 98%, что преимущество «странных» плотных языков вроде J не сохранится.

Для проверки поставлены два новых теста на многих языках программирования. Первый: агентам без доступа в интернет дают спецификацию формата zstd (RFC с поправками) и просят реализовать полноценный декодер; готовые тесты агентам не показывают, а итоговый код проверяют по собственному набору тестов автора, он не рассчитан на поиск крайних граничных случаев, а проверяет случаи, которые легко выводятся из спецификации. Второй тест, переработанный бенчмарк Pandoc из набора ProgramBench: агентам дают материалы и тесты ProgramBench, а итоговое решение проверяют на отдельном отложенном наборе тестов. Оба теста прогнаны на среднем и максимальном («ultra») уровне усилий модели; для zstd использовалась модель GPT-5.6 Sol, для Pandoc-теста конкретная модель в тексте не названа.

Результат: на среднем уровне усилий динамические языки действительно выигрывают, они дешевле и точнее в среднем, что как будто подтверждает исходный тезис. Но на максимальном уровне усилий картина смешанная: среди лучших результатов оказывается больше статических языков, чем динамических, а сама связь «динамический = эффективнее» перестаёт прослеживаться. Эта закономерность повторилась и на декодере zstd, и на тесте Pandoc, хотя Clojure на Pandoc показал себя заметно лучше, чем на zstd. Ассемблер и другие малораспространённые языки на обеих задачах справились плохо. При этом популярность языка (а не то, динамический он или статический) слабо-умеренно коррелирует и с более низкой стоимостью, и с более высокой корректностью решений.

Автор заключает, что большинство ходовых утверждений о том, какой язык лучше подходит ИИ-агентам, что Ruby, Clojure или J особенно хороши для LLM, или распространённое мнение про особую пригодность Elixir, на этих данных выглядят ошибочными, но что именно определяет пригодность языка, пока не ясно. Отдельно автор напоминает о старом академическом обзоре 2014 года: в исследовании на 33 испытуемых (Java против Groovy) статическая типизация помогала быстрее находить ошибки типов, но не давала преимущества при поиске смысловых ошибок, ещё один пример, что широкие утверждения про статические и динамические языки плохо выдерживают проверку деталями.

Ключевые факты

  • Ходовое убеждение (его повторяет и ИИ-обзор Google): динамические языки экономнее по токенам для ИИ-агентов, источник называл разрыв C/Clojure в 2,6 раза и язык J на 70 токенах против 109 у Clojure на простых Rosetta Code задачах
  • Автор блога danluu.com заранее, до результатов, зафиксировал прогнозы: 95% уверенности, что общий вывод не подтвердится; 60%, что на максимальном уровне усилий статические языки окажутся лучше; 98%, что преимущество J не сохранится
  • Поставлены два новых теста на многих языках: реализация декодера zstd по RFC без готовых тестов и переработанный бенчмарк Pandoc из ProgramBench, каждый, на среднем и максимальном уровне усилий модели (для zstd, GPT-5.6 Sol)
  • На среднем уровне усилий динамические языки действительно выигрывают, но на максимальном, картина смешанная: среди лучших результатов больше статических языков, чем динамических
  • Популярность языка коррелирует и с более низкой стоимостью, и с более высокой корректностью решений сильнее, чем деление на динамические/статические; малораспространённые и «плотные» языки вроде J и ассемблер справились плохо

Почему это важно

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

Кому это важно

Тем, кто настраивает харнесс для ИИ-агентов и выбирает, на каком языке им писать код; командам, которые принимают решения об архитектуре под LLM-инструменты; всем, кто цитирует утверждения про «лучший язык для ИИ» без проверки источника.

Как это применить

Не выбирать язык под ИИ-агента только из-за репутации «токен-экономного», на задачах сложнее игрушечных этот эффект исчезает или разворачивается. Более надёжный сигнал, по данным автора, популярность языка: она коррелирует и с меньшей стоимостью, и с большей корректностью решений. Смысла гнаться за «странными» плотными языками вроде J ради экономии токенов, судя по этим тестам, нет.

Можно ли доверять

Автор до результатов зафиксировал прогнозы (95%, 60%, 98% уверенности), практика, снижающая риск подгонки выводов под факты постфактум; выводы прежних, более цитируемых постов он предметно раскритиковал за тривиальность задач и найденный баг в тестовой разметке. При этом это собственные эксперименты одного блога на двух конкретных задачах (декодер zstd и бенчмарк Pandoc), не рецензируемое исследование и не широкий охват языков и задач, сам автор оговаривает, что для «сильного, универсального» вывода нужны эксперименты на многих задачах.

Риски и подводные камни

На среднем уровне усилий модели динамические языки всё же оказываются впереди, вывод не однозначно «динамические языки не при чём», а «эффект не держится при росте сложности и усилий». Проверены только две конкретные задачи, а не широкий бенчмарк; в тексте не приводится ни имя автора, ни числовые значения стоимости/времени для новых тестов, только графики (по оси x, стоимость или время, по оси y, корректность), что ограничивает возможность независимо перепроверить цифры.

«У динамически типизированных языков токены LLM обычно обходятся дешевле, чем у языков со статической типизацией: без явных объявлений типов код получается компактнее.»

— ИИ-обзор Google в поисковой выдаче, цитирует критикуемый автором первоисточник