fbpx
Wikipedia

LuaJIT

LuaJIT is a tracing just-in-time compiler for the Lua programming language. Mike Pall, a primary maintainer of the project had resigned in 2015, resorting only to occasional patching to the future 2.1 version.[3]

LuaJIT
The logo featured on the LuaJIT website.
Original author(s)Mike Pall
Stable release
2.0.5 (later v2.1.ROLLING is also updated, e.g. in 2023) / May 1, 2017; 6 years ago (2017-05-01)
Repositorygithub.com/LuaJIT/LuaJIT
Written inC, Lua
Operating systemUnix-like, MacOS, Windows, iOS, Android, PlayStation
Platformx86, X86-64, PowerPC, ARM, MIPS[1]
TypeJust-in-time compiler
LicenseMIT License[2]
Websiteluajit.org

History edit

The LuaJIT project was started in 2005 by developer Mike Pall, released under the MIT open source license.[4]

The second major release of the compiler, 2.0.0, featured major performance increases.[5]

The latest release, 2.0.5 is released in 2017. However, Mike Pall, the creator and maintainer recommends using the tip of the v2.1 branch, and does not believe in releases.[6]

Notable users edit

Performance edit

LuaJIT is often the fastest Lua runtime.[11] LuaJIT has also been named the fastest implementation of a dynamic programming language.[12][13]

LuaJIT includes a Foreign Function Interface compatible with C data structures. Its use is encouraged for numerical computation.[14]

Tracing edit

LuaJIT is a tracing just-in-time compiler. LuaJIT chooses loops and function calls as trace anchors to begin recording possible hot paths. Function calls will require twice as many invocations to begin recording as a loop. Once LuaJIT begins recording, all control flow, including jumps and calls, are inlined to form a linear trace. All executed bytecode instructions are stored and incrementally converted into LuaJIT's Static single-assignment Intermediate representation. LuaJIT's trace compiler is often capable of inlining and removing dispatches from object orientation, operators, and type modifications.[15]

Internal representation edit

LuaJIT uses two types of internal representation. A stack-based bytecode is used for the interpreter, and a static single-assignment form is used for the just-in-time compiler. The interpreter bytecode is frequently patched by the JIT compiler, often to begin executing a compiled trace or to mark a segment of bytecode for causing too many trace aborts.[13]

-- Loop with if-statement local x = 0 for i=1,1e4 do x = x + 11 if i%10 == 0 then -- if-statement x = x + 22 end x = x + 33 end 
---- TRACE 1 start 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 

Extensions edit

LuaJIT adds several extensions to its base implementation, Lua 5.1, most of which do not break compatibility.[16]

  • "BitOp" for binary operations on unsigned 32-bit integers (these operations are also compiled by the just-in-time compiler)[17]
  • "CoCo", which allows the VM to be fully resumable across all contexts[18]
  • A foreign function interface[19]
  • Portable bytecode (regardless of architecture, word size, or endianness, not version)[20]

DynASM edit

DynASM
Developer(s)Mike Pall
Stable release
2.0.5 / May 1, 2017; 6 years ago (2017-05-01)
Preview release
2.1.0 beta3 GC64
Repositorygithub.com/LuaJIT/LuaJIT
Written inLua, C[21]
Platformx86, X86-64, PowerPC, ARM, MIPS
TypePreprocessor, Linker
LicenseMIT License[2]
Websiteluajit.org/dynasm.html

DynASM is a lightweight preprocessor for C which was created for LuaJIT 1.0.0 to make developing the just-in-time compiler easier.[citation needed] DynASM replaces assembly code in C files with runtime writes to a 'code buffer', such that a developer may generate and then evoke code at runtime from a C program.

DynASM was phased out in LuaJIT 2.0.0 after a complete rewrite of the assembler[citation needed], but remains in use by the LuaJIT contributors as a better assembly syntax for the LuaJIT interpreter.

DynASM includes a bare-bones C header file which is used at compile time for logic the preprocessor generates. The actual preprocessor is written in Lua.

Example edit

|.type L, lua_State, esi // L. |.type BASE, TValue, ebx // L->base. |.type TOP, TValue, edi // L->top. |.type CI, CallInfo, ecx // L->ci. |.type LCL, LClosure, eax // L->ci->func->value. |.type UPVAL, UpVal |.macro copyslot, D, S, R1, R2, R3 | mov R1, S.value; mov R2, S.value.na[1]; mov R3, S.tt | mov D.value, R1; mov D.value.na[1], R2; mov D.tt, R3 |.endmacro |.macro copyslot, D, S; copyslot D, S, ecx, edx, eax; .endmacro |.macro getLCL, reg ||if (!J->pt->is_vararg) { | mov LCL:reg, BASE[-1].value ||} else { | mov CI, L->ci | mov TOP, CI->func | mov LCL:reg, TOP->value ||} |.endmacro |.macro getLCL; getLCL eax; .endmacro [...] static void jit_op_getupval(jit_State *J, int dest, int uvidx) {  | getLCL  | mov UPVAL:ecx, LCL->upvals[uvidx]  | mov TOP, UPVAL:ecx->v  | copyslot BASE[dest], TOP[0] } 

