据说Lua是一种快速的脚本语言.但是当我测试循环时,例如:
a = 0
while a < 1000000000 do
a = a + 1
end
Run Code Online (Sandbox Code Playgroud)
这需要很多时间(超过1分钟).是因为Lua需要复制和粘贴循环的内容,然后进行评估?
我知道在评估时你需要将pop()项远离堆栈.
我也在Ruby上测试了这个"速度测试",它在大约20秒内完成了循环.
编辑:为什么这对局部变量这么快?(〜16秒进行相同的迭代但是在函数内的局部变量上)
请尝试下面的代码.它比较了for循环和全局变量与局部变量.
我得到这些数字(使用Lua 5.1.4,但它们在5.3.2中类似),它告诉你在循环中使用全局变量的成本:
WG 9.16 100
WL 1.96 467
FG 4.93 186
FL 1.18 776
Run Code Online (Sandbox Code Playgroud)
当然,如果你在循环中做真正的工作,这些成本会被稀释.
这是代码:
local N=1e8
t0=os.clock()
a = 0
while a < N do
a = a + 1
end
t1=os.clock()-t0
print("WG",t1,math.floor(t1/t1*100+0.5))
t0=os.clock()
local a = 0
while a < N do
a = a + 1
end
t2=os.clock()-t0
print("WL",t2,math.floor(t1/t2*100+0.5))
t0=os.clock()
b = 0
for i=1,N do
b = b + 1
end
t3=os.clock()-t0
print("FG",t3,math.floor(t1/t3*100+0.5))
t0=os.clock()
local b = 0
for i=1,N do
b = b + 1
end
t4=os.clock()-t0
print("FL",t4,math.floor(t1/t4*100+0.5))
Run Code Online (Sandbox Code Playgroud)