Язык программирования Goose позиционируется как безопасное решение для системного программирования, работающее без использования аллокатора кучи, сборщика мусора или ручных аннотаций времени жизни объектов. По заявлениям авторов, в бенчмарках Goose демонстрирует более высокую скорость работы и меньшее потребление памяти по сравнению с C++ и Rust.
Ключевая особенность языка заключается в управлении памятью: все динамические значения размещаются в стеках данных, управляемых компилятором. Память освобождается автоматически при выходе из области видимости, а рост структур данных происходит через простое смещение указателя. Это позволяет избежать фрагментации и затрат на проверку емкости при расширении массивов.
Основные архитектурные решения
- Стабильные ссылки: Поскольку память никогда не перемещается, ссылки на элементы остаются валидными даже после добавления новых данных в массив.
- Отсутствие кучи: Программа использует нативный стек вызовов, статические данные и специализированные стеки данных, что исключает накладные расходы на аллокации.
- Автоматический вывод времени жизни: Компилятор самостоятельно определяет границы жизни объектов, избавляя разработчика от необходимости писать аннотации, при этом строго контролируя безопасность доступа.
- Компактные структуры: Типы данных, включая строки и вложенные записи, хранятся последовательно и упаковано, без использования косвенной адресации.
Для реализации полиморфизма в Goose используются алгебраические типы данных (ADT). Они позволяют выбирать способ хранения: фиксированный размер для быстрого доступа по индексу или переменный размер для экономии памяти. Также язык поддерживает использование относительных ссылок, что позволяет создавать сложные структуры данных, такие как бинарные деревья, внутри одного массива с минимальными затратами памяти.
Goose ориентирован на разработчиков, знакомых с синтаксисом C и Rust, предлагая им инструмент, где высокая производительность достигается за счет строгой структуры данных и предсказуемого поведения памяти на этапе компиляции.
Источник: aardappel.github.io