После трех лет разработки я выпустил Умку 1.0, статически типизированный скриптовый язык, предназначенный для встраивания в хост-приложения C/C++. Go вдохновил его синтаксис и некоторые ключевые функции. Однако Umka не полагается на экосистему Go и для работы ему нужна только стандартная библиотека C.

Умка теперь используется для написания сценариев в Tophat, простой модульной 2D-игровой среде от Марека Машкаринца. Несколько мини-игр были написаны на Tophat в качестве вклада в геймджемы. Сейчас сообщество Tophat разрабатывает два больших игровых проекта: платформер-головоломку и игру про диспетчера железной дороги.

Язык

Первый вопрос, на который я всегда должен ответить, представляя Umka, — зачем нам нужен еще один язык, если у нас уже есть Lua, самый популярный встраиваемый язык сценариев.

Основное отличие заключается в статической типизации Umka, которая дает ряд преимуществ:

  • Обнаружение ошибок несоответствия типов во время компиляции
  • Более понятный дизайн программы благодаря явно заданным типам аргументов и результатов функции.
  • Встроенная поддержка типов данных C, таких как массивы и структуры.

Первое преимущество хорошо известно и навеяло настолько красивую метафору, что автор Lua включил ее в свой доклад на конференции, хотя метафора не в пользу его детища:

Что касается третьего преимущества, меня все еще удивляют типы данных Lua. Несмотря на то, что это язык, специально разработанный для интеграции с C, Lua имеет типы данных (таблицы), совершенно чуждые системе типов C. Умка убирает эту несовместимость. Любой массив или структура в Umka автоматически становится допустимым массивом или структурой в C. Конечно, существует несколько тонкостей в использовании типов данных более высокого уровня Umka, не имеющих прямых аналогов в C, таких как динамические массивы или карты.

Другие преимущества Умки носят более субъективный или эстетический характер. Мне нравится лаконичность Go, его концепция приема методов, которая устраняет необходимость в классах, и его полиморфизм на основе интерфейса. Все эти личные вкусы сформировали дизайн Умки. Тем не менее, Умка не Го ни по своему назначению, ни по синтаксису, ни по семантике. Он никогда не стремился быть совместимым с Go ни в каком смысле.

Концепция Умки в целом осталась прежней, начиная с версии 0.1. Некоторые новые функции языка включают карты как встроенный тип и цикл «for…in». Много ресурсов было потрачено на улучшение и отладку сборщика мусора. API теперь позволяет получить доступ к типам данных более высокого уровня Umka и к его диспетчеру памяти из C. Источники Umka могут быть предоставлены в виде отдельных файлов или текстовых строк.

Интерпретатор может искать реализации функций во внешних динамических библиотеках, что упрощает разработку языковых расширений и привязок сторонних библиотек. Стандартная библиотека Umka теперь предлагает базовую поддержку UTF-8 и трехмерной векторной/матричной алгебры. С Умкой можно поэкспериментировать на онлайн-площадке (и даже найти языковой баг, если повезет!).

Игровая структура

Tophat — это простой кроссплатформенный модульный фреймворк, предназначенный для написания 2D-игр на Умке. Tophat 1.0 предлагает все основные функции для графики (включая спрайты, анимацию, частицы, пользовательский интерфейс и шрифты), звуков и музыки, а также управления клавиатурой и мышью. Он также имеет функции обнаружения столкновений и возможности планирования 2D-пути, а также импорт/экспорт CSV.

Tophat распространяется в виде отдельного исполняемого файла для Windows или Linux, включая все необходимые низкоуровневые библиотеки, интерпретатор Umka и модули Tophat, написанные на Umka. Он не имеет внешних зависимостей.

Среди примеров мини-проектов, распространяемых вместе с Tophat, — космический шутер, платформер, тетрис, игра в стиле Flappy Bird и приложение-таймер Pomodoro (некоторые из них были созданы Святославом Шатуновым, также известным как Ske, который также участвовал в Tophat). .

Инструменты

Марек Машкаринец создал UmProf, профайлер для программ Umka. Он выводит результаты профилирования в файл JSON, который можно визуализировать с помощью Spall. Интерпретатор Umka поддерживает профилирование, позволяя пользователю устанавливать ловушки отладки, то есть обратные вызовы для каждого вызова функции и события возврата. UmProf интегрирован в Tophat.

Вот пример профилирования, который ясно показывает, что около половины времени рендеринга кадра в этой конкретной игре на основе Tophat тратится на сортировку графических объектов по их глубине:

Марек также работает над визуальным редактором свойств с поддержкой JSON. Эта утилита все еще находится на ранней стадии разработки и поэтому не была включена в выпуск Tophat 1.0.

Игры

Я знаю как минимум два крупных игровых проекта, активно разрабатываемых сообществом Umka/Tophat. Святослав Шатунов уже около года работает над платформером-головоломкой SaveScum.

Ключевая идея заключается в том, что «сохранение» и «загрузка» игры — это принцип игровой механики, а не просто вопрос удобства для игрока. Святослав также сделал для своей игры редактор уровней на основе Tophat:

Тем временем Марек Машкаринец разрабатывает собственный проект — игру про железнодорожных диспетчеров. Хотя репозиторий игры еще не обнародован, вы можете посмотреть логи разработки на сайте автора.

Также Марек участвует в геймджемах со своими мини-играми в стиле ретро и ведет Дискорд-канал, где можно обсудить Умку, Тофата и игры.

Ссылки для скачивания