我正在查看一个文档,该文档描述了提高 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 没有能力被剖析
- Lua 不应该被优化