References edit

  1. ^ "LuaJIT". LuaJIT. Retrieved 25 February 2022.
  2. ^ a b "LuaJIT/COPYRIGHT at v2.1 · LuaJIT/LuaJIT". GitHub. 7 January 2022.
  3. ^ "[ANN] Looking for new LuaJIT maintainers - luajit - FreeLists". www.freelists.org. Retrieved 2023-03-29.
  4. ^ "The LuaJIT Project". luajit.org. Retrieved 2023-06-17.
  5. ^ Pall, Mike. "Re: [ANN] llvm-lua 1.0". lua-users.org. Retrieved 25 February 2022.
  6. ^ "Project status - Issue #665 - LuaJIT/LuaJIT". GitHub. Retrieved 3 February 2023.
  7. ^ Deniau, Laurent. "Lua(Jit) for computing accelerator beam physics". CERN Document Server. CERN. Retrieved 25 February 2022.
  8. ^ "OpenResty® - Official Site". openresty.org.
  9. ^ "Kong/kong". GitHub. Kong. 25 February 2022. Retrieved 25 February 2022.
  10. ^ "Helping to make Luajit faster". blog.cloudflare.com. 19 October 2017. Retrieved 25 February 2022.
  11. ^ "LuaJIT Performance".
  12. ^ "Laurence Tratt: The Impact of Meta-Tracing on VM Design and Implementation". tratt.net. Retrieved 2 March 2022.
  13. ^ a b d'Andrea, Laurent (2019). Behavioural Analysis of Tracing JIT Compiler Embedded in the Methodical Accelerator Design Software (Thesis). CERN. Retrieved 31 July 2022.
  14. ^ Pall, Mike. "Tuning numerical computations for LuaJIT (was Re: [ANN] Sci-1.0-beta1) - luajit - FreeLists". www.freelists.org.
  15. ^ Rottenkolber, Max. "Later Binding: Just-in-Time Compilation of a Younger Dynamic Programming Language." ELS. 2020
  16. ^ "Extensions". LuaJIT. Retrieved 25 February 2022.
  17. ^ "BitOp Semantics". LuaJIT. Retrieved 25 February 2022.
  18. ^ "Coco - True C Coroutines". LuaJIT. Retrieved 25 February 2022.
  19. ^ "FFI Library". LuaJIT. Retrieved 25 February 2022.
  20. ^ "Extensions". luajit.org. Retrieved 2022-08-25.
  21. ^ "DynASM Features". DynASM. Retrieved 25 February 2022.

