2011-04-25 51 views
1

我需要一個類似於2d向量的數據結構以用於Lua。到目前爲止,我已經找到了幾種解決方案,這一問題:Lua中的高效自定義數據類型

  1. 定義在純Lua中數據類型的經典解決方案 - 缺點是,它(如加法)所有操作需要創建一個新的數據類型,設置元表等等,x,y被存儲爲字段,因此具有快速訪問。
  2. C端的經典完整用戶數據解決方案 - 它可能更快,仍然允許操作員,操作代碼是C端,但仍然需要每個操作都分配一個新對象。雖然沒有字段的可能性,所以需要自定義__index/newindex函數來模擬x和y在Lua方面可能會很慢。
  3. 混合的方法,我們定義一個Lua對象,但通過C代碼,x和y仍然是簡單訪問的字段,但函數會用C編碼,因此速度更快?

我確實嘗試了第一種方法,並且由於效率問題,我計劃搬遷到#2或#3,但是我不知道哪一個會更有效率。

另一方面,也有可能在編譯器本身中對數據類型進行硬編碼,但我認爲我還沒有準備好如此激烈的想法:)(這並不像聽起來那麼瘋狂, 2d矢量將非常適合原生Lua類型的雙倍大小)。

這兩種方法哪一種會更高效?在這些情況下,我有沒有想過的任何瑕疵?

+3

你** **知道1號是太慢? – delnan 2011-04-25 15:01:34

+0

@delnan,我知道優化Lua的兩條黃金法則;)。另外,遠離#1也會受到其他原因的限制(從C級部署結構等)。 – 2011-04-25 15:21:28

+2

你可以把你的#1實現的地方?也許這不是最理想的。 – kikito 2011-04-25 17:53:28

回答

3

第4個選項:使用LuaJIT2FFI

related work

+0

+1:哇,雖然它不是我可以使用的LuaJIT(並不是所有的目標架構都支持),但這確實是一個非常有趣的鏈接,謝謝! – 2011-04-25 23:57:53