Knowledge (XXG)

LuaJIT

Source 📝

645: 39: 27: 318:. 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 752:, independent of the C compiler. 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. It was created for LuaJIT 1.0.0 to make developing the just-in-time compiler easier. 361:
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.
230:
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.
1068: 244:
LuaJIT uses rolling releases. Mike Pall, the creator and maintainer recommends using the tip of the v2.1 branch, and does not believe in releases.
1122: 291:
LuaJIT is often the fastest Lua runtime. LuaJIT has also been named the fastest implementation of a dynamic programming language.
223: 334: 1303: 583:"BitOp" for binary operations on unsigned 32-bit integers (these operations are also compiled by the just-in-time compiler) 358: 319: 311: 620: 256:, for their Methodical Accelerator Design 'next-generation' software for describing and simulating particle accelerators 86: 322: 60: 658: 590: 350: 295: 227: 141: 113: 1139:
Rottenkolber, Max. "Later Binding: Just-in-Time Compilation of a Younger Dynamic Programming Language." ELS. 2020
1054: 759:
which is used at compile time for logic the preprocessor generates. The actual preprocessor is written in Lua.
662: 299: 279: 185: 109: 579:
LuaJIT adds several extensions to its base implementation, Lua 5.1, most of which do not break compatibility.
686: 354: 169: 834: 238:
The LuaJIT project was started in 2005 by developer Mike Pall, released under the MIT open source license.
1123:"Tuning numerical computations for LuaJIT (was Re: [ANN] Sci-1.0-beta1) - luajit - FreeLists" 1099:
Behavioural Analysis of Tracing JIT Compiler Embedded in the Methodical Accelerator Design Software
697: 180: 706: 669: 152: 756: 690: 173: 133: 1028: 749: 713: 326: 192: 120: 26: 269:
Neovim, a text editor based on vim that allows the use of Lua for plugins and configuration
644: 338: 883: 814: 314:. LuaJIT chooses loops and function calls as trace anchors to begin recording possible 241:
The second major release of the compiler, 2.0.0, featured major performance increases.
38: 1297: 595:
Portable bytecode (regardless of architecture, word size, or endianness, not version)
745: 702: 330: 978: 718: 197: 145: 908: 610: 275: 46: 1069:"Laurence Tratt: The Impact of Meta-Tracing on VM Design and Implementation" 259: 1273: 1174: 315: 774: 629: 835:"[ANN] Looking for new LuaJIT maintainers - luajit - FreeLists" 682: 165: 1249: 1149: 1097: 934: 819: 678: 586:"CoCo", which allows the VM to be fully resumable across all contexts 161: 92: 1224: 302:
data structures. Its use is encouraged for numerical computation.
263: 129: 786: 729: 253: 125: 1002: 674: 157: 137: 960: 1199: 858: 16:
Just-in-time compiler for the Lua programming language
208: 349:
LuaJIT uses two types of internal representation. A
724: 712: 696: 668: 654: 619: 609: 203: 191: 179: 151: 119: 105: 85: 59: 45: 935:"Lua(Jit) for computing accelerator beam physics" 325:. LuaJIT's trace compiler is often capable of 909:"Project status - Issue #665 - LuaJIT/LuaJIT" 8: 604: 19: 815:"LuaJIT/COPYRIGHT at v2.1 · LuaJIT/LuaJIT" 643: 603: 37: 25: 18: 809: 807: 1091: 1089: 31:The logo featured on the LuaJIT website. 767: 748:for C that provides its own flavor of 66:v2.1.ROLLING / August 21, 2023 7: 14: 884:"Re: [ANN] llvm-lua 1.0" 1029:"Helping to make Luajit faster" 755:DynASM includes a bare-bones C 542:---- TRACE 2 start 1/4 Ex.lua:8 1: 512:0009 ------ LOOP ------------ 312:tracing just-in-time compiler 224:tracing just-in-time compiler 961:"OpenResty® - Official Site" 563:0006 > int LE 0005 +10000 539:---- TRACE 1 stop -> loop 530:0015 > int LE 0014 +10000 509:0008 > int LE 0007 +10000 482:---- TRACE 1 start Ex.lua:5 323:intermediate representation 1320: 1200:"Coco - True C Coroutines" 1096:d'Andrea, Laurent (2019). 591:foreign function interface 566:0007 num CONV 0005 num.int 296:Foreign Function Interface 278:, who use LuaJIT in their 569:---- TRACE 2 stop -> 1 367:-- Loop with if-statement 333:from object orientation, 81: 55: 36: 24: 1009:. Kong. 25 February 2022 744:DynASM is a lightweight 521:0012 > int NE 0011 +0 500:0005 > int NE 0004 +0 491:0002 > num SLOAD #1 T 479: 364: 359:static single-assignment 320:static single-assignment 280:web application firewall 524:0013 + num ADD 0010 +33 503:0006 + num ADD 0003 +33 345:Internal representation 272:Kong, a web API gateway 68:; 12 months ago 536:0017 num PHI 0006 0013 533:0016 int PHI 0007 0014 527:0014 + int ADD 0007 +1 506:0007 + int ADD 0001 +1 1304:Compiler construction 557:0004 num ADD 0003 +33 554:0003 num ADD 0001 +22 518:0011 int MOD 0007 +10 515:0010 num ADD 0006 +11 497:0004 int MOD 0001 +10 494:0003 num ADD 0002 +11 186:Just-in-time compiler 1055:"LuaJIT Performance" 939:CERN Document Server 859:"The LuaJIT Project" 560:0005 int ADD 0002 +1 551:0002 int SLOAD #2 PI 548:0001 num SLOAD #1 PI 488:0001 int SLOAD #2 CI 351:stack-based bytecode 1033:blog.cloudflare.com 979:"Lua - Neovim docs" 606: 21: 339:type modifications 294:LuaJIT includes a 266:with Lua scripting 47:Original author(s) 1274:"DynASM Features" 1175:"BitOp Semantics" 1127:www.freelists.org 1035:. 19 October 2017 933:Deniau, Laurent. 839:www.freelists.org 823:. 7 January 2022. 742: 741: 217: 216: 1311: 1289: 1288: 1286: 1284: 1270: 1264: 1263: 1261: 1260: 1246: 1240: 1239: 1237: 1235: 1221: 1215: 1214: 1212: 1210: 1196: 1190: 1189: 1187: 1185: 1171: 1165: 1164: 1162: 1160: 1146: 1140: 1137: 1131: 1130: 1118: 1112: 1111: 1109: 1107: 1093: 1084: 1083: 1081: 1079: 1065: 1059: 1058: 1051: 1045: 1044: 1042: 1040: 1025: 1019: 1018: 1016: 1014: 999: 993: 992: 990: 989: 975: 969: 968: 957: 951: 950: 948: 946: 930: 924: 923: 921: 919: 905: 899: 898: 896: 894: 879: 873: 872: 870: 869: 855: 849: 848: 846: 845: 831: 825: 824: 811: 802: 801: 799: 797: 783: 777: 772: 750:inline assembler 738: 735: 733: 731: 647: 642: 639: 637: 635: 633: 631: 607: 570: 567: 564: 561: 558: 555: 552: 549: 546: 543: 540: 537: 534: 531: 528: 525: 522: 519: 516: 513: 510: 507: 504: 501: 498: 495: 492: 489: 486: 483: 476: 473: 470: 467: 464: 461: 458: 455: 452: 449: 446: 443: 440: 437: 434: 431: 428: 425: 422: 419: 416: 413: 410: 407: 404: 401: 398: 395: 392: 389: 386: 383: 380: 377: 374: 371: 368: 353:is used for the 298:compatible with 213: 210: 121:Operating system 101: 98: 96: 94: 76: 74: 69: 41: 29: 22: 1319: 1318: 1314: 1313: 1312: 1310: 1309: 1308: 1294: 1293: 1292: 1282: 1280: 1272: 1271: 1267: 1258: 1256: 1248: 1247: 1243: 1233: 1231: 1223: 1222: 1218: 1208: 1206: 1198: 1197: 1193: 1183: 1181: 1173: 1172: 1168: 1158: 1156: 1148: 1147: 1143: 1138: 1134: 1120: 1119: 1115: 1105: 1103: 1095: 1094: 1087: 1077: 1075: 1067: 1066: 1062: 1053: 1052: 1048: 1038: 1036: 1027: 1026: 1022: 1012: 1010: 1001: 1000: 996: 987: 985: 977: 976: 972: 959: 958: 954: 944: 942: 932: 931: 927: 917: 915: 907: 906: 902: 892: 890: 881: 880: 876: 867: 865: 857: 856: 852: 843: 841: 833: 832: 828: 813: 812: 805: 795: 793: 785: 784: 780: 773: 769: 765: 728: 650: 628: 602: 577: 572: 571: 568: 565: 562: 559: 556: 553: 550: 547: 545:---- TRACE 2 IR 544: 541: 538: 535: 532: 529: 526: 523: 520: 517: 514: 511: 508: 505: 502: 499: 496: 493: 490: 487: 485:---- TRACE 1 IR 484: 481: 478: 477: 474: 471: 468: 465: 462: 459: 456: 453: 450: 447: 444: 441: 439:-- if-statement 438: 435: 432: 429: 426: 423: 420: 417: 414: 411: 408: 405: 402: 399: 396: 393: 390: 387: 384: 381: 378: 375: 372: 369: 366: 347: 308: 289: 250: 236: 207: 91: 77: 72: 70: 67: 32: 17: 12: 11: 5: 1317: 1315: 1307: 1306: 1296: 1295: 1291: 1290: 1265: 1241: 1216: 1191: 1166: 1141: 1132: 1113: 1102:(Thesis). CERN 1085: 1060: 1046: 1020: 994: 970: 952: 925: 900: 874: 850: 826: 803: 778: 766: 764: 761: 740: 739: 726: 722: 721: 716: 710: 709: 700: 694: 693: 672: 666: 665: 656: 652: 651: 649: 648: 625: 623: 617: 616: 613: 601: 598: 597: 596: 593: 587: 584: 576: 573: 480: 365: 346: 343: 307: 304: 288: 285: 284: 283: 273: 270: 267: 257: 249: 246: 235: 232: 215: 214: 205: 201: 200: 195: 189: 188: 183: 177: 176: 155: 149: 148: 123: 117: 116: 107: 103: 102: 89: 83: 82: 79: 78: 65: 63: 61:Stable release 57: 56: 53: 52: 49: 43: 42: 34: 33: 30: 15: 13: 10: 9: 6: 4: 3: 2: 1316: 1305: 1302: 1301: 1299: 1279: 1275: 1269: 1266: 1255: 1251: 1245: 1242: 1230: 1226: 1225:"FFI Library" 1220: 1217: 1205: 1201: 1195: 1192: 1180: 1176: 1170: 1167: 1155: 1151: 1145: 1142: 1136: 1133: 1128: 1124: 1117: 1114: 1101: 1100: 1092: 1090: 1086: 1074: 1070: 1064: 1061: 1056: 1050: 1047: 1034: 1030: 1024: 1021: 1008: 1004: 998: 995: 984: 980: 974: 971: 966: 965:openresty.org 962: 956: 953: 940: 936: 929: 926: 914: 910: 904: 901: 889: 888:lua-users.org 885: 878: 875: 864: 860: 854: 851: 840: 836: 830: 827: 822: 821: 816: 810: 808: 804: 792: 788: 782: 779: 776: 771: 768: 762: 760: 758: 753: 751: 747: 737: 727: 723: 720: 717: 715: 711: 708: 704: 701: 699: 695: 692: 688: 684: 680: 676: 673: 671: 667: 664: 660: 657: 653: 646: 641: 627: 626: 624: 622: 618: 614: 612: 608: 599: 594: 592: 588: 585: 582: 581: 580: 574: 363: 360: 356: 352: 344: 342: 340: 336: 332: 329:and removing 328: 324: 321: 317: 313: 305: 303: 301: 297: 292: 286: 281: 277: 274: 271: 268: 265: 261: 258: 255: 252: 251: 248:Notable users 247: 245: 242: 239: 233: 231: 229: 225: 221: 212: 206: 202: 199: 196: 194: 190: 187: 184: 182: 178: 175: 171: 167: 163: 159: 156: 154: 150: 147: 143: 139: 135: 131: 127: 124: 122: 118: 115: 111: 108: 104: 100: 90: 88: 84: 80: 64: 62: 58: 54: 50: 48: 44: 40: 35: 28: 23: 1281:. Retrieved 1277: 1268: 1257:. Retrieved 1253: 1250:"Extensions" 1244: 1232:. Retrieved 1228: 1219: 1207:. Retrieved 1203: 1194: 1182:. Retrieved 1178: 1169: 1157:. Retrieved 1153: 1150:"Extensions" 1144: 1135: 1126: 1121:Pall, Mike. 1116: 1104:. Retrieved 1098: 1076:. Retrieved 1072: 1063: 1049: 1037:. Retrieved 1032: 1023: 1011:. Retrieved 1006: 997: 986:. Retrieved 982: 973: 964: 955: 943:. Retrieved 938: 928: 916:. Retrieved 912: 903: 891:. Retrieved 887: 882:Pall, Mike. 877: 866:. Retrieved 862: 853: 842:. Retrieved 838: 829: 818: 794:. Retrieved 790: 781: 770: 754: 746:preprocessor 743: 703:Preprocessor 611:Developer(s) 578: 348: 310:LuaJIT is a 309: 293: 290: 262:, a fork of 243: 240: 237: 219: 218: 1283:25 February 1234:25 February 1209:25 February 1184:25 February 1159:25 February 1039:25 February 1013:25 February 1003:"Kong/kong" 945:25 February 893:25 February 796:25 February 775:LuaJIT tags 757:header file 719:MIT License 355:interpreter 287:Performance 198:MIT License 146:PlayStation 1259:2022-08-25 1254:luajit.org 988:2024-05-07 918:3 February 868:2023-06-17 863:luajit.org 844:2023-03-29 763:References 655:Written in 621:Repository 575:Extensions 331:dispatches 276:Cloudflare 106:Written in 87:Repository 73:2023-08-21 1073:tratt.net 983:neovim.io 636:/luajit-2 615:Mike Pall 335:operators 316:hot paths 260:OpenResty 51:Mike Pall 1298:Category 787:"LuaJIT" 670:Platform 357:, and a 327:inlining 226:for the 153:Platform 1106:31 July 1078:2 March 734:/dynasm 725:Website 714:License 683:PowerPC 306:Tracing 282:service 234:History 204:Website 193:License 166:PowerPC 142:Android 134:Windows 128:-like, 99:/LuaJIT 97:/LuaJIT 71: ( 1278:DynASM 1229:LuaJIT 1204:LuaJIT 1179:LuaJIT 1154:LuaJIT 1007:GitHub 941:. CERN 913:GitHub 820:GitHub 791:LuaJIT 730:luajit 707:Linker 679:X86-64 630:luajit 605:DynASM 600:DynASM 337:, and 220:LuaJIT 209:luajit 162:X86-64 93:github 20:LuaJIT 736:.html 370:local 264:nginx 222:is a 130:MacOS 1285:2022 1236:2022 1211:2022 1186:2022 1161:2022 1108:2022 1080:2022 1041:2022 1015:2022 947:2022 920:2023 895:2022 798:2022 732:.org 698:Type 691:MIPS 640:.git 634:/git 632:.org 436:then 254:CERN 211:.org 181:Type 174:MIPS 126:Unix 95:.com 687:ARM 675:x86 659:Lua 475:end 457:end 397:1e4 382:for 228:Lua 170:ARM 158:x86 138:iOS 114:Lua 1300:: 1276:. 1252:. 1227:. 1202:. 1177:. 1152:. 1125:. 1088:^ 1071:. 1031:. 1005:. 981:. 963:. 937:. 911:. 886:. 861:. 837:. 817:. 806:^ 789:. 705:, 689:, 685:, 681:, 677:, 661:, 638:.0 589:A 472:33 454:22 430:== 427:10 418:if 415:11 400:do 341:. 172:, 168:, 164:, 160:, 144:, 140:, 136:, 132:, 112:, 1287:. 1262:. 1238:. 1213:. 1188:. 1163:. 1129:. 1110:. 1082:. 1057:. 1043:. 1017:. 991:. 967:. 949:. 922:. 897:. 871:. 847:. 800:. 663:C 469:+ 466:x 463:= 460:x 451:+ 448:x 445:= 442:x 433:0 424:% 421:i 412:+ 409:x 406:= 403:x 394:, 391:1 388:= 385:i 379:0 376:= 373:x 300:C 110:C 75:)

Index

The logo used for the LuaJIT compiler project
"LuaJIT REPL running on Windows 10
Original author(s)
Stable release
Repository
github.com/LuaJIT/LuaJIT
C
Lua
Operating system
Unix
MacOS
Windows
iOS
Android
PlayStation
Platform
x86
X86-64
PowerPC
ARM
MIPS
Type
Just-in-time compiler
License
MIT License
luajit.org
tracing just-in-time compiler
Lua
CERN
OpenResty

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.