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 #?

questionAnswers(1)

yourAnswerToTheQuestion