为什么需要这种优化呢?
他们正在本地重新声明sin函数。For instance, the code
for i = 1, 1000000 do local x = math.sin(i) end
runs 30% slower than this one:
local sin = math.sin for i = 1, 1000000 do local x = sin(i) end
为什么这样做有帮助呢?这本来就是编译器的工作。为什么程序员要做编译器的工作?
我在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 没有进行性能分析的能力。
- 因此 Lua 不应该被优化。