Luaスクリプトコードのパフォーマンスを向上させるためのさまざまなテクニックを説明しているドキュメントを探していますが、そのようなトリックが必要になることにショックを受けました。(私はLuaを引用していますが、Javascriptで同様のハッキングを見てきました)。
この最適化が必要な理由:
たとえば、コード
for i = 1, 1000000 do local x = math.sin(i) end
これよりも30%遅く実行されます:
local sin = math.sin for i = 1, 1000000 do local x = sin(i) end
sin
それらはローカルで関数を再宣言しています。
なぜこれが役立つのでしょうか?とにかくそれを行うのはコンパイラの仕事です。なぜプログラマーはコンパイラーの仕事をしなければならないのですか?
私はJavascriptで同様のことを見てきました。したがって、明らかに、解釈コンパイラがその仕事をしていないという非常に正当な理由があるに違いありません。それは何ですか?
私がいじっているLua環境でそれを繰り返し見ます。変数をローカルとして再宣言する人々:
local strfind = strfind
local strlen = strlen
local gsub = gsub
local pairs = pairs
local ipairs = ipairs
local type = type
local tinsert = tinsert
local tremove = tremove
local unpack = unpack
local max = max
local min = min
local floor = floor
local ceil = ceil
local loadstring = loadstring
local tostring = tostring
local setmetatable = setmetatable
local getmetatable = getmetatable
local format = format
local sin = math.sin
人々がコンパイラの仕事をしなければならないということは、ここで何が起こっているのでしょうか?コンパイラは検索方法に混乱していますformat
か?なぜこれはプログラマーが対処しなければならない問題なのですか?なぜこれは1993年に処理されなかったのでしょうか?
私も論理的なパラドックスにぶつかったようです。
- プロファイリングなしで最適化を行うべきではありません
- ルアにはプロファイリングする能力がありません
- Luaは最適化されるべきではありません