Lua中高效的自定义数据类型



我需要在Lua中使用2d向量式数据结构。到目前为止,我已经找到了几个解决这个问题的方法:

  1. 在纯Lua中定义数据类型的经典解决方案——缺点是对它的所有操作(如加法)都需要创建一个新的数据类型,设置元表等x, y被存储为字段,因此具有快速访问。
  2. 经典的C端完整用户数据解决方案——它可能更快,仍然允许操作符,操作代码是C端,但每个操作仍然需要做一个新对象的分配。但是没有字段的可能性,所以需要做一个自定义的__index/newindex函数来模拟x和y,这在Lua端可能会很慢。
  3. 混合方法,我们定义一个Lua对象,但通过C代码,x和y仍然是简单访问的字段,但函数将在C中编码,因此更快?

我确实尝试了#1方法,由于效率问题,我计划转向#2或#3,但我不知道哪种方法更有效。

在另一方面,也有可能在编译器本身硬编码数据类型,但我认为我还没有准备好接受这种极端的想法:)(这并不像听起来那么疯狂,2d矢量将很好地适应原生Lua类型的两倍大小)。

两种方法中哪一种更有效?在这些情况下,还有什么我没有想到的陷阱吗?

选项#4:使用LuaJIT2与FFI

参见相关工作

最新更新