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

Types Lua中高效的自定义数据类型,types,lua,lua-userdata,Types,Lua,Lua Userdata,我需要一个二维向量样的数据结构用于Lua。到目前为止,我已经找到了解决这个问题的几种方法: 在纯Lua中定义数据类型的经典解决方案——缺点是对其进行的所有操作(如添加)都需要创建新的数据类型、设置元表等。x、y存储为字段,因此具有快速访问能力 C端的经典完整用户数据解决方案——它可能更快,仍然允许运算符,操作代码是C端的,但仍然每个操作都需要分配一个新对象。但是没有字段的可能性,因此需要使用自定义的_index/newindex函数来模拟Lua端可能较慢的x和y 混合方法,即我们定义一个Lua对

我需要一个二维向量样的数据结构用于Lua。到目前为止,我已经找到了解决这个问题的几种方法:

  • 在纯Lua中定义数据类型的经典解决方案——缺点是对其进行的所有操作(如添加)都需要创建新的数据类型、设置元表等。x、y存储为字段,因此具有快速访问能力
  • C端的经典完整用户数据解决方案——它可能更快,仍然允许运算符,操作代码是C端的,但仍然每个操作都需要分配一个新对象。但是没有字段的可能性,因此需要使用自定义的_index/newindex函数来模拟Lua端可能较慢的x和y
  • 混合方法,即我们定义一个Lua对象,但通过C代码,x和y仍然是具有简单访问的字段,但函数将用C编码,因此速度更快
  • 我确实尝试过#1方法,由于效率问题,我计划换成#2或#3,但我不知道哪一种更有效

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

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

    选项4:与一起使用


    参见

    你知道吗?#1太慢了?@delnan,我知道优化Lua;)的两条黄金法则。此外,离开#1还受到其他原因(从C级部署结构等)的影响。能否将#1实现放在某个地方?LuaGems有一个数字数组和向量数据类型的配方,内置于C中,存储在
    userdata
    中。代码并没有那么复杂,大部分的复杂性是由于处理内务管理,能够将矩阵的行和列视为向量而不复制数据,等等。这是第16章,Lua的科学计算入门。可能值得一看。+1:哇,虽然它不是我可以使用的东西(不是所有的目标架构都支持),但这确实是一个非常有趣的链接,谢谢!