Parin: 2D-движок на языке D между raylib и Godot показали на Show HN

Parin, 2D-игровой движок для языка программирования D. В README проекта (репозиторий Kapendev/parin на GitHub, ссылка пошла на Show HN) он назван «восхитительно простым»: его легко настроить, он поддаётся доработке, а самое необходимое уже встроено. Главное позиционирование: Parin находится где-то между небольшой библиотекой вроде raylib и большим движком вроде Godot, даёт больше направления, чем маленькие библиотеки, но заметно меньше накладных расходов, чем большие движки.
Основные идеи, по словам README: код-ориентированный дизайн (движок не навязывает архитектуру, игровой код можно строить как удобно); гибкая абстракция (сборка мусора доступна для удобства, но можно перейти на ручное управление памятью или вовсе обойтись без неё); модульная основа (большая часть Parin построена на Joka, переносимой служебной библиотеке, которую можно использовать отдельно); «батарейки в комплекте», разумные настройки по умолчанию для типовых задач вроде анимации, таймеров и поиска пути.
Список возможностей: пиксельно точный физический движок, гибкая система диалогов, библиотека анимации на основе атласов, эффективные структуры для тайловых карт, простая библиотека интерфейса (помечена как WIP, в разработке). Среди дополнений названы Box2D, Steamworks, ENet и microui. Поддерживаются Web, Windows, Linux и macOS. Для Steamworks и ENet в parin.bindings есть привязки, но сами бинарные файлы не входят в состав: их нужно скачать или собрать и подключить отдельно.
Базовый пример в README короткий: функция вызывается каждый кадр, фиксирует разрешение lockResolution(320, 180), рисует текст «Helloo!!!» у курсора мыши, а mixin runDemo создаёт функцию main. Установка идёт через DUB: в пустой папке выполняются команды dub init -t parin и dub run; если всё настроено верно, появится окно с простым сообщением. Доступны стартовые шаблоны basic и entity. Есть и вариант без DUB, клонировать репозиторий и запустить скрипты prepare и run. На Linux до начала работы нужны системные библиотеки для звука, графики и ввода; в README приведены команды для Ubuntu, Fedora, Arch и Void.
Сборка для веба требует LDC и Emscripten (рекомендуется версия 4.0.23), а в папку LDC нужно распаковать архив ldc2-X.Y.Z-addon-emscripten.tar.xz. Запускается она командой dub run parin:web (есть флаги -betterc, -release, -build и возможность подключить дополнительные библиотеки). Для публикации на itch.io результат упаковывают в ZIP, выбирают тип проекта HTML и включают запуск файла в браузере.
Из ограничений: горячая перезагрузка кода из коробки не поддерживается, автор, подписанный в README как Kapendev, пишет, что эта функция ему не интересна, и советует посмотреть на библиотеки arsd. В целом идеи и предложения приветствуются, кроме горячей перезагрузки. Raylib, один из бэкендов Parin; собственный бэкенд в работе, но пока экспериментальный, помощь приветствуется. Небольшие дополнения, не подходящие для ядра, можно добавлять через PR в папку addons как однофайловые библиотеки на D. В README также перечислены шесть игр-примеров (среди них Twenty Seconds, Twenty Steps и Worms Within), сайт с документацией на DDOX, папка с примерами и шпаргалка.
Ключевые факты
- Parin, 2D-движок для языка D; по README, он находится между небольшой библиотекой вроде raylib и большим движком вроде Godot.
- Из коробки: пиксельно точная физика, система диалогов, анимация на атласах, тайловые карты, простой UI (WIP), дополнения Box2D, Steamworks, ENet и microui.
- Платформы: Web, Windows, Linux и macOS; установка через DUB командами dub init -t parin и dub run, для веба нужны LDC и Emscripten (рекомендуется 4.0.23).
- Сборка мусора доступна для удобства, но можно перейти на ручное управление памятью или обойтись без неё.
- Горячая перезагрузка не поддерживается, а raylib, лишь один из бэкендов; собственный бэкенд пока экспериментальный.
Почему это важно
Для языка D игровых инструментов немного, и Parin пытается занять нишу между минималистичной библиотекой и полноценным движком. По описанию README, он даёт готовую структуру и набор типовых модулей, но не навязывает архитектуру. Это небольшой проект с открытым кодом, а не событие отрасли.
Кому это важно
Прежде всего тем, кто пишет на D и хочет делать 2D-игры, а также тем, кому raylib кажется слишком голым, а Godot, слишком тяжёлым. Для остальных это скорее любопытный пример компактного движка, построенного вокруг одного языка.
Как это применить
Создайте пустую папку и выполните dub init -t parin, затем dub run, появится окно с простым сообщением. Для старта доступны шаблоны basic и entity, а также папка examples и шпаргалка. На Linux заранее установите системные библиотеки для звука, графики и ввода. Для публикации в браузере понадобятся LDC и Emscripten, а готовую веб-сборку можно загрузить на itch.io как HTML-проект. Лицензия самого Parin и цены в разобранном тексте не названы.
Можно ли доверять
Все сведения взяты из README самого проекта, то есть это самоописание автора, а не независимая оценка. Ни бенчмарков, ни сравнений с raylib или Godot, кроме заявления о позиционировании, там нет; данных об использовании и числе пользователей тоже нет. Утверждения про простоту и «минимальные накладные расходы» стоит проверять на практике.
Риски и подводные камни
Часть модулей помечена как незавершённая (простая библиотека интерфейса, WIP), а собственный бэкенд экспериментальный; пока основной путь, через raylib. Горячей перезагрузки нет, и автор не планирует её добавлять. Привязки Steamworks и ENet не включают сами бинарные файлы, их придётся скачивать или собирать отдельно. Для веба обязательны LDC и Emscripten определённых версий, а в README есть общая оговорка проверять соответствующий README на предмет лицензионных замечаний, но к чему именно она относится, из текста неясно.
«Parin находится где-то между небольшой библиотекой вроде raylib и большим движком вроде Godot.»
— README проекта Parin