2015-06-16 17 views
5

Sono interessato a capire il reale differenza, se esiste, tra le due funzioni seguenti definizionifirme funzione in julia

function foo(n::Integer) 
    println("hello") 
end 

function foo{T<:Integer}(n::T) 
    println("hello") 
end 

Per quanto ho capito la seconda forma innesca una nuova compilation ogni volta che la funzione si chiama per un nuovo tipo T, ma cosa succede effettivamente nel primo caso? C'è qualche effetto sulle prestazioni associate al primo modulo?

Grazie

risposta

5

Parameters argomenti della funzione sono per il metodo di disambiguazione piuttosto che di prestazioni. Dalla documentazione http://docs.julialang.org/en/latest/manual/style-guide/#avoid-writing-overly-specific-types

La cosa fondamentale da capire è che non v'è alcuna riduzione delle prestazioni a definire solo l'addone generale (x) = x + uno (x), perché Julia compilerà automaticamente versioni specializzate a seconda delle necessità. Ad esempio, la prima volta che si chiama addone (12), Julia compilerà automaticamente una funzione addone specializzata per gli argomenti x :: Int, con la chiamata a one() sostituita dal suo valore inline 1. Pertanto, le prime tre definizioni di addone sopra sono completamente ridondanti.

EDIT all'indirizzo commento:

La differenza tra le due firme è davvero evidente solo quando ci sono più di un argomento

Considerate le due funzioni:

julia> function foo(n::Integer, m::Integer) 
      println(typeof(n), typeof(m)) 
     end 

julia> function foo{T<:Integer}(n::T, m::T) 
      println("Parameterized: ", typeof(n), typeof(m)) 
     end 

Nel la prima funzione n e m devono essere entrambi numeri interi ma non devono essere lo stesso sottotipo di numero intero. Nella seconda funzione, sia m e n deve essere lo stesso sottotipo

julia> foo(1, 2) 
Parameterized: Int64Int64 

julia> foo(1, Int32(1)) 
Int64Int32 
+0

Grazie, ho capito il tuo punto, ma rispondo solo una parte della mia domanda. Il mio esempio è stato piuttosto banale, lo ammetto. Ma ho visto entrambe le forme nella base Julia e volevo sapere la differenza tra i due. – Davide

+0

Ho aggiornato la risposta per indirizzare il tuo commento. – ptb

+0

Quindi, in sostanza, con un singolo argomento entrambe le forme sono equivalenti, la prima richiede meno digitazioni. Grazie. – Davide