Estoy buscando un código de script document that describes various techniques to improve performance of Lua, y estoy sorprendido de que tales trucos sean necesarios. (Aunque estoy citando a Lua, he visto hacks similares en Javascript).¿Por qué esta optimización de Lua hack mejoraría el rendimiento?
Por qué se requeriría esta optimización:
Por ejemplo, el código
for i = 1, 1000000 do local x = math.sin(i) end
se ejecuta un 30% más lento que éste:
local sin = math.sin for i = 1, 1000000 do local x = sin(i) end
Son re -declaring sin
función localmente.
¿Por qué sería útil? Es el trabajo del compilador hacer eso de todos modos. ¿Por qué el programador tiene que hacer el trabajo del compilador?
He visto cosas similares en Javascript; y obviamente debe haber una muy buena razón por la cual el compilador de interpretación no está haciendo su trabajo. ¿Qué es?
Lo veo repetidamente en el entorno de Lua en el que me estoy metiendo; personas redeclasando variables como locales:
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
¿Qué está pasando aquí que la gente tiene que hacer el trabajo del compilador? ¿El compilador está confundido por cómo encontrar format
? ¿Por qué es este un problema que un programador tiene que tratar? ¿Por qué no se habría solucionado esto en 1993?
También parecen haber golpeado una paradoja lógica:
- optimización no debe hacerse sin perfilar
- Lua no tiene capacidad para ser perfilado
- Lua no debe ser optimizado
Lua no tiene posibilidad de ser perfilado? ¿Qué pasa con herramientas como http://luaprofiler.luaforge.net/? –
Cualquier idioma tiene intercambios entre su estilo preferido y el rendimiento. Lua no es una excepción. – RBerteig
@Zack The Human No, me refiero a ** Lua ** no tiene capacidad para ser perfilado. No tengo acceso al compilador, el tiempo de ejecución o el proceso de host que se está utilizando. Todo lo que tengo acceso son los archivos donde escribo o incluyo el código Lua. –