luajit, tracing, just, time, compiler, programming, language, mike, pall, primary, maintainer, project, resigned, 2015, resorting, only, occasional, patching, future, version, logo, featured, website, original, author, mike, pallstable, release2, later, rollin. LuaJIT is a tracing just in time compiler for the Lua programming language Mike Pall a primary maintainer of the project had resigned in 2015 resorting only to occasional patching to the future 2 1 version 3 LuaJITThe logo featured on the LuaJIT website Original author s Mike PallStable release2 0 5 later v2 1 ROLLING is also updated e g in 2023 May 1 2017 6 years ago 2017 05 01 Repositorygithub wbr com wbr LuaJIT wbr LuaJITWritten inC LuaOperating systemUnix like MacOS Windows iOS Android PlayStationPlatformx86 X86 64 PowerPC ARM MIPS 1 TypeJust in time compilerLicenseMIT License 2 Websiteluajit wbr org Contents 1 History 2 Notable users 3 Performance 3 1 Tracing 3 2 Internal representation 4 Extensions 5 DynASM 5 1 Example 6 ReferencesHistory editThe LuaJIT project was started in 2005 by developer Mike Pall released under the MIT open source license 4 The second major release of the compiler 2 0 0 featured major performance increases 5 The latest release 2 0 5 is released in 2017 However Mike Pall the creator and maintainer recommends using the tip of the v2 1 branch and does not believe in releases 6 Notable users editCERN for their Methodical Accelerator Design next generation software for describing and simulating particle accelerators 7 OpenResty a fork of nginx with Lua scripting 8 Kong a web API gateway 9 Cloudflare who use LuaJIT in their web application firewall service 10 Performance editLuaJIT is often the fastest Lua runtime 11 LuaJIT has also been named the fastest implementation of a dynamic programming language 12 13 LuaJIT includes a Foreign Function Interface compatible with C data structures Its use is encouraged for numerical computation 14 Tracing edit LuaJIT is a tracing just in time compiler LuaJIT chooses loops and function calls as trace anchors to begin recording possible hot paths Function calls will require twice as many invocations to begin recording as a loop Once LuaJIT begins recording all control flow including jumps and calls are inlined to form a linear trace All executed bytecode instructions are stored and incrementally converted into LuaJIT s Static single assignment Intermediate representation LuaJIT s trace compiler is often capable of inlining and removing dispatches from object orientation operators and type modifications 15 Internal representation edit LuaJIT uses two types of internal representation A stack based bytecode is used for the interpreter and a static single assignment form is used for the just in time compiler The interpreter bytecode is frequently patched by the JIT compiler often to begin executing a compiled trace or to mark a segment of bytecode for causing too many trace aborts 13 Loop with if statement local x 0 for i 1 1e4 do x x 11 if i 10 0 then if statement x x 22 end x x 33 end TRACE 1 start Ex lua 5 TRACE 1 IR 0001 int SLOAD 2 CI 0002 gt num SLOAD 1 T 0003 num ADD 0002 11 0004 int MOD 0001 10 0005 gt int NE 0004 0 0006 num ADD 0003 33 0007 int ADD 0001 1 0008 gt int LE 0007 10000 0009 LOOP 0010 num ADD 0006 11 0011 int MOD 0007 10 0012 gt int NE 0011 0 0013 num ADD 0010 33 0014 int ADD 0007 1 0015 gt int LE 0014 10000 0016 int PHI 0007 0014 0017 num PHI 0006 0013 TRACE 1 stop gt 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 gt int LE 0005 10000 0007 num CONV 0005 num int TRACE 2 stop gt 1Extensions editLuaJIT adds several extensions to its base implementation Lua 5 1 most of which do not break compatibility 16 BitOp for binary operations on unsigned 32 bit integers these operations are also compiled by the just in time compiler 17 CoCo which allows the VM to be fully resumable across all contexts 18 A foreign function interface 19 Portable bytecode regardless of architecture word size or endianness not version 20 DynASM editDynASMDeveloper s Mike PallStable release2 0 5 May 1 2017 6 years ago 2017 05 01 Preview release2 1 0 beta3 GC64Repositorygithub wbr com wbr LuaJIT wbr LuaJITWritten inLua C 21 Platformx86 X86 64 PowerPC ARM MIPSTypePreprocessor LinkerLicenseMIT License 2 Websiteluajit wbr org wbr dynasm wbr htmlDynASM is a lightweight preprocessor for C which was created for LuaJIT 1 0 0 to make developing the just in time compiler easier citation needed DynASM replaces assembly code in C files with runtime writes to a code buffer such that a developer may generate and then evoke code at runtime from a C program DynASM was phased out in LuaJIT 2 0 0 after a complete rewrite of the assembler citation needed but remains in use by the LuaJIT contributors as a better assembly syntax for the LuaJIT interpreter DynASM includes a bare bones C header file which is used at compile time for logic the preprocessor generates The actual preprocessor is written in Lua Example edit type L lua State esi L type BASE TValue ebx L gt base type TOP TValue edi L gt top type CI CallInfo ecx L gt ci type LCL LClosure eax L gt ci gt func gt value type UPVAL UpVal macro copyslot D S R1 R2 R3 mov R1 S value mov R2 S value na 1 mov R3 S tt mov D value R1 mov D value na 1 R2 mov D tt R3 endmacro macro copyslot D S copyslot D S ecx edx eax endmacro macro getLCL reg if J gt pt gt is vararg mov LCL reg BASE 1 value else mov CI L gt ci mov TOP CI gt func mov LCL reg TOP gt value endmacro macro getLCL getLCL eax endmacro static void jit op getupval jit State J int dest int uvidx getLCL mov UPVAL ecx LCL gt upvals uvidx mov TOP UPVAL ecx gt v copyslot BASE dest TOP 0 References edit LuaJIT LuaJIT Retrieved 25 February 2022 a b LuaJIT COPYRIGHT at v2 1 LuaJIT LuaJIT GitHub 7 January 2022 ANN Looking for new LuaJIT maintainers luajit FreeLists www freelists org Retrieved 2023 03 29 The LuaJIT Project luajit org Retrieved 2023 06 17 Pall Mike Re ANN llvm lua 1 0 lua users org Retrieved 25 February 2022 Project status Issue 665 LuaJIT LuaJIT GitHub Retrieved 3 February 2023 Deniau Laurent Lua Jit for computing accelerator beam physics CERN Document Server CERN Retrieved 25 February 2022 OpenResty Official Site openresty org Kong kong GitHub Kong 25 February 2022 Retrieved 25 February 2022 Helping to make Luajit faster blog cloudflare com 19 October 2017 Retrieved 25 February 2022 LuaJIT Performance Laurence Tratt The Impact of Meta Tracing on VM Design and Implementation tratt net Retrieved 2 March 2022 a b d Andrea Laurent 2019 Behavioural Analysis of Tracing JIT Compiler Embedded in the Methodical Accelerator Design Software Thesis CERN Retrieved 31 July 2022 Pall Mike Tuning numerical computations for LuaJIT was 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 Extensions LuaJIT Retrieved 25 February 2022 BitOp Semantics LuaJIT Retrieved 25 February 2022 Coco True C Coroutines LuaJIT Retrieved 25 February 2022 FFI Library LuaJIT Retrieved 25 February 2022 Extensions luajit org Retrieved 2022 08 25 DynASM Features DynASM Retrieved 25 February 2022 Retrieved from https en wikipedia org w index php title LuaJIT amp oldid 1185502983, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.