Здравствуйте, D. Mon, Вы писали:
EP>>Как я понял — там распаковка растрового изображения. Например как там представлено изображение — безликий массив скаляров или матрица пикселей? Какие массивы используются — "статически типизированные" или нет?
DM>Все на типизированных массивах. Картинка — массив байт.
DM>Исходники теста тут:
DM>http://data.infognition.com/spbench/haxe_asmjs_src.zip
1. Там ведь разный код — например в C++ версии пиксель это не очень удобные 3 байта, в версии Haxe — пиксель это Int32.
В C++ версии переход на следующий пиксель это (могло быть замыканием, кстати):
#define GO_NEXT_PIXEL lasti = i; \
x++; i += 3; \
if (x>=X) { \
x = 0; y++; \
i = y*stride; \
}
А в Haxe это просто
di++ плюс иногда
lasti = di — 1.
2. Код действительно очень низкого уровня — там фактически ручная нарезка на структуры, ручной инлайнинг и т.п. То есть это не "простой JS", а полностью вручную оптимизированный.
При этом в C++ версии можно подняться на более высокий уровень, ничего при этом не потеряв в скорости. Если же поднимать уровень в JS — то будут неизбежные тормоза.