为什么Julia运行函数的速度比非函数的速度快?

为什么Julia运行函数的速度比非函数的速度快?,julia,Julia,所以,今天我决定试试Julia,我遇到了一些奇怪的事情,我不太明白原因,也找不到一个合适的答案来回答我的搜索问题,所以我来了 首先,我希望有一些东西可以作为Python的基准,我决定使用这段非常简单的代码 def test(): start = time() a = 1 while a < 10000000: a+=1 print(time() - start

所以,今天我决定试试Julia,我遇到了一些奇怪的事情,我不太明白原因,也找不到一个合适的答案来回答我的搜索问题,所以我来了

首先,我希望有一些东西可以作为Python的基准,我决定使用这段非常简单的代码

def test():            
    start = time()     
    a = 1              
    while a < 10000000:
        a+=1           
    print(time() - start)
def test():
开始=时间()
a=1
当a<10000000时:
a+=1
打印(时间()-开始)
在我的机器上,用Python3.3执行这项操作需要约0.9秒的时间。然后我在茱莉亚身上做了如下的报道

start = time()
a = 1
while a < 10000000
    a+=1
end
print(time() - start)
start=time()
a=1
而a<10000000
a+=1
结束
打印(时间()-开始)
执行时需要~0.7秒。因此我得出结论,Julia中的简单算术性能是Python的~=

然而,当我把它变成一个函数时,我无意中发现了一种我没有预料到的奇怪现象,这使我的结果出人意料

function test_arithmetic()
    start = time()
    a = 1
    while a < 10000000
        a+=1
    end
    print(time() - start)
end

test_arithmetic()
函数测试_算术()
开始=时间()
a=1
而a<10000000
a+=1
结束
打印(时间()-开始)
结束
测试算法()

这个代码片段只花了~0.1s执行,这是为什么?

我找到了答案,它与存储局部变量比全局变量更快有关

Python的等效问题(这让我测试了Julia是否也适用于Python)可以在中找到

事实证明,该代码段也在~0.7s中运行

function test_arithmetic()
    start = time()
    global a = 1
    while a < 10000000
        a+=1
    end
    print(time() - start)
end

test_arithmetic()
函数测试_算术()
开始=时间()
全局a=1
而a<10000000
a+=1
结束
打印(时间()-开始)
结束
测试算法()

原因是全局变量可以在任何时候更改其类型,这使得编译器很难进行优化。这在报告中提到