Lua で使用するための 2D ベクトルのようなデータ構造が必要です。これまでのところ、この問題に対するいくつかの解決策を見つけました。
- 純粋な Lua でデータ型を定義する従来のソリューション - 欠点は、すべての操作 (加算など) で新しいデータ型を作成し、メタテーブルを設定する必要があることです。x、y はフィールドとして格納されるため、高速にアクセスできます。
- C 側の古典的な完全なユーザーデータ ソリューション -- より高速である可能性があり、演算子を使用できます。操作コードは C 側ですが、すべての操作で新しいオブジェクトの割り当てを行う必要があります。ただし、フィールドの可能性はないため、カスタム __index/newindex 関数を実行して x と y をシミュレートする必要があります。これは Lua 側で遅くなる可能性があります。
- Lua オブジェクトを定義するが C コードを使用するハイブリッド アプローチでは、x と y は簡単にアクセスできるフィールドのままですが、関数は C でコーディングされるため、高速になりますか?
私は #1 のアプローチを試しましたが、効率の問題があるため、#2 または #3 に移行する予定ですが、どちらがより効率的かはわかりません。
反対側には、コンパイラ自体でデータ型をハードコードする可能性もありますが、私はまだそのような抜本的なアイデアの準備ができているとは思いません:) (これは思ったほどクレイジーではありません。ネイティブ Lua タイプの 2 倍のサイズに収まります)。
2 つの方法のうち、どちらがより効率的でしょうか? これらの場合、私が考えていなかった落とし穴はありますか?