Мне нужна двумерная векторная структура данных для использования в Lua.До сих пор я нашел несколько решений этой проблемы:
- Классическое решение определения типа данных в чистом Lua - недостатком является то, что все операции над ним (например, сложение) должны создавать новый тип данных, установите метатаблицы и т. д. x, y хранятся в виде полей и, следовательно, имеют быстрый доступ.
- Классическое решение для полных пользовательских данных на C-стороне - это может быть быстрее, но все еще позволяет операторам, код операции на C-стороне, но все же каждая операция должна делать выделение нового объекта.Тем не менее, нет возможности для полей, поэтому нужно было бы сделать специальную функцию __index / newindex для имитации x и y, что может быть медленным на стороне Lua.
- Гибридный подход, где мы определяем объект Lua, но черезКод C, x и y по-прежнему будут полями с простым доступом, но функции будут закодированы в C, следовательно, быстрее?
Я пробовал подход № 1 и из-за проблем с эффективностью планируюперейти к # 2 или # 3, однако я не знаю, какой из них будет более эффективным.
С другой стороны, есть также возможность жестко закодировать тип данных в самом компиляторе, но я недумаю, что я уже готов к таким радикальным идеям :) (это не так безумно, как кажется, 2-мерный вектор прекрасно вписался бы в двойной размер нативного типа Lua).
Какой из двухметоды будут более эффективными?Есть ли в этих случаях питфалы, о которых я не думал?