Эффективный пользовательский тип данных в Lua - PullRequest
1 голос
/ 25 апреля 2011

Мне нужна двумерная векторная структура данных для использования в Lua.До сих пор я нашел несколько решений этой проблемы:

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

Я пробовал подход № 1 и из-за проблем с эффективностью планируюперейти к # 2 или # 3, однако я не знаю, какой из них будет более эффективным.

С другой стороны, есть также возможность жестко закодировать тип данных в самом компиляторе, но я недумаю, что я уже готов к таким радикальным идеям :) (это не так безумно, как кажется, 2-мерный вектор прекрасно вписался бы в двойной размер нативного типа Lua).

Какой из двухметоды будут более эффективными?Есть ли в этих случаях питфалы, о которых я не думал?

1 Ответ

3 голосов
/ 25 апреля 2011

Вариант № 4: использовать LuaJIT2 с FFI

См. связанные работы

...