Znak - перенос 2D движка на Nimlang

Golang всем неплох, пока не потребуется работать с C/C++-библиотеками и компиляцией под wasm. В результате Znak был портирован на Nimlang.

Nimlang - это язык, синтаксически похожий на python, транслирующийся в C и собирающийся GCC, Clang и т.п компиляторами. Под wasm он (как и unity) позволяет собирать код с помощью emscripten, что дает возможность использовать любой C/C++-код через небольшие обертки.

Изменения:

  • Убраны все .lib/.a предсобранные библиотеки, весь проект теперь собирается из исходников (первая сборка 8-10сек, повторная сборка 3-4сек).
  • Шрифты больше не запекаются в атласы в офлайне, а пекутся на лету в нужный размер и с нужным списком глифов.
  • Сжатие бандлов изменилось с gzip на zstd.
  • Конечный размер бинарников сильно уменьшился: десктопный билд под upx занимает 570кб против 1.7мб на golang, wasm-билд занимает 160кб+75кб js против 1Мб+17кб на golang
  • Потребление памяти уменьшилось.

Тесты

Проверить и сравнить производительность можно по ссылкам ниже (так же указан результат тестов на одном и том же десктопном железе и в одном и том же размере окна):