一、速度上的区别
1、Lua的速度比较慢,而Luajit则是一种JIT编译技术的实现,拥有更快的执行速度。
function fibonacci(n)
if n == 0 or n == 1 then
return 1
else
return fibonacci(n-1) + fibonacci(n-2)
end
end
2、Lua的速度取决于它的GC,而Luajit则实现了一种增量收集的方式。
-- table缓存fibonacci序列,优化速度
local fib_tab = {1,1}
function fib(n)
if not fib_tab[n] then
fib_tab[n] = fib_tab[n-1] + fib_tab[n-2]
end
return fib_tab[n]
end
3、在进行数字运算时,Luajit利用其特有的“自适应优化”功能,可以将一些数值计算转化为位运算,从而进一步提高速度。
local n = 12345
for i = 1, 1000000 do
n = n + n + n
end
二、兼容性上的区别
1、Lua代码在Luajit中可以运行,反之则不一定成立。
-- lua代码可以在luajit中运行
for i = 1, 10 do
print(i)
end
-- luajit代码在lua中无法运行
ffi = require("ffi")
print(ffi.os)
2、Luajit增强了Lua的一些特性,例如动态库的加载。
-- 在Luajit中,可以通过ffi.load加载动态链接库
ffi = require("ffi")
libtest = ffi.load("test.dll")
libtest.test() -- 调用test.dll中的test函数
3、Luajit对标准库进行了一些修改,例如added userdata metatable、table.remove、math.random、pairs等。
-- Luajit中,table.remove返回被移除的元素,而不是nil
local t = {1,2,3}
local r = table.remove(t, 2)
print(r) -- 输出2
三、使用和安装上的区别
1、Lua可以通过官方网站下载,而Luajit有一个第三方实现版的下载页面。
# Lua下载
wget https://www.lua.org/ftp/lua-5.3.5.tar.gz
tar -zxvf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux
sudo make install
# Luajit下载
wget https://github.com/openresty/luajit2/archive/v2.1-20190520.tar.gz
tar -zxvf v2.1-20190520.tar.gz
cd luajit2-2.1-20190520/
make
sudo make install
2、Lua比较适用于轻量级的应用,而Luajit则适用于高性能的应用,比如游戏服务器和高速代理。
-- Lua示例
local function sum(a, b)
return a + b
end
print(sum(1,2))
-- Luajit示例
local ffi = require("ffi")
local function sum(a, b)
return a + b
end
local cdef = [[
int sum(int a, int b);
]]
local C = ffi.C
ffi.cdef(cdef)
print(C.sum(1,2))
3、Lua的语言特性较为简单,初学者上手难度较低,而Luajit则需要对JIT编译技术有一定了解。
-- Lua
for i = 1, 10 do
if i%2 == 0 then
print(i.."是偶数")
else
print(i.."是奇数")
end
end
-- Luajit
for i = 1, 10 do
if i%2 == 0 then
ffi.C.printf("%d是偶数n", i)
else
ffi.C.printf("%d是奇数n", i)
end
end