|
Professor Seleznov
|

Официальная иллюстрация с x.com Agent-first язык программирования звучит как хорошая идея, да? В конце концов, агентам не нужны фигурные скобки. Им не нужна красота if, while, for, match, Result, try, await, naming conventions и вот этого всего, сделанного для нас - кожаных мешков. Именно поэтому Zero от Vercel Labs на первый взгляд выглядит как интересный эксперимент. Официальный сайт называет его языком для агентов, README говорит про "agent-first programming language", а авторский пост в X обещает systems language, который быстрее, меньше и проще для агентов в использовании и дебаге. Звучит почти убедительно. До тех пор, пока вы не открываете код. Что такое Zero Zero - экспериментальный systems language от Vercel Labs. Репозиторий vercel-labs/zero на момент написания уже набрал тысячи звезд, релизы и стандартный для продуктов Vercel уровень упаковки: сайт, документация, примеры, CLI, бенчмарки и т.д, и т.п. Официальный pitch такой:
- минималистичный и простой синтаксис, чтобы агент мог "выучить его на лету";
- стандартная библиотека вместо поиска зависимостей;
- structured tooling: diagnostics, graph facts, size reports, repair plans в машинно-читаемом виде;
- explicit effects: доступ к внешнему миру должен быть виден в сигнатуре;
- предсказуемая память, маленькие native binaries, меньше магии.
Если убрать маркетинг, идея нормальная. Даже хорошая. Проблема в том, что почти каждый пункт уже существует где-то рядом: в Rust, Zig, TypeScript, Language Server Protocol, компиляторах с JSON output, статических анализаторах, линтерах, пакетных менеджерах и просто в нормальной инженерной дисциплине. Zero же пытается продать это как новые подходы в дизайне языка, приправленные синтаксисом а-ляret + 40 2, чтобы казаться более "агентским". Agent-first learnability Официальная формулировка: язык должен быть маленьким, регулярным, с небольшим количеством special cases, чтобы агент мог быстро научиться по примерам, документации и feedback от компилятора. В теории - отлично. LLM действительно лучше работают с регулярными паттернами. Чем меньше синтаксических исключений, тем ниже вероятность, что модель начнет галлюцинировать JavaScript внутри Rust внутри YAML. Но есть нюанс, который почему-то постоянно забывают в разговорах про "язык для AI": агент не появляется в вакууме. Он обучается на датасете. TypeScript, Rust, Zig, Python, Go, C, C++ есть в training data в промышленных объемах. Там есть миллионы репозиториев, issues, PR, Stack Overflow, блогов, compiler errors, CI logs, cargo output, GitHub Actions, линтеров и гайдов на Хабр о том, как завести create-react-app. Данных по zero, извиняюсь за каламбур, - zero. То есть "агент может выучить язык на лету" на практике означает: каждый раз кормить агенту документацию, примеры, skill-файлы и надеяться, что он не перепутает синтаксис Zero с любым похожим языком, который был у него в датасете. Это не learnability. Это context tax. И пока я писал эту статью о синтаксисе Zero, его похожести на другие языки и той самой learnability случается следующее: 21 мая 2026 года в репозитории появляется коммит 229331fe93119e481cd24fd75b3d67a9e2c1db84:

