Menu

Что такое Zero: язык программирования для ИИ-агентов

Zero — экспериментальный системный язык программирования от Vercel Labs, спроектированный так, чтобы ИИ-агенты были полноправными пользователями наравне с людьми. Разбираемся, что это такое и зачем он нужен.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Язык, спроектированный под своих читателей

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

Zero начинает с другой посылки. Его основные читатели — ИИ-агенты, языковые модели, которые пишут, отлаживают и чинят код от чьего-то имени. Человек остаётся в цикле, но дизайн языка с самого первого дня воспринимает агентов как полноправных пользователей. Один этот сдвиг каскадно проявляется почти в каждой видимой особенности языка.

Zero сделан Vercel Labs, живёт на zerolang.ai, открыт на github.com/vercel-labs/zero. Исходники имеют расширение .0.

Пять вещей в этом фрагменте — pub, World, raises, check и явный world.out.write — уже многое говорят о том, как мыслит Zero. Разберём каждую из них ниже.

«Всё явное»

Неофициальный девиз документации Zero — everything is explicit. Язык намеренно избегает того скрытого механизма, который делает другие системные языки удобными для человека, но коварными для генераторов кода:

  • Нет обязательного сборщика мусора.
  • Нет скрытого аллокатора.
  • Нет неявного async-рантайма.
  • Нет волшебных глобалов — ни ambient stdout, ни process.env, ни неявной файловой системы.

Всё, что функция делает с внешним миром, должно появиться в её сигнатуре. Для человека это много печати; для агента, который рассуждает о том, что функция реально делает, это подарок.

Capability вместо глобалов

Способ, которым Zero обращается с I/O, — самый яркий пример этой философии. Глобальной функции print тут нет. Вывод происходит через значение World, которое рантайм передаёт в main:

pub fun main(world: World) -> Void raises {
    check world.out.write("hello\n")
}

Если функция где-то в глубине стека вызовов хочет записать строку в лог, ей придётся явно получить World (или какую-то более узкую capability). Можно прочитать сигнатуру функции и понять — не заглядывая в её тело — может ли она трогать сеть, файловую систему или stdout. На такое свойство может полагаться статический анализатор (или агент, делающий code review).

The World capability разбирает эту идею глубже.

Явный отказ через raises и check

Функции, которые могут провалиться, объявляют это. Вызывающие, которые их зовут, это подтверждают. Тихих исключений нет:

raises { InvalidInput } у validate означает «эта функция может упасть с InvalidInput». check в месте вызова означает «если это упадёт — пробрось ошибку выше». Случайно потерять ошибку нельзя — либо она появляется в сигнатуре вашей функции, либо компилятор вас остановит. См. Raises и Check — там это разобрано целиком.

Компилятор, который разговаривает с агентами

Самая характерная часть Zero — не синтаксическая фича, а вывод компилятора. Запустите zero check --json на сломанной программе — и вы получите что-то такое:

{
    "ok": false,
    "diagnostics": [
        {
            "code": "NAM003",
            "message": "unknown identifier",
            "line": 3,
            "repair": { "id": "declare-missing-symbol" }
        }
    ]
}

Три вещи отличают это от обычной ошибки компилятора:

  1. Стабильные коды ошибок. NAM003 сегодня означает «unknown identifier» и в следующей версии компилятора будет означать ровно то же самое. Агенты могут паттерн-матчить по коду, не разбирая английский.
  2. Структурированные метаданные починки. Поле repair называет вид исправления, которым, по мнению компилятора, можно устранить ошибку. Агент может запросить план через zero fix --plan --json и применить его.
  3. Не нужно разбирать прозу. Весь смысл в том, чтобы агенту не приходилось интерпретировать человеческое сообщение, чтобы решить, что делать дальше.

JSON Diagnostics подробно разбирает формат.

Маленькая поверхность — это специально

Грамматика Zero маленькая и регулярная — по духу ближе к раннему C, чем к «языку со всем сразу» вроде Scala или современного C++. Логика прагматичная: агент должен иметь возможность усвоить весь язык за одну сессию без промахов на пограничных случаях.

