Добро пожаловать в Логово Силвервинга



Обновление: Выбор среды исполнения

Как и обещал, попытался поэкспериментировать с разными средами исполнения для нового движка. Архив содержит:

  • Исходный код реализации алгоритма поиска пути на C, Lua и Pawn
  • Скомпилированный из кода Pawn, amx исполняемый файл (размер ячейки 32 бита)
  • Скомпилированное из кода C, Windows приложение (Mingw-64-10.0.0 и GCC 12, CRT и приложение собраны для процессора i486)
  • Скомпилированные среды выполнения amx, lua 5.4 и lua 5.5 (Mingw-64-10.0.0 и GCC 12, CRT и приложение собраны для процессора i486)

WASM

Существующие среды выполнения или слишком сложны и написаны на плохо-переносимых языках или требуют модификации для переносимости (слишком строго привязаны к версиям ОС). Из активно поддерживаемых и на первый взгляд подходящих моим требованиям я выделил две реализации:

  • WASM3, однако мне не удалось запустить его на Windows XP и более ранних версиях из-за использования некоторых новых API функций
  • WAMR, но его я вообще не смог скомпилировать для Windows из GNU/Linux, так что и потестировать не получилось

Компиляция с использованием существующих инструментов невозможна на большинстве платформ -- вам потребуется довольно свежая версия Windows или GNU/Linux для этого, что существенно сократит возможности по разработке игр.

Тратить время на решение этих проблем не вижу смысла из-за большого количества неизвестных и общей сложности платформы (что может быть проблемой при переносе).

Pawn

  • Компиляция и запуск потребовали некоторых усилий (некоторые вещи привязаны к платформе по-умолчанию, однако могут изменяться настройками компиляции; Мы оптимизируем под 32-разрядные системы, поэтому и размер ячейки выбрали 32 бита), однако среда выполнения легковесна и сходу работает без проблем на Windows 95 (есть поддержка и 16-разрядных версий Windows!)
  • Есть встроенная поддержка арифметики с фиксированной точкой. Это не критично, поскольку может быть легко реализовано и на Lua
  • В целом язык весьма минималистичен:
    • Обработка строк сделана в стиле C, что... проблемно для написания игр на языке. По сути в языке нет встроенных способов сложной работы со строками
    • Массивы только фиксированного размера (во время компиляции) -- это критично для использования Pawn в нашем проекте. Однако это должно быть реализуемо на ассемблере AMX
    • Нет ООП -- разработка полноразмерной игры будет очень болезненной.

Производительность

Я получил вот такие результаты на 86Box (5.3, сборка 8253 old dynarec; Windows 95 OEM, Pentium 133, ASUS P/I-P55TP4XE больше деталей (PNG)). Все числа в секундах:

C: 23.5
Pawn: 694.3
Lua 5.4: 405.1
Lua 5.5: 401.9

И такие на реальном железе (Windows 98 SE; Pentium MMX 233, Via MVP3, 256 MB RAM). Все числа в секундах:

C: 36.0
Pawn: 482.5
Lua 5.4: 270.8
Lua 5.5: 258.4

C здесь представлен только для сравнения "мы не сможем быть быстрее чем это" (разве что оптимизируя код). И Lua явно выигрывает, поэтому остается нашим выбором. Во время разработки движка мы будем продолжать проверять новые версии Lua и обновляться до них если это будет давать преимущества.

Я дополню оригинальную статью этой информацией.

Спасибо вам за прочтение, как всегда ждем ваших отзывов на почту. До новых встреч!