ほとんどの時間を Lua で費やしている場合、Lua で実装されたプロセッサ集約型の関数は、C で実装された関数よりも効率的である可能性が非常に高くなります。これは、将来的にLuaJITを使用することになった場合に特に当てはまります。コンパイラは、関数が言語内にある場合、それが何も知らないあいまいな C 関数である場合よりも、関数から常により多くの情報を推測することができ、さまざまなコンテキストを飛び回る必要はありません。
Cで実装する際の問題は、Lua が既にそのような機能を備えている C でZ_
実装する必要があることです。dict
したがって、特別に最適化されたハッシュマップが必要かどうかによって異なりますが、おそらく C の方が優れているでしょう。
関数呼び出しの効率が気になる場合は、結果をキャッシュするだけではどうですか?
-- instead of doing:
print(Z_('Hello world! My name is %1!', 'Lua'))
-- perhaps do this:
local greeting = Z_('Hello world! My name is %1!', 'Lua')
print(greeting)
-- reuse greeting at some later time.
もちろん、あなたの関数はまだZ_
置換を必要としていないように見えますが、後でそうなるかもしれないと思います。ただし、置換がまったく必要ない場合は、次のような表にすることもできます。
local Z = setmetatable({}, {__index = function(t,k) return k end})
Z['greetings'] = 'Hello world!'
print(Z['greetings']) -- Hello world!
print(Z['goodbye']) -- goodbye
このテーブルには、__index
テーブルにそのようなエントリがない場合、使用されたキーを返すメタメソッドがあります。