GDSL: Как игровые движки обзаводятся своими языками программирования
Зачем нужны языки под конкретную задачу
Помните, как в детстве вам дали瑞士军刀 и сказали «вот, пользуйся». Им действительно можно было сделать почти всё — открыть бутылку, закрутить болт, порезать яблоко. Но попробуйте-ка им нормально строгать дерево. Философия «один инструмент для всего» работает, пока задачи не становятся серьёзными.
В мире разработки происходит похожее. Универсальные языки вроде Python или JavaScript — это те самые швейцарские ножи. Способны на многое. Но когда дело доходит до узкой специализации, начинается боль: boilerplate-код, обходные решения, костыли на костылях.
DSL: когда меньше — это больше
На этом фоне растёт интерес к доменно-ориентированным языкам. DSL (domain-specific language) — это не очередной «убийца Python». Это компактный инструмент, заточенный под одну конкретную задачу.
Прелесть подхода в том, что язык не пытается быть всем. Он делает одну вещь — и делает её блестяще.
GDSL (Golden Domain Specific Language) — яркий представитель этой философии. Началось всё скромно: разработчики игрового движка «Golden» столкнулись с необходимостью описывать поведение кнопок. Вместо того чтобы писать очередной слой абстракции на общем языке, они создали мини-язык. Название сохранило эту историю: «Golden» — от движка, «Domain Specific» — от назначения.
Потом задач стало больше. Появились новые абстракции, которые удобнее выражать в рамках уже существующей парадигмы. Так скромный компилятор для кнопок постепенно вырос в нечто более существенное.
Преимущества узкой специализации
Почему вообще стоит заморачиваться с отдельным языком? Три причины:
Синтаксис под задачу. Представьте SQL для работы с данными. На общем языке запрос к базе выглядел бы громоздко. В SQL — одна строка. GDSL работает по той же логике, только для своей области.
Встроенные абстракции. Вместо того чтобы каждый раз писать шаблонный код, вы получаете концепции языка. То, что в универсальном языке требует библиотек и конфигурации, здесь идёт из коробки.
Быстрый вход. Новый разработчик, приходящий в проект, видит знакомые концепции. Не нужно изучать дюжину фреймворков — достаточно освоить сам язык.
Из чего состоит GDSL
Экосистема GDSL модульная. Судя по публично доступной информации, туда входят:
- Acorn и Core — базовое окружение, на котором всё работает
- Compiler — транслирует код в исполняемую форму
- Language — непосредственно синтаксис и правила, с которыми имеет дело программист
- Webcorn и TwigSnap — дополнительные модули, вероятно для веб-интеграции и отладки
Модульный подход — стандарт для современных DSL. Не всем проектам нужна вся экосистема. Берёшь только то, что решает твою проблему, и не тащишь лишнее.
Двойной смысл
Забавно, что в названии «Domain Specific Language» слово «domain» играет сразу в двух плоскостях. С одной стороны — problem domain, область задач, для которой язык создан. С другой — internet domain, веб-адрес. GDSL как бы подмигивает: да, мы про домены в обоих смыслах.
Такая игра слов — фирменный стиль многих open-source проектов. «Golden» добавляет теплоты и запоминаемости. Сухие технические названия забываются на следующий день. А вот проект с характером остаётся в голове.
Что это значит для вас
GDSL как проект — отдельная история. Подходит ли он для вашего конкретного случая — решать вам. Но сама идеология purpose-built языков заслуживает внимания.
Начинайте с малого. GDSL начался с одной проблемы — обработки поведения кнопок. Не нужно сразу проектировать универсальную систему. Решайте реальную задачу, а масштабирование придёт естественным путём.
Узкая специализация — это сила. Огромные монолитные фреймворки пугают. Компактные инструменты, которые делают одну вещь отлично, находят свою аудиторию.
Имя создаёт сообщество. Запоминающееся название — это не vanity. Это фундамент для комьюнити, которое будет вокруг проекта расти.
Работали с DSL в своих проектах? Расскажите — интересно, какие специализированные инструменты оказались полезными, а какие — нет.