Кусок из поста, который ввел меня в заблуждение
>> Это расширение называется FFI
Это не расширение так называется, которое позволяет делать быстрые malloc, а технология написания расширений. В том числе и вот того, которое в статье приведено.
У вас есть пример Рейтрейсера на JS + два примера на Lua. К примеру, я бы зашёл и обнаружил, что вы пошли очень неоптимальным путём в JS и повысил бы скорость с 20к до 50к, потом кто-то бы добавил код на Java, которая выдает 60к и т.д.
В конце концов, если это просто простой пример рейтрейсера, то зачем его вообще делать? ;)
Чем вы довольны? Тем, что в Lua оказались серьезные проблемы с массивами/аллокацией, которых удается избежать даже в джаваскрипте, при том, что в последнем внешне массивы устроены также (массив — одновременно hash)? И что эти проблемы лечатся только низкоуровневыми хаками?
Вообще крайней странная идея совмещать вектор и хэш, зачем это надо было — неизвестно, а к чему приводит — вот, хорошо видно.
Lua даже не знает, что индексы массива — числа в диапазоне 1..n, а значения — целые числа, поэтому ему приходится рассчитывать на худший вариант когда однажды в массив запишут вот так:
a['qqq'] = {red = 1, green = 0.5, blue = 0.8}
Это, мягко говоря, неверно. В реализации таблиц в Луа есть оптимизация для поддержки массивов с целочисленными ключами. С этим там хорошо и быстро.
Lua+FFI vs. JavaScript