Luajit和Lua的区别(luajit和lua区别)

一、速度上的区别

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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平