Por que esse hack da otimização Lua melhoraria o desempenho?

Estou olhando por cima de umdocumento que descreve várias técnicas para melhorar o desempenho de Lua código de script e estou chocado que esses truques seriam necessários. (Embora eu esteja citando Lua, vi hacks semelhantes em Javascript).

Por que essa otimização seria necessária:

Por exemplo, o código

for i = 1, 1000000 do 
   local x = math.sin(i) 
end

corre 30% mais lento que este:

local sin = math.sin 
for i = 1, 1000000 do
    local x = sin(i) 
end

Eles estão re-declarandosin função localmente.

Por que isso seria útil? É o trabalho do compilador fazer isso de qualquer maneira. Por que o programador precisa executar o trabalho do compilador?

Eu já vi coisas semelhantes em Javascript; e então, obviamente, deve haver umamuito boa razão pela qual o compilador de interpretação não está fazendo seu trabalho. O que é isso?

Eu o vejo repetidamente no ambiente de Lua em que estou brincando; pessoas que declaram variáveis como locais:

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

O que está acontecendo aqui que as pessoas têm para fazer o trabalho do compilador? O compilador está confuso sobre como encontrarformat? Por que esse é um problema que um programador precisa lidar? Por que isso não teria sido resolvido em 1993?

Também pareço ter atingido um paradoxo lógico:

A otimização não deve ser feita sem criação de perfilLua não tem capacidade de ser perfiladaLua não deve ser otimizada

questionAnswers(6)

yourAnswerToTheQuestion