| 
                         当我们没有类型稳定性时会发生什么呢?我们来看看这段代码: 
- @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)允许语言将函数调用分派到类型稳定的函数。                         (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |