Articulo de referencia

LuaJIT

[https://github.com/LuaJIT/LuaJIT/tags LuaJIT tags] "},"latest release date":{"wt":"{{start date and age|2023|08|21}}"},"programming language":{"wt":"[[C (programming language)|...

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

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 -> 1

Extensiones

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

  1. Etiquetas de LuaJIT
  2. "LuaJIT" . LuaJIT . Consultado el 25 de febrero de 2022 .
  3. ^ "LuaJIT/COPYRIGHT en v2.1 · LuaJIT/LuaJIT" . GitHub . 7 de enero de 2022.
  4. "El proyecto LuaJIT" . luajit.org . Consultado el 17 de junio de 2023 .
  5. Pall, Mike. "Re: [ ANN ] llvm-lua 1.0" . lua-users.org . Consultado el 25 de febrero de 2022 .
  6. "Estado del proyecto - Problema n.° 665 - LuaJIT/LuaJIT" . GitHub . Consultado el 3 de febrero de 2023 .
  7. " [ ANN ] Buscando nuevos mantenedores de LuaJIT - luajit - FreeLists" . www.freelists.org . Consultado el 29-03-2023 .
  8. 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 .
  9. "OpenResty® - Sitio oficial" . openresty.org .
  10. "Lua - Documentación de Neovim" . neovim.io . Consultado el 7 de mayo de 2024 .
  11. "Kong/kong" . GitHub . Kong. 25 de febrero de 2022. Consultado el 25 de febrero de 2022 .
  12. "Ayudando a que Luajit sea más rápido" . blog.cloudflare.com . 19 de octubre de 2017. Consultado el 25 de febrero de 2022 .
  13. "Rendimiento de LuaJIT" .
  14. "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 .
  15. 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 .
  16. Pall, Mike. "Ajuste de cálculos numéricos para LuaJIT (antes Re: [ ANN ] Sci-1.0-beta1) - luajit - FreeLists" . www.freelists.org .
  17. Rottenkolber, Max. "Later Binding: Just-in-Time Compilation of a Younger Dynamic Programming Language." ELS. 2020
  18. 1 2 "Extensiones" . LuaJIT . Consultado el 27 de marzo de 2026 .
  19. "Semántica de operaciones de bits" . LuaJIT . Consultado el 25 de febrero de 2022 .
  20. "Coco - Coroutines C verdaderas" . LuaJIT . Consultado el 25 de febrero de 2022 .
  21. "Biblioteca FFI" . LuaJIT . Consultado el 25 de febrero de 2022 .