Intro

  • 함수들이 처음 실행 될 때 필요에 의해 컴파일된다.
  • 이것은 어플리케이션이 빠르게 시작되는 것과 불필요한 작업을 발생시키지 않는 것을 보장해 준다.
  • LuaJit은 neovim에 기본 탑재되어 있다.
  • python, ruby 등의 Jit보다 우수한 성능을 보여준다.
  • LuaJit의 FFI(Foreign Function Interface)는 Low-Level C언어 함수들을 별다른 작업 없이 직접적으로 사용할 수 있다.
  • 네이티브에 견줄만큼 속도가 빠르고, 메모리 사용량이 매우 적다.
  • nginx에 LuaJIT을 포함시켜서 커스터마이징을 한 OpenResty 웹 서버도 있다.

  • lua vs luaJIT ```
  • PUC Lua (the “normal interpreter”) is more stable, i.e. bugs are more frequently found in LuaJIT.
  • PUC Lua is smaller, i.e. it takes less memory.
  • PUC Lua is much easier to understand if you want to customize it.
  • PUC Lua has been ported to way more platforms and is easier to port.
  • Like @lhf said, LuaJIT does not support all of Lua 5.2 features yet. ```

Install

$ sudo apt update
$ sudo apt install luajit
$ luajit -h

Usage

  • -b 옵션은 컴파일 바이너리 코드를 생성한다.
  • ./luajit: unknown luaJIT command or jit.* modules not installed 에러가 발생하는 경우는 $LUA_PATH 설정이 잘못되어 있는 경우이므로 unset LUA_PATH해주거나 $LUA_PATH에 luajit의 올바른 모듈경로를 추가해 준다.
$ luajit -b test.lua test.out                 # Save bytecode to test.out
$ luajit -bg test.lua test.out                # Keep debug info
$ luajit -be "print('hello world')" test.out  # Save cmdline script

$ luajit -bl test.lua                         # List to stdout
$ luajit -bl test.lua test.txt                # List to test.txt
$ luajit -ble "print('hello world')"          # List cmdline script

$ luajit -b test.lua test.obj                 # Generate object file
$ # Link test.obj with your application and load it with require("test")

FFI 사용례

  • LuaJIT는 C함수를 손쉽게 가져와 사용할 수 있다. ```console $ cat«EOF > test-ffi.lua local ffi = require(“ffi”) ffi.cdef[[int printf(const char *fmt, …);]] ffi.C.printf(“Hello %s!\n”, “wiki”) EOF

$ luajit test-ffi.lua Hello wiki! ```