Goose: как ИИ написал системный язык по замыслу программиста

Разработчик заранее придумал Goose, а Claude Fable почти целиком реализовала его код: компилятор, бенчмарки, примеры и документацию. Разбираем эксперимент и сам язык.

ИИ чаще помогает писать отдельные функции или приложения. Goose — более масштабный эксперимент: автор говорит, что репозиторий языка почти целиком создан с помощью ИИ. Модель участвовала не только в написании примеров — она реализовала компилятор, а также помогла подготовить бенчмарки и документацию.

При этом Goose не возник из одного запроса к чат-боту. Дизайн языка заранее разработал программист Вутер ван Оортмерссен. Он начал писать компилятор, но не успел закончить работу; позже поручил основную реализацию ИИ-системе Claude Fable и вместе с ней уточнял правила, оставшиеся за рамками первоначального проекта. История Goose интересна именно этим разделением: человек задал архитектуру и направление, ИИ выполнил большую часть инженерной работы.

Как ИИ участвовал в создании Goose

В описании репозитория Goose автор прямо называет проект экспериментом по созданию нового языка с помощью ИИ. Вутер ван Оортмерссен указал за собой дизайн языка и компилятора, а Claude Fable — реализацию компилятора, бенчмарки, примеры программ и документацию.

Дизайн языка задал человек

Замысел Goose появился за несколько лет до этой реализации. Ван Оортмерссен уже начинал писать компилятор, но отложил проект, потому что руководил игровой компанией и не мог выделить достаточно времени. Когда ИИ-модель показалась ему достаточно способной для серьёзной инженерной работы, он вернулся к языку.

Автор предложил модели ориентироваться на устройство его предыдущего компилятора Lobster. Поэтому структура исходного кода Goose отражает уже существовавшую архитектурную основу. ИИ не выбирал задачу, не определял требования с нуля и не заменял собой автора языка: именно человек сформулировал замысел, приоритеты и технические рамки.

Что реализовала модель

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

Это важная деталь: граница между «написать по готовому техническому заданию» и «помочь спроектировать систему» здесь проходила в процессе совместной работы. Человек отвечал за направление и финальные решения, а ИИ мог разбирать крупные связанные задачи в коде и документации. Репозиторий автор описывает как почти целиком созданный с ИИ, но не как автономное изобретение модели.

Как устроен сам язык

Goose — системный язык: он предназначен для программ, где важны скорость, контроль над памятью и возможность работать близко к платформе. Его главная особенность — не необычный синтаксис, а способ размещать данные. Цель разработчика — получить безопасность без сборщика мусора, ручного освобождения каждого объекта и явных аннотаций времени жизни.

Память без кучи и сборщика мусора

Вместо привычной кучи динамические значения Goose размещает в областях данных, которыми управляет компилятор. Он заранее определяет, сколько таких стеков требуется программе и в каких пределах живут значения. При выходе из области видимости достаточно сдвинуть указатель вершины стека — освобождать каждый вложенный объект по отдельности не нужно.

Это не обычный стек вызовов функций и не сборщик мусора. Модель рассчитана на то, чтобы компилятор мог проверить размещение и срок жизни данных до запуска программы. За счёт этого вложенные элементы можно хранить рядом, а ссылки на элементы растущих массивов не должны становиться недействительными после расширения массива.

У такого подхода есть цена. Модель удобнее всего там, где данные создаются и используются в предсказуемых областях. Например, массив переменных по размеру элементов в некоторых режимах можно обходить последовательно, но нельзя индексировать как обычный массив фиксированной структуры. Для иных сценариев потребуются пулы повторного использования или другая организация данных.

Компилятор и совместимость с C

Компилятор Goose написан на C++, а сам язык преобразуется в один файл на C. Goose может связываться с функциями на C через явно описанные сигнатуры. Для запуска исходного кода предусмотрен встроенный TinyCC; сборка отдельного исполняемого файла использует установленный системный компилятор C.

Выбор C++ тоже был частью авторского решения. Ван Оортмерссен отмечал, что при помощи ИИ строгие ограничения языка реализации уже не казались столь обязательными, как раньше. А поскольку результат компиляции — C-код, сохранение компилятора в экосистеме C/C++ упрощало развёртывание. Это пример того, как человек не только поручил модели писать код, но и определил условия, при которых результат будет удобен для пользователей.

Что показывают бенчмарки

В опубликованных авторами измерениях сравниваются 16 задач. В геометрическом среднем Goose показал результат примерно в 3,3 раза выше, чем идиоматичные версии на C++, и на 4–12% выше лучшей безопасной реализации на Rust. Относительно вручную оптимизированного C++ преимущество было меньше — около 16–19%. В тех же тестах пиковое потребление памяти оказалось ниже, чем у сравниваемых вариантов C++ и Rust.

Это результаты конкретного набора тестов, подготовленного командой Goose, а не независимое доказательство того, что язык всегда быстрее C++ или Rust. Разница зависит от структуры данных, компилятора и того, насколько тщательно сравниваемый код оптимизирован. В задачах, которые не выигрывают от модели хранения Goose, преимущество может исчезнуть или смениться отставанием.

Ограничения и значение эксперимента

Goose пока остаётся молодым языком. У него есть компилятор, спецификация, библиотека, учебные примеры и тесты для Windows, macOS и Linux, но экосистема не сопоставима по зрелости с C++ или Rust. Компиляция устроена вокруг целой программы; некоторые привычные способы работы с динамическими структурами требуют адаптации.

Поэтому Goose стоит рассматривать прежде всего как проверку возможностей ИИ в большой инженерной задаче. Модель помогла превратить человеческий проект языка в работающий компилятор и сопутствующий репозиторий. Но сама постановка задачи, исходная архитектура, выборы по незаполненным правилам и оценка результата потребовали участия разработчика.

Именно это отличает эксперимент от истории «ИИ придумал язык программирования». Goose придумал человек, а ИИ почти целиком реализовал его по этому замыслу. Такой пример показывает, насколько далеко модель может продвинуть сложный проект при ясной технической основе и постоянной обратной связи — и почему авторство архитектуры и ответственность за решения по-прежнему имеют значение.

Goose распространяется по лицензии Apache 2.0. Документация, спецификация, примеры и код компилятора доступны на официальном сайте и в репозитории проекта.

Открыть сайт Goose