2011-02-06 15 views
48

EDITAR: lamentablemente LuaJIT fue sacado de la comparación en el siguiente enlace.¿Por qué LuaJIT es tan bueno?

Este comparison de lenguajes de programación muestra que tiene un LuaJIT más de diez veces mejora con respecto a la ejecución normal de Lua. ¿Por qué el cambio es tan grande? ¿Hay algo específico acerca de Lua que hace que se beneficie mucho de la compilación de JIT? Python se escribe de forma dinámica y se compila a bytecode así, ¿por qué no se PyPy (JIT que tiene ahora, creo) mostrará un gran salto en el rendimiento de tales?

+33

la respuesta simple: Mike Paul es un dios :) – Necrolis

Respuesta

56

Mike Pall ha hablado de esto en unos pocos lugares:

Al igual que con todos los sistemas performant, la respuesta al final se reduce a dos cosas: algoritmos e ingeniería. LuaJIT usa técnicas avanzadas de compilación, y también tiene una implementación muy finamente diseñada. Por ejemplo, cuando las sofisticadas técnicas de compilación no pueden manejar un fragmento de código, LuaJIT recurre a un intérprete muy rápido escrito en ensamblaje x86.

LuaJIT obtiene el doble de puntos en el aspecto de ingeniería, porque LuaJIT no solo está bien diseñado, sino que el lenguaje Lua tiene un diseño más simple y más coherente que Python y JavaScript. Esto hace que sea (marginalmente) más fácil para una implementación proporcionar un buen rendimiento de manera consistente.

+20

LuaJIT es inequívocamente un buen ejemplo de excelentes algoritmos y excelente ingeniería. Si eso (o esto) se lee como texto de marketing es irrelevante. Los bucles de intérpretes codificados a mano en el ensamblaje son mucho más rápidos que la versión C del intérprete, son ejemplos de una buena ingeniería. El análisis de alias, el hundimiento de tiendas, el reenvío de carga, el etiquetado nanométrico, la asignación de registros y la combinación/salida eficiente de trazas son ejemplos de excelentes algoritmos (e ingeniería). – Eloff