Разработчик Wouter van Oortmerssen создал язык программирования Goose, почти полностью реализованный с помощью ИИ.
Новинка предназначена для системного программирования и, по результатам собственных тестов проекта, способен обойти C++ и Rust по скорости и эффективности использования памяти.
При этом Goose решает одну из главных проблем системных языков: управление памятью. В нем нет кучи, сборщика мусора и необходимости вручную указывать время жизни ссылок.
Вместо этого язык использует специальные стеки данных, а компилятор проверяет, чтобы ссылки не переживали объекты, на которые они указывают.
Читают прямо сейчас:
Что такое куча — где программа хранит данные и чем куча отличается от стека, которым в Goose заменили кучу
Обзор языка программирования Rust — как Rust следит за владением и временем жизни ссылок, с чем Goose и сравнивают
Кеш-френдли-код: как заставить процессор работать быстрее — почему данные, лежащие в памяти компактно и подряд, ускоряют программу
Что показали тесты
По результатам 16 тестов, опубликованных авторами Goose, язык показал следующие результаты:
- Работает примерно в 3,5 раза быстрее идиоматического C++.
- Опережает оптимизированный вручную C++ примерно в 1,2–1,3 раза.
- Быстрее наиболее производительного безопасного Rust примерно в 1,13–1,19 раза.
- Использует в среднем в 1,25–1,95 раза меньше памяти, чем сравниваемые реализации.
Это результаты бенчмарков самого проекта, а не независимого исследования. Авторы публикуют полный набор измерений, в том числе тесты, в которых Goose проигрывает конкурентам.
Как Goose экономит память
Главное отличие языка — данные хранятся компактно и последовательно, без отдельных выделений памяти для каждого вложенного объекта. Когда область данных больше не нужна, память освобождается простым перемещением указателя стека.
Например, структура заказа, которая в приведенном авторами примере занимает 160 байт и требует одного выделения памяти в C++, в Goose занимает 29 байт без дополнительных выделений. Это также позволяет эффективнее использовать кэш процессора.
Язык умеет сохранять ссылки на элементы растущих массивов: добавление новых элементов не перемещает уже созданные данные. А некоторые перечисления хранятся только в размере конкретного варианта, а не самого большого из возможных — это тоже снижает расход памяти.
Безопасность без сложных аннотаций
Goose проверяет время жизни ссылок автоматически. Разработчику не нужно прописывать специальные аннотации, как в Rust, а конструкции unsafe в языке вообще нет. При этом компилятор отклоняет код, в котором ссылка может пережить объект-владелец.
Есть и ограничения. Например, массивы элементов переменного размера нельзя произвольно индексировать, а рекурсивные функции не могут сохранять растущие структуры данных через рекурсивные вызовы.
Также пока нет указателей на функции и динамического вызова методов в привычном для многих языков виде.
ИИ написал реализацию, человек разработал язык
По словам автора, проект появился благодаря модели Claude Fable. Саму концепцию Goose Wouter van Oortmerssen разработал раньше, но не успел завершить реализацию. ИИ помог написать компилятор, документацию, примеры и тесты, а обсуждение деталей с моделью позволило уточнить первоначальный дизайн.
Компилятор Goose преобразует программы в C, поэтому для сборки можно использовать привычные инструменты и компиляторы C.
Скидка на все курсы Практикума
Раз вы дочитали эту новость до конца, с технологиями у вас всё в порядке. А если давно присматривались к разработке, аналитике, нейросетям, тестированию или кибербезопасности, сейчас туда можно зайти дешевле.
Промокод KOD (можно просто нажать) даст скидку на любой платный курс! А если пока не готовы покупать курс, у Практикума есть бесплатные вводные части.
