LuaJIT es un compilador e intérprete de trazabilidad justo a tiempo para el lenguaje de programación Lua .
Historia
El proyecto LuaJIT fue iniciado en 2005 por el desarrollador Mike Pall y publicado bajo la licencia de código abierto MIT. [ 4 ]
La segunda versión principal del compilador, la 2.0.0, presentó importantes mejoras de rendimiento. [ 5 ]
LuaJIT utiliza versiones continuas. Mike Pall, el creador y mantenedor, recomienda usar la última versión de la rama v2.1 y no cree en las versiones. [ 6 ]
Mike Pall renunció en 2015 y desde entonces solo ha realizado parches ocasionales para la futura versión 2.1. [ 7 ]
Usuarios destacados
- CERN , por su software de "próxima generación" Methodical Accelerator Design para describir y simular aceleradores de partículas [ 8 ].
- OpenResty , una bifurcación de nginx con scripts Lua [ 9 ]
- Neovim , un editor de texto basado en vim que permite el uso de Lua para complementos y configuración [ 10 ].
- Kong, una puerta de enlace API web [ 11 ]
- Cloudflare , que utiliza LuaJIT en su servicio de firewall de aplicaciones web [ 12 ]
Actuación
LuaJIT suele ser el entorno de ejecución de Lua más rápido. [ 13 ] LuaJIT también ha sido nombrado la implementación más rápida de un lenguaje de programación dinámico. [ 14 ] [ 15 ]
LuaJIT incluye una interfaz de funciones externas compatible con estructuras de datos de C. Se recomienda su uso para cálculos numéricos. [ 16 ]
Rastreo
LuaJIT es un compilador de trazado justo a tiempo . LuaJIT elige bucles y llamadas a funciones como puntos de anclaje de trazado para comenzar a registrar posibles rutas críticas . Las llamadas a funciones requerirán el doble de invocaciones para comenzar a registrar que un bucle. Una vez que LuaJIT comienza a registrar, todo el flujo de control, incluidos los saltos y las llamadas, se insertan en línea para formar un trazado lineal. Todas las instrucciones de bytecode ejecutadas se almacenan y se convierten incrementalmente en la representación intermedia estática de asignación única de LuaJIT . El compilador de trazado de LuaJIT a menudo es capaz de insertar en línea y eliminar despachos de orientación de objetos, operadores y modificaciones de tipo . [ 17 ]
Representación interna
LuaJIT utiliza dos tipos de representación interna. Se utiliza un código de bytes basado en pila para el intérprete , y una forma estática de asignación única para el compilador justo a tiempo. El compilador JIT suele modificar el código de bytes del intérprete, a menudo para iniciar la ejecución de un rastro compilado o para marcar un segmento de código de bytes que provoca demasiadas interrupciones del rastro. [ 15 ]
-- Bucle con sentencia iflocal x = 0para i = 1 , 1e4 hacer x = x + 11 si i % 10 == 0 entonces -- sentencia if x = x + 22 fin x = x + 33 fin---- TRACE 1 inicio Ex.lua:5 ---- TRACE 1 IR 0001 int SLOAD #2 CI 0002 > num SLOAD #1 T 0003 num ADD 0002 +11 0004 int MOD 0001 +10 0005 > int NE 0004 +0 0006 + num ADD 0003 +33 0007 + int ADD 0001 +1 0008 > int LE 0007 +10000 0009 ------ LOOP ------------ 0010 num ADD 0006 +11 0011 int MOD 0007 +10 0012 > int NE 0011 +0 0013 + num ADD 0010 +33 0014 + int ADD 0007 +1 0015 > int LE 0014 +10000 0016 int PHI 0007 0014 0017 num PHI 0006 0013 ---- TRACE 1 stop -> loop ---- TRACE 2 start 1/4 Ex.lua:8 ---- TRACE 2 IR 0001 num SLOAD #1 PI 0002 int SLOAD #2 PI 0003 num ADD 0001 +22 0004 num ADD 0003 +33 0005 int ADD 0002 +1 0006 > int LE 0005 +10000 0007 num CONV 0005 num.int ---- TRACE 2 stop -> 1Extensiones
LuaJIT añade varias extensiones a su implementación base, Lua 5.1, la mayoría de las cuales no rompen la compatibilidad. [ 18 ]
- "BitOp" para operaciones binarias en enteros sin signo de 32 bits (estas operaciones también son compiladas por el compilador justo a tiempo) [ 19 ]
- "CoCo", que permite que la VM sea totalmente reanudable en todos los contextos [ 20 ]
- Una interfaz de función externa [ 21 ]
- Código de bytes portátil (independientemente de la arquitectura, el tamaño de palabra o el orden de bytes, no de la versión) [ 18 ]
Referencias
- ↑ Etiquetas de LuaJIT
- ↑ "LuaJIT" . LuaJIT . Consultado el 25 de febrero de 2022 .
- ^ "LuaJIT/COPYRIGHT en v2.1 · LuaJIT/LuaJIT" . GitHub . 7 de enero de 2022.
- ↑ "El proyecto LuaJIT" . luajit.org . Consultado el 17 de junio de 2023 .
- ↑ Pall, Mike. "Re: [ ANN ] llvm-lua 1.0" . lua-users.org . Consultado el 25 de febrero de 2022 .
- ↑ "Estado del proyecto - Problema n.° 665 - LuaJIT/LuaJIT" . GitHub . Consultado el 3 de febrero de 2023 .
- ↑ " [ ANN ] Buscando nuevos mantenedores de LuaJIT - luajit - FreeLists" . www.freelists.org . Consultado el 29-03-2023 .
- ↑ Deniau, Laurent. "Lua(Jit) para el cálculo de la física de haces de aceleradores" . Servidor de documentos del CERN . CERN . Consultado el 25 de febrero de 2022 .
- ↑ "OpenResty® - Sitio oficial" . openresty.org .
- ↑ "Lua - Documentación de Neovim" . neovim.io . Consultado el 7 de mayo de 2024 .
- ↑ "Kong/kong" . GitHub . Kong. 25 de febrero de 2022. Consultado el 25 de febrero de 2022 .
- ↑ "Ayudando a que Luajit sea más rápido" . blog.cloudflare.com . 19 de octubre de 2017. Consultado el 25 de febrero de 2022 .
- ↑ "Rendimiento de LuaJIT" .
- ↑ "Laurence Tratt: El impacto del meta-rastreo en el diseño e implementación de máquinas virtuales" . tratt.net . Consultado el 2 de marzo de 2022 .
- 1 2 d'Andrea, Laurent (2019). Análisis del comportamiento del compilador JIT de trazado integrado en el software de diseño metódico de aceleradores (Tesis). CERN . Recuperado el 31 de julio de 2022 .
- ↑ Pall, Mike. "Ajuste de cálculos numéricos para LuaJIT (antes Re: [ ANN ] Sci-1.0-beta1) - luajit - FreeLists" . www.freelists.org .
- ↑ Rottenkolber, Max. "Later Binding: Just-in-Time Compilation of a Younger Dynamic Programming Language." ELS. 2020
- 1 2 "Extensiones" . LuaJIT . Consultado el 27 de marzo de 2026 .
- ↑ "Semántica de operaciones de bits" . LuaJIT . Consultado el 25 de febrero de 2022 .
- ↑ "Coco - Coroutines C verdaderas" . LuaJIT . Consultado el 25 de febrero de 2022 .
- ↑ "Biblioteca FFI" . LuaJIT . Consultado el 25 de febrero de 2022 .
- Intérpretes de código abierto y libre
- Software libre programado en C
- Software libre programado en Lua
- Software que utiliza la licencia MIT.