А не изменить ли нам весь синтаксис языка целиком? Сухая статистика: 711 файлов изменено, 6854 вставки, 8904 удаления. Мигрировали examples, fixtures, docs, skills и command contracts. До:
fun answer() -> i32 { return 40 + 2 } pub fun main(world: World) -> Void raises { let value = answer() if value == 42 { check world.out.write("math works\n") } else { check world.out.write("math broke\n") } }
После:
// Скобки отменили, урааа, будущее fn answer i32 ret + 40 2 pub fn main Void world World ! let value answer() if == value 42 check world.out.write "math works\n" else check world.out.write "math broke\n"
С одной стороны, да, синтаксис стал "регулярнее". С другой - он стал похож на... Lisp? Извиняюсь перед любителями Lisp на всякий случай. И самое смешное: агентам не "не нужны if/while/for". Документация Zero спокойно оставляет if, else, while, range for, match, enum, choice, type, defer, owned<T>, ref<T>, mutref<T>, Alloc, Maybe<T> и прочую человеческую цивилизацию. Просто теперь if value == 42 превратился в if == value 42. Да, теперь выглядит действительно "agents-first". Standard library first Zero говорит: "агентам не надо каждый раз выбирать dependency stack". Частые задачи должны жить в стандартной библиотеке, с документированными API и предсказуемым поведением. Это, без иронии, правильная цель. Агенты действительно плохо выбирают зависимости. Они берут пакет с 80 звездочками, последним релизом в 2019 году, API из README, которого уже нет, и потом с уверенностью объясняют, что "ошибка, вероятно, связана с окружением. Пошарьте свой .env. Я разберусь". Но standard-library-first - это не уникальная идея. Go живет на этом десятилетиями. Python со своим "batteries included", тоже пытался. Rust пошел в другую сторону, но компенсировал ecosystem + cargo + docs.rs. TypeScript вообще паразитирует на огромной JS-экосистеме. У Zero пока есть набор модулей: std.mem, std.codec, std.parse, std.fs, std.io, std.json, std.env, std.time, std.rand, std.proc, std.crypto, std.net, std.http. На бумаге выглядит прилично. Но проблема в том, что агенту нужен не только std.parse.isAsciiDigit, а знания вокруг: библиотеки, баги, паттерны, Stack Overflow, CI failures, странные edge cases и чужой production experience. Без этого агент не "пишет на языке". Он решает синтаксическую головоломку с подсказками от компилятора. Deterministic tooling Несмотря на странную формулировку, тут Zero действительно выделяет хорошую идею. Идея: человек читает сообщение, агент читает JSON. Компилятор не просто ругается, а дает структурированное описание проблемы и потенциальный план исправления.
Это сильная часть Zero, но проблема в том, что для этого не нужен новый язык. Это уже есть в Rust! Cargo, rust-analyzer, clippy, rustfix, compiler suggestions - вся эта инфраструктура годами строилась именно вокруг машинно-читаемых сигналов. Да даже TypeScript имеет compiler API и language service. ESLint давно выдает machine-readable reports и autofix. Zero делает правильную вещь, но делает ее в самом дорогом месте: на уровне нового языка, новой экосистемы, нового синтаксиса и новой привычки для всех. Сравнение с TypeScript, Zig, Rust Возьмем самый честный пример: функция возвращает 42, программа печатает math works. Zero (новый row syntax)
fn answer i32 ret + 40 2 pub fn main Void world World ! let value answer() if == value 42 check world.out.write "math works\n" else check world.out.write "math broke\n"
TypeScript
function answer(): number { return 40 + 2; } function main(): void { const value = answer(); if (value === 42) { process.stdout.write("math works\n"); } else { process.stdout.write("math broke\n"); } } main();
TypeScript не systems language, он явно не agents-first, но у него есть то, что для агента пока важнее синтаксической "регулярности": гигантская обучающая база. Модель видела этот код миллионы раз. Она знает, как выглядит if, как выглядит process.stdout.write, как выглядят типы, ошибки tsc, ESLint autofix, Vitest, package.json и Stack Overflow ответы из 2007 года, которые уже не работают, но все еще лежат в датасете как культурный слой. И самое интересное, что Zero, как язык, сразу сделанный для агентов даже не особо-то и компактнее. То есть вы вряд ли сэкономите много токенов при переезде на него с TS. Поехали сравнивать с более близкими экземплярами. Zig
const std = @import("std"); fn answer() i32 { return 40 + 2; } pub fn main() !void { const stdout = std.io.getStdOut().writer(); if (answer() == 42) { try stdout.writeAll("math works\n"); } else { try stdout.writeAll("math broke\n"); } }
Если бы Zero был "Zig plus first-class JSON repair metadata for agents", разговор был бы интереснее. Но текущий row syntax выглядит не как следующий шаг после Zig, а как попытка доказать, что префиксные операторы - это точно нужно агентам. Rust
use std::io::{self, Write}; fn answer() -> i32 { 40 + 2 } fn main() -> io::Result<()> { let value = answer(); let mut out = io::stdout().lock(); if value == 42 { out.write_all(b"math works\n")?; } else { out.write_all(b"math broke\n")?; } Ok(()) }
Rust сложный. Давайте все, кто пытался его изучить, но так и не осилил, нажмут стрелочку вверх под этой статьей. Но Rust дает агенту сильные guard rails в виде типов, ownership, ?, cargo check, rustc --error-format=json, rust-analyzer и огромной базы реального кода. Да, агент будет спорить с borrow checker. Но это хотя бы будет спор с надежным механизмом, который уже проверен годами и тысячами разработчиков. Если свести сравнение к тому, что реально важно агенту, получается не очень празднично для Zero:
| Критерий |
TypeScript |
Zig |
Rust |
Zero |
| Объем кода в датасетах |
огромный |
средний |
большой |
почти ноль |
| Structured diagnostics |
через compiler/language service tooling |
слабее, но язык простой для анализа |
rustc --error-format=json, cargo, rust-analyzer, clippy |
заявлено как центральная фича, но мало примеров |
| Явные эффекты |
нет, в основном дисциплина и tooling |
ошибки/allocators явнее, IO не capability-first |
ошибки через Result, ownership, но IO не capability-first |
World, !, check, capability model |
Читаемость
(на случай если вы уперлись в лимиты агента) |
высокая, если не смотреть на типы React |
высокая для systems-разработчика |
высокая после адаптации и стадии принятия borrow checker |
спорная после row syntax |
Но самый честный аргумент против Zero: агенты учатся на прошлом Vercel говорит: язык должен быть learnable on demand. Но LLM не учится как человек-разработчик, которому выдали tutorial. LLM продолжает предсказывать следующий токен на основе своего датасета. Если в прошлом нет языка, у модели нет "интуиции". Есть только prompt, docs и feedback loop. Да, агент может читать документацию Zero. Да, можно положить в репозиторий AGENTS.md, skill-data и examples. Да, можно сделать zero check --json, zero fix --plan --json, zero explain NAM003. Но это означает, что лучший сценарий для Zero - не "агенты наконец получили свой язык". Лучший сценарий - "мы построили маленькую closed-loop среду, где агент может много раз ошибаться, компилятор его поправляет, а человек надеется, что итоговый diff имеет смысл". Это не революция языка. Это REPL с autocomplete с ценой в ваших токенах. Что говорят люди Запуск в X был заметным. В агрегированном кластере Digg по оригинальному посту Chris Tate указаны 1.2M views, сотни комментариев и почти идеально расколотый sentiment: 49.9% positive против 50.1% negative. Удивительно, что так много позитивных.