Поэтому вы увидите:

  • Один способ объявить функцию (fun или pub fun).
  • Один способ связать локальное значение (let).
  • Один способ моделировать product-типы (shape), один способ моделировать sum-типы (choice), один способ для обычных перечислений (enum).
  • Одну конструкцию для pattern matching (match).
  • Одну конструкцию цикла в раннем языке (while).

Чего вы не найдёте — по крайней мере на этом этапе — это перегрузки операторов, неявных преобразований, макросов, декораторов или трёх конкурирующих способов выразить одно и то же. Это не аскеза; это сознательный выбор — сделать поверхность достаточно маленькой, чтобы агент почти никогда не выбирал неправильный вариант.

Чем Zero не является

Чтобы сразу выровнять ожидания:

  • Не скриптовый язык. Zero компилируется в нативные бинарники. Программы маленькие (в документации упоминаются исполняемые файлы меньше 10 КБ) и не тащат за собой рантайм.
  • Не Rust, не Go, не Zig. У синтаксиса общие предки, но приоритеты другие — Rust оптимизирует под memory safety с богатой системой типов, Zero оптимизирует под обучаемость агентов с намеренно крошечной.
  • Не стабильный. Zero — pre-1.0. Команда прямо говорит, что ломающие изменения будут, если они приближают agent-first цели. Не закладывайте его пока ни во что серьёзное.
  • Не часть платформы деплоя Vercel. Несмотря на то что Zero сделан Vercel Labs, он не привязан к Next.js или Vercel-хостингу. Это самостоятельный системный язык.

Когда стоит попробовать Zero сегодня

Попробовать Zero сегодня стоит, если вам интересно:

  • Как меняется язык, когда дизайн-ограничения приходят от агентов, а не от людей.
  • Поэкспериментировать с capability-based I/O, не переходя на исследовательский язык.
  • Посмотреть, как «структурированный вывод компилятора» выглядит в роли first-class фичи, а не запоздалой добавки.
  • Дать фидбэк Vercel Labs по проекту, который активно эволюционирует.

Пропустите его (пока что), если вам нужен стабильный язык для реальной работы, нужна зрелая экосистема библиотек или кросс-платформенный тулинг уровня Rust или Go.

Дальше: установка Zero

В следующей статье разберём установку тулчейна Zero и заставим скомпилироваться вашу первую программу. От начала до конца — примерно минута.

Часто задаваемые вопросы

Что такое язык программирования Zero?

Zero — экспериментальный системный язык программирования от Vercel Labs, спроектированный так, чтобы ИИ-агенты были первичными пользователями наравне с людьми. У него небольшой и регулярный синтаксис, явные эффекты через capability-объект World, а компилятор выдаёт структурированные JSON-диагностики и машинно-читаемые планы починки, на которые агент может реагировать напрямую.

Кто делает Zero и это официальный продукт Vercel?

Zero делает Vercel Labs — исследовательское подразделение Vercel. Это открытый эксперимент, размещённый по адресу github.com/vercel-labs/zero, а не стабильный продукт Vercel. В README прямо сказано, что это pre-1.0, и предупреждают о том, что запускать его в проде или на чувствительных данных нельзя.

Zero — это «агентский язык»?

Да. Весь смысл Zero в том, чтобы спроектировать язык, на котором ИИ-агенты — а не только люди — могут надёжно читать, генерировать, отлаживать и чинить код. Это формирует всё: от небольшой регулярной грамматики до JSON-вывода компилятора и стабильных кодов ошибок вроде NAM003.

Как выглядит исходный файл Zero?

Исходники используют расширение .0. Минимальная программа выглядит так: pub fun main(world: World) -> Void raises { check world.out.write("hello\n") }. Параметр World — это capability-объект, через который вы делаете I/O, а raises и check делают операции, которые могут провалиться, явными.

Готов ли Zero к продакшену?

Нет. Zero — pre-1.0 и явно экспериментальный. Компилятор, стандартная библиотека и синтаксис ещё меняются. Команда рекомендует запускать его только в изолированных окружениях — используйте его, чтобы учиться, прототипировать и давать фидбэк, а не для того, чтобы поставлять пользователям продакшен-софт.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