|
当我们没有范例不变性时会产生什么呢?我们来看看这段代码:
- @code_native ^(2,5)
-
- .text
- ; Function ^ {
- ; Location: intfuncs.jl:220
- pushq %rax
- movabsq $power_by_squaring, %rax
- callq *%rax
- popq %rcx
- retq
- nop
- ;}
此刻让我们界说对整数的取幂,让它像其他剧本说话中看到的那样「安详」:
- function expo(x,y)
- if y>0
- return x^y
- else
- x = convert(Float64,x)
- return x^y
- end
- end
output: expo (generic function with 1 method)
确保它有用:
- println(expo(2,5))
- expo(2,-5)
output: 32
0.03125
当我们搜查这段代码时会产生什么?
- @code_native expo(2,5)
-
-
-
- .text
- ; Function expo {
- ; Location: In[8]:2
- pushq %rbx
- movq %rdi, %rbx
- ; Function >; {
- ; Location: operators.jl:286
- ; Function <; {
- ; Location: int.jl:49
- testq %rdx, %rdx
- ;}}
- jle L36
- ; Location: In[8]:3
- ; Function ^; {
- ; Location: intfuncs.jl:220
- movabsq $power_by_squaring, %rax
- movq %rsi, %rdi
- movq %rdx, %rsi
- callq *%rax
- ;}
- movq %rax, (%rbx)
- movb $2, %dl
- xorl %eax, %eax
- popq %rbx
- retq
- ; Location: In[8]:5
- ; Function convert; {
- ; Location: number.jl:7
- ; Function Type; {
- ; Location: float.jl:60
- L36:
- vcvtsi2sdq %rsi, %xmm0, %xmm0
- ;}}
- ; Location: In[8]:6
- ; Function ^; {
- ; Location: math.jl:780
- ; Function Type; {
- ; Location: float.jl:60
- vcvtsi2sdq %rdx, %xmm1, %xmm1
- movabsq $__pow, %rax
- ;}
- callq *%rax
- ;}
- vmovsd %xmm0, (%rbx)
- movb $1, %dl
- xorl %eax, %eax
- ; Location: In[8]:3
- popq %rbx
- retq
- nopw %cs:(%rax,%rax)
- ;}
这个演示很是直观地声名白为什么 Julia 行使范例揣度来实现可以或许比其他剧本说话有更高的机能。
焦点见识:多重分配+范例不变性 => 速率+可读性
范例不变性(Type stability)是将 Julia 说话与其他剧本说话区分隔的一个重要特性。现实上,Julia 的焦点见识如下所示:
(引用)多重分配(Multiple dispatch)应承说话将函数挪用分配到范例不变的函数。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|