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
- Потребление памяти уменьшилось.
Тесты
Проверить и сравнить производительность можно по ссылкам ниже (так же указан результат тестов на одном и том же десктопном железе и в одном и том же размере окна):
Znak Nimlang-версия выдает 110к спрайтов (размер
160кб
).Znak Golang-версия выдает 60к спрайтов (размер
1Мб
)Defold-аналог выдает 20к спрайтов (размер
1.4Мб
)Ebiten-аналог выдает 9к спрайтов (размер
9.57Мб
)