EnglishРусский Map

vera

title
vera
type
toolbox
summary
Язык для генерации LLM: без имён переменных, с обязательными контрактами и строками эффектов
tags
python, language, verification, llm, watchlist
language
Python
license
MIT
created
2026-04-30
updated
2026-04-30
lang
ru
translation_of
vera
source_updated
2026-04-30
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Vera - язык программирования, созданный для написания LLM, а не людьми. Исходная предпосылка: главный сбой сгенерированного LLM кода кроется не в синтаксисе, а в связности на масштабе: инварианты размываются между файлами, возникают ошибки именования (вводящие в заблуждение имена, повторное использование имён, потерянные ссылки - см. arXiv:2307.12488) и неверные рассуждения о состоянии во времени. Vera пытается перевести эти ошибки в разряд сбоев компиляции.

Компилятор представляет собой эталонную реализацию на Python, которая компилирует в WebAssembly и работает через CLI или в браузере. Автор - Alasdair Allan (автор книг по IoT и мейкерству, по образованию также физик).

Три архитектурных решения, определяющих всё остальное

Никаких имён переменных. Привязки адресуются типизированными индексами Де Брёйна - @Int.0 обозначает самую свежую привязку типа Int в области видимости, @Int.1 - предшествующую ей. Ошибки, вызванные путаницей в именах, исчезают, потому что путать нечего. Отдельно сама концепция описана в typed-de-bruijn-for-llms.

Обязательные контракты. У каждой функции между сигнатурой и телом расположены секции requires(), ensures() и effects(). Сигнатура - это спецификация, а не просто тип. Z3 статически доказывает контракты Tier-1 (разрешимая арифметика, сравнения, булевы выражения, ADT, завершаемость); контракты, которые решатель не может доказать, становятся проверками во время выполнения Tier-3.

Алгебраические эффекты в сигнатурах. Функция, вызывающая LLM, объявляет effects(<Inference>); функция, отправляющая HTTP-запросы, объявляет effects(<Http>). Вызывающий код обязан разрешить всю строку эффектов. Чистые функции объявляются как effects(pure), и компилятор строго за этим следит. Это ближе к Koka или F*, чем к IO в Haskell: строка эффектов крепится к функциональной стрелке, а не сидит в типе возвращаемого значения.

public fn safe_divide(@Int, @Int -> @Int)
  requires(@Int.1 != 0)
  ensures(@Int.result == @Int.0 / @Int.1)
  effects(pure)
{
  @Int.0 / @Int.1
}

Деление на ноль в Vera - это не ошибка во время выполнения, а ошибка типов, отлавливаемая в каждом месте вызова.

Ошибки сформулированы для модели, написавшей код

Диагностика включает суть ошибки, причину, конкретный исправленный пример и ссылку на спецификацию. Каждая ошибка имеет стабильный код (E001-E702) и доступна в виде структурированного JSON через флаг --json для циклов обратной связи агентов:

[E001] Error at main.vera, line 14, column 1:
  Function is missing its contract block. Every function in Vera must declare
  requires(), ensures(), and effects() clauses between the signature and the body.
  Fix: ...
  See: Chapter 5, Section 5.1 "Function Structure"

Флаг --json выдаёт замысел. Весь язык относится к LLM как к основному пользователю - вывод ошибок отформатирован под автономный цикл, а не под человека в терминале.

Инструментарий для агентов

Репозиторий поставляется с файлами SKILL.md, AGENTS.md, CLAUDE.md и DE_BRUIJN.md - отдельными документами для Claude Code, типовых агентных систем и академической справкой по слотовой системе. Claude Code автоматически находит skill в репозитории; для других проектов он устанавливается в ~/.claude/skills/vera-language/SKILL.md.

Рабочий процесс

vera check    # parse + type-check
vera verify   # add Z3 contract verification
vera run      # compile to WASM + execute
vera test     # contract-driven testing
vera fmt      # canonical formatter

vera compile --target browser генерирует самодостаточный бандл (wasm + JS runtime + HTML), а система сборки прогоняет тесты на паритет, чтобы поведение в CLI и браузере оставалось одинаковым.

VeraBench

Сопутствующий бенчмарк автора (vera-bench) содержит 50 задач в 5 уровнях сложности на 6 моделях от 3 провайдеров. Заявленные главные цифры: Kimi K2.5 показывает 100% run_correct на Vera против 86% на Python и 91% на TypeScript; три модели обошли TypeScript на Vera; среднее значение для флагманских моделей составляет 93% на Vera против 93% на Python. Это разовый прогон с высокой дисперсией - не окончательный вердикт, но ранний сигнал указывает на то, что "специально созданные ограничения повышают корректность, не снижая беглость генерации".

Статус и watchlist

На момент импорта версия v0.0.127, репозиторий создан 2026-02-22 (возраст около 10 недель), 810+ коммитов, 127 релизов, 261 звезда, лицензия MIT, один автор. Компилятор включает парсер, проверку типов, верификатор контрактов на Z3, генерацию кода WASM, модульную систему, среду выполнения для браузера и вставку контрактов во время выполнения. Спецификация из 13 глав находится в статусе черновика. В roadmap главной целью обозначен верифицированный сервер инструментов MCP.

Добавлен в watchlist - один автор, проект очень молодой, намеренно плывущий против привычек экосистемы (отсутствие имён переменных трудно продать). Вопросы для следующей проверки: пишет ли кто-то нетривиальный код на Vera помимо Alasdair, появятся ли независимые воспроизведения VeraBench и будет ли закрыт этап с верифицированным MCP-сервером.

Перекрёстные ссылки

  • typed-de-bruijn-for-llms - концепция ссылок через слоты отдельно от Vera.
  • vamp-ai-frontend - та же идея на стороне фронтенда: явные, изначально спроектированные под ИИ языковые интерфейсы превосходят традиционные при генерации кода.
  • clippy-stricter-config - вариант доработки существующего: ужесточение языка линтерами вместо полной перестройки синтаксиса.
  • clean-code-coding-agents - экономика контекстного окна, стимулирующая дизайн языков под ИИ.

Репозиторий

https://github.com/aallan/vera - 261 звезда, MIT, Python (компилятор) / WASM (среда выполнения).