Zero Playground
Читать документациюПишите, запускайте и делитесь фрагментами кода — без установки.
Попробуй Zero в браузере
Zero — это новый системный язык программирования от Vercel Labs, первый релиз вышел в мае 2026 года. Внешне он напоминает Rust — pub fun, let mut, ->, дженерик-скобки — но цель дизайна необычная: весь toolchain рассчитан на то, чтобы его читали, правили и чинили AI-агенты так же легко, как и люди. Диагностика отдаётся в виде структурированного JSON со стабильными error code'ами, компилятор умеет выдавать типизированные repair plan'ы, а бинарники укладываются меньше чем в 10 KiB. Playground даёт тебе чистый редактор, чтобы покопаться в языке без какой-либо установки.
Самая характерная идея Zero — это I/O на capability'ях. Никаких неявных глобалов и ambient stdout — функция, которая хочет писать в терминал, обязана принять параметр World и вызвать world.out.write(...). Ошибки распространяются через raises и check вместо исключений и panic'ов, а опциональные значения используют .has / .value вместо null. Жмёшь Run — редактор компилирует код на сервере и показывает вывод. Stdin ещё не подключен, потому что Zero v0.1.3 пока не выпустил stdin-API — используй std.args через панель Args.
Чем интересен Zero
- I/O на capability'ях: каждый сайд-эффект (stdout, файлы, сеть) проходит через параметр
World, и сигнатура функции честно говорит, к чему она может прикоснуться. Никаких скрытых глобалов, никакого неявного allocator'а, никакого внезапного async. - Toolchain, заточенный под агентов:
zeroвыдаёт стабильную JSON-диагностику,zero fix --plan --jsonгенерирует типизированные repair plan'ы, и каждый subcommand CLI принимает--json, чтобы агенты pipe'или вывод, а не парсили его регулярками. - Крошечные нативные бинарники, часто меньше 10 KiB. Компилятор использует прямые emitter'ы для ELF, Mach-O, PE и WebAssembly, так что за собой не тащит зависимость от LLVM.
- Знакомый синтаксис, более жёсткая безопасность: на бумаге похоже на Rust, но без panic-on-null, без неявного GC и без скрытого control flow. Ошибки — это просто значения, которые ты пробрасываешь через
check.
Что попробовать в Zero playground
- Напечатай что-нибудь через
world.out.writeи посмотри, как аннотацияraisesзаставляет тебя обработать ошибочный путь черезcheck. Это вся идиома Zero для безопасности без исключений в одном крошечном примере. - Прочитай аргумент командной строки через
std.args.get(N)и распакуй optional через.has/.value. Подредактируй значения в панели Args под редактором — они передаются твоей программе на Run, ровно как настоящий argv. - Напиши маленькую
fun, возвращающуюString, вызови её изmainи посмотри, как типы протягиваются сами. Zero выводит generic'и агрессивнее, чем Rust, так что большинству вызовов вообще не нужны аннотации.
Частые вопросы о Zero
Что такое язык программирования Zero?
--json, а отдельный режим zero fix --plan производит типизированные repair plan'ы, которые агенты применяют напрямую. Синтаксически он находится где-то между Rust и Zig. Главная идея — capability-based I/O через параметр World.Нужно ли устанавливать компилятор Zero, чтобы пользоваться этим playground'ом?
zero на сервере, в изолированном контейнере, поэтому ты пишешь код в браузере и жмёшь Run. Версия компилятора зафиксирована (сейчас v0.1.3), и sandbox одинаков для каждого запуска. Если ты хочешь ещё и разрабатывать локально, проект Zero публикует готовые бинарники на странице GitHub releases.Почему у Zero playground'а нет поля для stdin?
World (world.out, world.err), плюс std.args для аргументов командной строки и std.env для переменных окружения. Пока Vercel Labs не выпустит stdin-capability, используй панель Args под редактором — так ты передаёшь программе ввод.Что такое capability World и почему её получает main?
World и вызывать на нём методы (world.out.write, world.err.write и так далее). Это превращает сигнатуру в честную декларацию сайд-эффектов — функция без World доказуемо не может коснуться внешнего мира. main получает её, потому что runtime — это и есть тот, кто выдаёт начальную capability.Что означают raises и check?
raises (опционально перечисляя конкретные имена ошибок), а вызывающий пишет check expr, чтобы пробросить ошибку вверх по стеку. Думай об этом как об операторе ? из Rust, но с именованными типами ошибок: ошибки — это значения, а не сюрпризы потока управления.