Я просматриваю код сценария document that describes various techniques to improve performance of Lua, и я шокирован тем, что такие трюки потребуются. (Хотя я цитирую Lua, я видел похожие хаки в Javascript).Почему этот оптимизационный оптимизатор Lua улучшает производительность?
Почему это оптимизация требуется:
Например, код
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
Они повторно -declaring 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 не должно быть оптимизирован
У Lua нет возможности быть профилированным? Как насчет таких инструментов, как http://luaprofiler.luaforge.net/? –
Любой язык имеет компромисс между его предпочтительным стилем и производительностью. Луа не является исключением. – RBerteig
@ Zack Человек Нет, я имею в виду ** Lua ** не имеет возможности быть профилированным. У меня нет доступа к компилятору, исполняемому файлу или используемому хост-процессу. У меня есть доступ к файлам, где я пишу или включаю код Lua. –