Sto esaminando un codice di script document that describes various techniques to improve performance of Lua e sono scioccato dal fatto che sarebbero necessari trucchi del genere. (Anche se sto citando Lua, ho visto simili hack in Javascript). Perché sarebbe necessarioPerché l'ottimizzazione dell'Lua ha migliorato le prestazioni?
questa ottimizzazione:
Per esempio, il codice
for i = 1, 1000000 do local x = math.sin(i) end
gestisce il 30% più lento di questo:
local sin = math.sin for i = 1, 1000000 do local x = sin(i) end
Sono re -declarare la funzione sin
localmente.
Perché questo sarebbe utile? È compito del compilatore farlo comunque. Perché il programmatore deve eseguire il lavoro del compilatore?
Ho visto cose simili in Javascript; e così ovviamente ci deve essere un buon motivo per cui il compilatore di interpretazioni non sta facendo il suo lavoro. Che cos'è?
Lo vedo ripetutamente nell'ambiente Lua in cui sto giocando; persone redeclaring variabili come locali:
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
Che cosa sta succedendo qui che le persone devono fare il lavoro del compilatore? Il compilatore è confuso da come trovare format
? Perché questo è un problema che un programmatore deve affrontare? Perché questo non sarebbe stato curato nel 1993?
Mi sembra anche di aver colpito un paradosso logico:
- ottimizzazione non dovrebbe essere fatto senza profilatura
- Lua non ha possibilità di essere profilato
- Lua non deve essere ottimizzato
Lua non ha la capacità di essere profilato? Che dire di strumenti come http://luaprofiler.luaforge.net/? –
Qualsiasi linguaggio ha una compensazione tra il suo stile preferito e le sue prestazioni. Lua non fa eccezione. – RBerteig
@Zack The Human No, voglio dire ** Lua ** non ha alcuna capacità di essere profilato. Non ho accesso al compilatore, al runtime o al processo host in uso. Tutto quello a cui ho accesso sono i file in cui scrivo, o includo, il codice Lua. –