Con F # è a mia conoscenza che è possibile utilizzare la parola chiave inline per eseguire la specializzazione del tipo nel sito di chiamata. Cioè ::Come funziona F # inline?
val inline (+) : ^a -> ^b -> ^c
when (^a or ^b) : (static member (+) : ^a * ^b -> ^c)
Vincola che ^a
o ^b
deve avere un membro statico come op_Addition
, o uno del costruito in primitive, che può essere utilizzato per riempire il vuoto.
Quindi se si ha un metodo che ha + e si passa in un int e un breve come parametri si svolge + su un'istruzione per utilizzare la primitiva incorporata per int e se si passa un float e un byte usa l'opcode dell'aggiunta primitiva float.
Come esattamente questo è fatto al momento della compilazione? Come si può avere un metodo nel CLR che cambia l'opcode o il metodo che utilizza in base al tipo?
Questo comportamento è possibile con Reflection.Emit? Capisco che l'inlining sia eseguito sul call-site, vuol dire che il codice non funziona con C#?
Non so molto sull'interno, ma sembra il codice sorgente F # che definisce l'operatore '+' (C: \ Programmi (x86) \ FSharp-2.0.0.0 \ source \ fsharp \ FSharp .Core \ prim-types.fs riga 3527) attiva i tipi di argomento in fase di compilazione ed emette direttamente il codice IL. – Juliet