Dumb or unnecessary На Reddit в обсуждении r/WebAfterAI дискуссия была более инженерной. Один комментарий хорошо формулирует скепсис: effects flavor - интересно, но не объяснено, что именно здесь так хорошо для агентов, потому что похожие linter/checker workflows есть во многих языках.
Но один комментарий хочу выделить отдельно, потому что это буквально та мысль, которая мучает меня и по сей день: почему это не middleware/readable layer поверх существующих языков? То есть общественный консенсус примерно следующий: идея интересная, но все ждут, когда кто-то объяснит, зачем ради нее нужен новый язык, а не нормальные инструменты для старых. Итог Стоит проговорить, что вообще мне нравятся Vercel и их продукты, пока не нужно за них платить. Они сделали деплой пет-проектов очень простым и бесплатным, запустили классную инициативу с skills.sh, сделали шикарный cli agent-browser, но есть и очень спорные решения с их стороны, как например и это. Zero - хороший эксперимент и ненужный язык программирования. Если язык “для агентов”, но отсутствует в датасетах агентов, он начинает с минуса.
Если он “learnable on demand”, но синтаксис уже через несколько дней радикально меняется, будто у авторов нет четкого представления, что они хотят сделать.
Если он “agent-first”, но его все равно должны ревьюить люди в какой-то момент, то human readability нельзя выбрасывать как необязательную роскошь. Возможно, через год Zero превратится в очень умный compiler/tooling layer, который все будут цитировать как ранний пример agent-readable development environment. Возможно, Vercel найдет killer use-case. А возможно, Zero станет еще одним репозиторием, который люди будут открывать в 2030 году со словами: “О, помните, когда мы думали, что AI-агентам нужен свой язык программирования?”
Если вам понравилась статья, и вы все-таки хотите читать о реально полезных инструментах для агентской разработки, то приглашаю в свой телеграм канал: OpenKirill: AI Coding и другие приколы. Мы там разбираем тулинг, следим за новыми трендами в AI кодинге, и хорошо проводим время.
-Источник
|