Jacquard: язык программирования для кода, который пишут нейросети, а проверяют люди

Jacquard: язык программирования для кода, который пишут нейросети, а проверяют люди

Разработчик под ником jbwinters опубликовал на Hacker News (рубрика Show HN) проект Jacquard, небольшой исследовательский язык программирования, который он описывает как инструмент для запуска, проверки, симуляции и доверия к программам, написанным нейросетями и проверяемым людьми. Вышла версия 0.1 (релиз-кандидат rc3): компактный синтаксис .jac, компилятор и интерпретатор на OCaml, нативный бэкенд с компиляцией в C, консольная утилита, собственная стандартная библиотека и фреймворк для тестирования Warp. Автор прямо называет 0.1 исследовательским прототипом, а не production-языком.

Главная идея, сделать эффекты программы (например, обращение к сети или диску) частью самого языка, а не комментария или логов. Сигнатура функции вида «(text) ->{net} text» означает, что функция может выполнить сетевой эффект net; если эффект не разрешён явно флагом --allow, среда выполнения Jacquard откажется его выполнять, включая эффекты, вызванные динамическим кодом. Автор подчёркивает, что это ограничение на уровне языка, а не замена полноценной изоляции на уровне операционной системы.

Вторая особенность, запуск одной и той же программы против разных «миров»: реальной сети, заранее прописанной подделки, записи прошлого сетевого трафика или вероятностной модели поведения серверов. За подмену отвечает «обработчик» (handler), код при этом не меняется. По словам автора, это может заменить значительную часть традиционного мокирования на границах эффектов и превращает вопрос «что сделает мой агент, если API откажет» в обычный тест.

Третья возможность, точный вероятностный вывод для конечных дискретных моделей: программа может делать взвешенный случайный выбор и фиксировать свидетельства, а специальная функция перечисляет все достижимые исходы с их точными вероятностями. В демонстрации проекта это применяется к автоматическому исправлению кода: программа делает восемь кандидатов-патчей для сбойной функции, проваленный тест трактуется как свидетельство, и после разрешения эффекта eval остаются два патча, правильное исправление с вероятностью 0.75 и патч, который просто обходит проверку, с вероятностью 0.25. Добавление ещё одного регрессионного теста отсеивает обманный патч.

Четвёртая идея, «канонический» идентификатор кода: Jacquard хэширует не исходный текст, а канонизированную структуру программы, поэтому переименование переменных, форматирование и комментарии не меняют идентичность кода, и «чистые» тесты перезапускаются только при изменении реальной логики или зависимостей.

Под капотом язык устроен как 27 базовых форм (по принципу «голова, метаданные, аргументы»), поверх которых надстроен пользовательский синтаксис .jac; внутренний/отладочный формат .jqd поддерживается постоянно. Реализованы алгебраические эффекты с «глубокими» многократно возобновляемыми обработчиками, обработчик может продолжить вычисление ноль, один или много раз, что и позволяет реализовать исчерпывающий перебор и точный байесовский вывод как обычную библиотеку, а не как встроенную функцию среды выполнения. Каждая стрелка типа несёт набор эффектов, которые может выполнить функция, то есть выведенный тип функции, это одновременно манифест её полномочий. Есть нативный AOT-бэкенд, компилирующий в C и дифференциально протестированный против интерпретатора под clang и gcc.

Релиз-кандидат RC1 закреплён 554 тестами (Alcotest/QCheck), 32 cram-транскриптами, 21 примером в документации и нативными санитайзер-, leak- и fuzz-проверками. RC2 исправил упаковку бинарных демонстраций, RC3 добавил явное лицензионное исключение для рантайма и его вывода; текущий дистрибутив лицензирован под Apache License 2.0. Автор подчёркивает, что эти изменения в лицензировании и упаковке не меняют семантику языка, зафиксированную в RC1.

Установить готовый бинарник можно одной командой curl без OCaml и opam; поддерживаются Linux x86-64, macOS Intel и macOS Apple Silicon. Публикация на Hacker News за 13 часов набрала 65 баллов и 39 комментариев.

Ключевые факты

  • jbwinters выпустил Jacquard 0.1 (rc3), исследовательский язык для кода, который пишут нейросети, а ревьюят люди; сам автор называет его прототипом, не production-языком
  • Сигнатура функции показывает её побочные эффекты (например, обращение к сети); неразрешённые эффекты среда исполнения блокирует, пока их явно не откроют флагом --allow
  • Одну программу можно запускать против разных «миров», реальной сети, записи трафика или вероятностной модели, подменяя только обработчик, без изменения кода
  • Есть точный вероятностный вывод для конечных моделей: в демо-примере из 8 кандидатов-патчей для сбойного кода после теста-свидетельства остаются 2, с вероятностями 0.75 и 0.25
  • Идентификатор кода, хэш канонической структуры, а не текста файла: переименования и форматирование не запускают лишние тесты

Почему это важно

По мере того как всё больше кода пишут не люди, а модели, встаёт вопрос: как проверяющему быстро понять, что программа делает и чему в ней можно доверять, не вычитывая каждую строку. Jacquard пытается решить это на уровне самого языка, ответ на вопрос «что эта программа может затронуть и насколько мы уверены» становится частью сигнатуры функции и типа, а не полагается на комментарии, логи или память разработчика.

Кому это важно

В первую очередь, разработчикам инструментов для ИИ-агентов и систем автоматической генерации/ревью кода, а также исследователям языков программирования и вероятностного программирования: проект даёт конкретный пример того, как эффекты, вероятностный вывод и идентичность кода можно встроить прямо в язык, а не надстраивать поверх него библиотеками.

Как это применить

Jacquard 0.1-rc3 можно поставить одной командой (готовые бинарники для Linux x86-64, macOS Intel и macOS Apple Silicon, без установки OCaml/opam) и попробовать на готовых демо, фактическом расчёте риска релиза, авторемонте кода по вероятностям и работе с разными «мирами» сети. Проект прямо предупреждает: это исследовательский прототип с зафиксированными границами (описаны в LIMITS.md), а не готовое к продакшену решение.

Можно ли доверять

Заявления подкреплены собственной инфраструктурой проверки: 554 теста (Alcotest/QCheck), 32 cram-транскрипта, 21 пример в документации, санитайзер-, leak- и fuzz-тесты для нативного компилятора, а C-бэкенд дифференциально тестируется против интерпретатора. Это Show HN-проект одного разработчика, не проверенный независимыми внешними аудитами; сам автор честно называет 0.1 исследовательским прототипом, а не производственным языком.

Риски и подводные камни

Языковой уровень запрета на неразрешённые эффекты, это не замена полноценной ОС-изоляции, о чём прямо предупреждает автор. Каноническая идентичность кода на основе хэша структуры, это структурное сравнение, а не доказательство поведенческой эквивалентности программ. Проект молодой (версия 0.1), рассчитан на узкую аудиторию разработчиков языков и агентных систем, и его судьба как открытого инструмента пока не ясна.

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

— документация проекта Jacquard