Como funciona o F # inline?
Com F #, entendo que você pode usar a palavra-chave inline para executar a especialização de tipo no site da chamada. Isso é::
val inline (+) : ^a -> ^b -> ^c
when (^a or ^b) : (static member (+) : ^a * ^b -> ^c)
Restringe que^a
ou^b
deve ter um membro estático comoop_Addition
, ou uma das primitivas incorporadas, que pode ser usada para preencher a lacuna.
Portanto, se você tem um método que tem um + e passa um int e um curto como parâmetros, ele envolve + uma instrução para usar a primitiva incorporada para int, e se você passa um float e um byte, ele usa o float adição primitiva opcode.
Como exatamente isso é feito em tempo de compilação? Como você pode ter um método no CLR que alterna qual código de operação ou método usado com base no tipo?
Esse comportamento é possível com o Reflection.Emit? Entendo que o inlining é realizado no local da chamada, isso significa que o código não funciona com c #?