HeadlinesBriefing HeadlinesBriefing.com

Common Lisp — лучший язык для кода LLM

Hacker News •
×

Согласны ли вы, что некоторые языки программирования лучше других? Если да, то один из них должен быть лучшим. И на самом деле это Common Lisp, особенно теперь, когда LLM могут писать код. LLM пишут код очень быстро, и это меняет многое, потому что написание кода раньше было медленной частью. Теперь медленной частью является определение того, действительно ли ваша программа работает, и прежде чем вы сможете это сделать, вам нужно перестроить её, что может занять несколько минут. Когда люди писали код, это не имело большого значения, потому что написание занимало гораздо больше времени, чем ожидание компиляции и запуска. Но теперь это важно, поэтому длительность вашей обратной связи определяет, насколько быстро вы можете создавать. В Common Lisp эта петля почти не существует, потому что нет реального различия между временем чтения, временем компиляции и временем выполнения (Грэхем). Common Lisp основан на образе, что означает, что ваша программа — это живой образ в памяти, поэтому новая версия функции сразу заменяет старую без необходимости перезапуска чего-либо. Кроме того, в большинстве языков ошибка приводит к сбою программы. Поэтому, если вы пишете код с помощью LLM, ему придётся читать ваши журналы сбоев, чтобы внести некоторые изменения и снова запустить вашу программу. В Common Lisp ваша программа не упадёт, она остановится и откроет отладчик со всем стексом и всеми переменными. Вы можете просто направить свой LLM на отладчик, и он внесёт своё исправление и возобновит программу. Насколько мне известно, Common Lisp — единственный основной язык, который делает всё это.

Lisp означает «Обработка списков». В Common Lisp код записывается в виде списков. Например, (+ 1 2) — это программа, которая складывает два числа, но это также просто список из трёх элементов: символ + и числа 1 и 2. Интересно то, что это тот же тип списка, который Common Lisp использует для хранения данных, и поскольку язык построен вокруг обработки списков, все его инструменты для работы с данными также работают с кодом. Таким образом, программа может взять другую программу и изменить её, например превратить (+ 1 2) в (* 1 2) и сразу выполнить результат. Это делает возможными макросы. Макрос — это функция, которая принимает ваш код и возвращает новый код на его месте, что означает, что вы можете добавить новые конструкции в язык сам по себе. Как только вы сможете добавить в язык, вы сможете построить его в сторону вашей проблемы. Таким образом, в Lisp вы не просто пишете программу, вы пишете язык для вашей области и затем пишете программу на этом языке. Это становится ещё важнее сейчас, потому что то, что делает программу ценной, — это мнения, стоящие за ней. И мы движемся к миру, где программные компании позволяют своим пользователям менять продукт сами, поскольку с LLM это легко. Таким образом, если компания создаёт хорошее доменно-ориентированное язык с мнением для своего продукта, всё, что её пользователи строят поверх него, будет значительно лучше, потому что они начинают с мнений компании, а не с нуля. Возьмём ERP. Каждая компания ведёт его немного по-своему, поэтому почти всем в итоге нужно его изменить. Но если ERP написан на своём доменно-ориентированном языке, вы можете просто попросить LLM внести изменение на этом языке. Изменение естественно будет следовать лежащим в основе мнениям доменно-ориентированного языка, поэтому оно будет соответствовать продукту, а не ломать его. И это не просто лучше, это также дешевле. Программы на Lisp часто намного короче, потому что макросы позволяют абстрагировать повторяющиеся паттерны и сделать их частью языка самого по себе. Поэтому чем больше программа, тем больше разница. В моём опыте приложения, которые я создал на Common Lisp, оказываются примерно в шесть-семь раз короче, чем версии на Python. Для LLM меньше кода означает меньше токенов, а токены — это то, за что вы платите, поэтому вы тратите меньше на разработку. Это также означает, что большая часть вашего programu может поместиться в окно контекста LLM. Если ваш LLM имеет весь ваш programme в своём окне контекста, то у него есть полное представление о вашем намерении, что приводит к принятию лучших решений. По моему опыту, многие ошибки LLM возникают из-за того, что он меняет одну часть моей программы, не видя остальной части. Поэтому с Common Lisp это происходит реже. Common Lisp — единственный основной язык, который делает всё это.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing