Vercel создали свой язык программирования

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00Vassel только что выпустили новый язык программирования под названием Xero, и, судя по всему,
00:00:03его главное отличие в том, что он изначально создавался для совместной работы
00:00:07людей и ИИ-агентов над небольшими нативными программами. Но разве мы все и так этим не занимаемся?
00:00:12Так чем же этот язык лучше, хорошая ли это вообще идея, или это просто очередной пет-проект,
00:00:16о котором через пару месяцев все забудут? Давайте выясним.
00:00:25Xero — это системный язык вроде Rust или Zig, так что, возможно, когда-нибудь на него перепишут BUN.
00:00:30И, насколько я понял, вся суть в том, что нынешние языки создавались для людей.
00:00:34Поэтому мы читаем сообщения об ошибках, предупреждения и трассировки, но ИИ работает куда лучше,
00:00:38когда имеет дело со структурированными данными. В Xero весь тулчейн построен с учетом этого,
00:00:43а значит, всё, что выдает компилятор, может быть выведено в формате JSON.
00:00:46Конечно, судя только по этим пунктам и по явно написанным нейросетью предложениям на их сайте,
00:00:51я всё еще довольно скептически отношусь к тому, зачем это нужно и насколько хорошо это будет работать,
00:00:56но выводы приберегу на конец. Сперва давайте просто изучим сам язык,
00:00:59потому что, надо признать, штука все равно занятная. Начнем с классического проекта
00:01:03для знакомства с новым языком — вывода простейшей строки. Здесь почти всё интуитивно понятно.
00:01:08У нас есть публичная функция main в качестве точки входа в программу. Эта функция возвращает
00:01:12void, и внутри нее мы выводим строку. Но именно то, как эта строка
00:01:16выводится, подсвечивает первые особенности языка. Мы используем возможность “world” (мир). Она
00:01:21необходима для любых операций ввода-вывода (I/O), таких как работа с файлами, вывод текста, сетевые запросы —
00:01:26любых побочных эффектов ввода-вывода, и всё это часть принципа явности данного языка.
00:01:31Если функция обладает возможностью “world”, это сразу сигнализирует о наличии операций ввода-вывода,
00:01:37а если ее нет, то функция гарантированно не имеет побочных эффектов ввода-вывода.
00:01:40Возможность “world” также позволяет компилятору отклонять недоступные функции в зависимости от целевой платформы
00:01:45еще на этапе компиляции, а не во время выполнения. Так что, если вы попытаетесь обратиться к файловой системе
00:01:50внутри этой функции, а затем скомпилировать проект под WebAssembly, компилятор сразу выдаст ошибку,
00:01:54и вы не столкнетесь с неожиданным сбоем программы в продакшене.
00:01:57Помимо возможности “world”, в этой программе также используются ключевые слова.
00:02:00Например, здесь есть слово check, с помощью которого обрабатываются ошибки. Если функция может завершиться ошибкой,
00:02:05вы помечаете её словом raises, а затем используете check для проброса этой ошибки дальше. Это очень похоже
00:02:09на оператор знака вопроса в Rust, но только в виде ключевого слова. Вот и всё, что нам нужно знать
00:02:13для нашей первой программы на Xero, и мы можем запустить ее, выполнив команду “xero run hello.xero”.
00:02:19Обратите внимание, что .xero — это расширение файлов для этого языка. Если я сейчас нажму Enter,
00:02:23то увижу строку “hello, subscribe to Betastack”. Что вам обязательно стоит сделать.
00:02:26Идем дальше. Поскольку теперь мы все явно стали экспертами в Xero,
00:02:30в языке есть еще несколько примитивов для покрытия базовых потребностей вашего приложения.
00:02:34Я набросал тут небольшое приложение, которое просто классифицирует ввод как текстовый,
00:02:39числовой или смешанный. Как видите, здесь используются стандартные библиотеки,
00:02:43присутствуют перечисления (enums), а также структуры под названием “shapes” (формы). В остальном всё привычно:
00:02:47ожидаемые конструкции вроде операторов if, чуть ниже есть цикл while, также можно
00:02:52использовать циклы for, а ниже идет match, который по сути выполняет роль оператора switch.
00:02:56Так что ничего сверхнеобычного. Когда доходит до продвинутых концепций вроде памяти, в Xero
00:03:00опять же всё должно быть максимально явно. У нас есть изменяемые слайсы (mutable spans) для записи
00:03:05и обычные слайсы для чтения, а ниже расположен тип owned (владеемый). Он указывает на то,
00:03:10что значение принадлежит данной области видимости, и при выходе из нее нужно вызвать функцию drop.
00:03:14Мы сами определяем функцию drop для этой структуры, прописывая в ней логику очистки памяти.
00:03:18Другой способ добиться того же результата — использовать ключевое слово defer перед вызовом функции.
00:03:22По сути это означает: когда текущая функция завершится и выйдет из области видимости, выполни указанное действие.
00:03:26В общем, тут есть необходимый минимум для написания простейшего приложения. Имеются и другие фичи,
00:03:31но я не хочу превращать это видео в туториал по программированию. Хотя вы вполне можете указать
00:03:35в своем резюме, что у вас есть три минуты опыта работы с Xero. Теперь, когда с базой покончено,
00:03:39давайте сосредоточимся на главном коммерческом аргументе Xero — его тулчейне и заточенности под ИИ-агентов.
00:03:44Представьте, что ИИ-агент пишет код на Xero и допускает баги. Создатели утверждают,
00:03:49что в большинстве языков вы получите в ответ стену текста, так как сообщения об ошибках созданы для людей.
00:03:54В Xero вы тоже можете вывести человекочитаемый лог, и выглядеть он будет примерно так,
00:03:58но, как видите, это не структурированный вывод. Поэтому разработчики внедрили поддержку JSON
00:04:02в каждую часть инструментария. И если мы запустим ту же проверку, но добавим флаг JSON
00:04:07и перенаправим вывод в утилиту JQ, чтобы всё выглядело аккуратнее в терминале,
00:04:12то мы получим отлично структурированное сообщение об ошибке. Здесь есть диагностические данные:
00:04:16критичность, код ошибки и само сообщение. Указано место, где возникла проблема, ожидаемое и
00:04:21фактическое значения. Также есть подсказки для самой LLM и поле оценки безопасности автоисправления,
00:04:26которое сообщает, требуется ли ручная проверка, и дает инструкции по исправлению. То есть система
00:04:31пытается предоставить языковой модели достаточный контекст, чтобы она сама всё пофиксила. Еще одна команда,
00:04:35демонстрирующая этот подход, — “xero fix”. Я запускаю ее в режиме планирования с флагом JSON,
00:04:40снова прогоняя через JQ ради красивого форматирования. Нажав Enter, я по сути
00:04:44запускаю диагностику сломанного файла классификатора, и утилита выдает конкретный план:
00:04:49что именно нужно сделать для починки. На выходе получается структурированный объект с полями,
00:04:53которые нужны по большей части только LLM: уровни безопасности, режим, применимость правок. Ниже видны
00:04:58параметры политики автономного исправления. Далее идет блок диагностики, во многом похожий
00:05:03на то, что мы видели в команде “xero check”, а в самом низу приведено решение для данного кода ошибки.
00:05:07Как это обычно исправляется? Часть задумки, похоже, заключается в том, чтобы язык
00:05:12сам предоставлял необходимую документацию по запросу. То есть, если мы натравим LLM на этот новый язык,
00:05:17модели не придется искать мануалы или задействовать скрытые знания — она получит
00:05:21весь контекст напрямую из тулчейна прямо в момент сборки. Чтобы проверить это на практике, я скопировал
00:05:25наш сломанный файл в абсолютно пустую директорию, где нет никакого упоминания о языке Xero, и затем
00:05:30просто попросил Claude починить этот файл, предоставив лишь команду, необходимую для запуска
00:05:34диагностики, ведь модели все-таки нужно знать, как взаимодействовать с тулчейном. После этого
00:05:38мы можем посмотреть, справится ли Claude с задачей. И вот результат: спустя 31 секунду модель
00:05:43успешно исправила все ошибки в файле. Я намеренно добавил туда три бага, она обнаружила
00:05:47и пофиксила все три. Мы можем прокрутить логи вверх и посмотреть, как она это сделала. Она просто
00:05:51запускала ту самую команду “xero fix”, которую я ей давал. В конце мы получили статус “ok: true”, означающий,
00:05:56что ошибок больше нет. Если подняться еще выше, видно, что она внесла изменения в код, основываясь на данных,
00:06:00полученных на предыдущем шаге от утилиты “xero fix”, которая детально расписала пути решения,
00:06:05и проделала это для каждой из трех проблем. Повторюсь, у модели не было никаких предварительных знаний
00:06:10о языке Xero, она не использовала поиск в интернете для загрузки документации — она
00:06:14опиралась исключительно на структурированные данные из тулчейна. И это действительно
00:06:18впечатляет: совершенно новый язык, в котором LLM может успешно отлаживать код благодаря тому,
00:06:22как этот язык спроектирован. Однако у меня остался один вопрос: а так ли это ново? Я имею в виду,
00:06:28фишка со структурированным выводом ошибок и поддержкой JSON во всем тулчейне понятна,
00:06:31но сама концепция не нова — структурированные сообщения об ошибках существуют уже десятилетиями.
00:06:37Посмотрите сами: у меня есть примерно такой же кривой классификатор, написанный на Rust, с похожими ошибками,
00:06:41и я точно так же могу запросить вывод логов в формате JSON. Я не уверен, что ради этой идеи стоило
00:06:46создавать целый язык. Возможно, было бы достаточно улучшить существующие инструменты, если в них
00:06:51не хватало информативности. Я также практически уверен, что если бы я взял этот сломанный код на Rust и попросил
00:06:55Claude исправить его, модель справилась бы без проблем, причем даже без использования структурированного
00:07:00вывода. По моему опыту, LLM отлично разбираются и в обычных текстовых логах, хотя, возможно,
00:07:05я просто не сталкивался со сложными случаями. К тому же не стоит забывать, что нейросети обучались
00:07:10на огромных массивах кода существующих языков вроде Rust, поэтому они отлично умеют их дебажить,
00:07:14имея массу примеров в обучающей выборке. А вот по Xero у них данных нет вообще. Конечно, это не значит,
00:07:19что не нужно пытаться создавать новые языки, просто для разработки комплексного приложения вы вряд ли
00:07:24выберете Xero. Впрочем, если честно, создатели и не позиционируют его для таких задач.
00:07:28В целом, я думаю, что это просто любопытный эксперимент, который как минимум доказывает, что можно
00:07:32создать новый язык и успешно передавать ИИ нужный контекст без предварительного обучения на нем.
00:07:37Но была ли в этом реальная необходимость — вопрос открытый. При этом я не утверждаю, что сам язык
00:07:42неинтересен. Как я уже говорил, он вполне приятен в использовании и компилируется в бинарники хорошего размера.
00:07:47Но я сильно сомневаюсь, что когда-либо предпочту его проверенным инструментам вроде Rust, Zig или Go.
00:07:51Уверен, на этот счет будет много разных мнений, так что делитесь своими мыслями в комментариях,
00:07:55подписывайтесь на канал, и, как обычно, увидимся в следующем видео.

Key Takeaway

Язык Xero от Vercel доказывает возможность успешной отладки кода нейросетями без предварительного обучения за счет интеграции структурированного JSON-вывода во весь тулчейн, хотя аналогичную функциональность можно реализовать и в существующих языках вроде Rust.

Highlights

  • Компания Vercel выпустила новый системный язык программирования Xero, разработанный специально для совместной работы человека и агентов искусственного интеллекта.

  • Инструментарий Xero поддерживает вывод всех данных компилятора в формате JSON, включая диагностику ошибок с кодами, уровнями безопасности и инструкциями для автоисправления.

  • Возможность “world” в языке Xero явно указывает на наличие операций ввода-вывода и позволяет компилятору отклонять несовместимые функции на этапе сборки, предотвращая сбои в WebAssembly.

  • Языковая модель Claude без предварительных знаний о Xero и без доступа к интернету полностью исправила три внесенные ошибки в коде за 31 секунду, используя только утилиту xero fix.

  • Существующие системные языки, такие как Rust, также поддерживают структурированный вывод сообщений об ошибках в формате JSON на протяжении десятилетий.

Timeline

Концепция создания и назначение языка Xero

  • Язык Xero представляет собой системный язык программирования нового поколения, схожий по своей природе с Rust или Zig.
  • Главное отличие Xero от существующих языков заключается в ориентации тулчейна на работу со структурированными данными для ИИ-агентов, а не на чтение текстовых логов людьми.

Существующие языки программирования создавались для человека, поэтому компиляторы генерируют текстовые сообщения об ошибках, предупреждения и трассировки. Искусственный интеллект работает эффективнее со структурированной информацией. Весь инструментарий нового языка от Vercel построен вокруг этой особенности, преобразуя любые выводы компилятора в формат JSON.

Синтаксис, управление памятью и обработка побочных эффектов

  • Операции ввода-вывода в Xero жестко контролируются компилятором через обязательное объявление возможности world.
  • Для обработки потенциальных ошибок в коде применяются ключевые слова raises и check, заменяющие оператор знака вопроса из Rust.
  • Управление памятью требует явного использования изменяемых или неизменяемых слайсов, а также типа owned с функцией drop или ключевого слова defer.

Программа на Xero использует публичную функцию main в качестве точки входа. Наличие ключевого слова world сигнализирует о побочных эффектах ввода-вывода, что позволяет компилятору блокировать недоступные функции для конкретных платформ, например WebAssembly, до запуска кода. Для очистки памяти при выходе из области видимости применяется явное определение логики в функции drop для структуры или отложенный вызов через defer. Базовый синтаксис включает привычные элементы: стандартные библиотеки, перечисления enums, структуры shapes, циклы while, for и оператор сопоставления match.

Интеграция тулчейна с ИИ-агентами и практический тест отладки

  • Команда xero check с флагом JSON предоставляет структурированный объект с диагностическими данными, кодами ошибок и оценкой безопасности автоисправления.
  • Утилита xero fix в режиме планирования выдает пошаговый план ремонта поврежденного файла с параметрами политики автономного исправления.
  • Нейросеть Claude устранила три бага в коде за 31 секунду, опираясь исключительно на данные из тулчейна Xero без поиска документации в сети.

Тулчейн Xero передает языковым моделям полный контекст прямо в момент сборки, избавляя их от необходимости использовать скрытые знания. В структурированном JSON-выводе содержатся критичность, ожидаемые и фактические значения, а также специальные подсказки для LLM. В ходе эксперимента модель Claude получала на вход только команду для запуска диагностики в пустой директории. Процесс исправления состоял из циклического запуска xero fix и пошагового применения решений до получения статуса успешного завершения.

Сравнение с существующими инструментами и перспективы языка

  • Концепция структурированного вывода ошибок в формате JSON не является уникальной и давно применяется в языке Rust.
  • Языковые модели успешно справляются с дебагом стандартных текстовых логов благодаря огромным массивам существующего кода в обучающей выборке.
  • Xero позиционируется создателями как инструмент для небольших нативных программ, а не для разработки комплексных приложений.

Аналогичный сломанный код на Rust позволяет точно так же запрашивать логи в формате JSON через стандартный инструментарий. Для улучшения ИИ-разработки во многих случаях достаточно повысить информативность текущих утилит без создания нового языка программирования. Современные LLM эффективно разбираются в человекочитаемых логах и имеют преимущество при работе с Rust, Zig или Go из-за обилия примеров. Проект Xero ценен как эксперимент, подтверждающий возможность передачи контекста ИИ без предварительного обучения, но он уступает проверенным системным инструментам при создании сложных продуктов.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video