В чем смысл MethodImplOptions.InternalCall?

Многие методы в BCL отмечены атрибутом [MethodImpl(MethodImplOptions.InternalCall)]. Это указывает , что «метод реализован в самой общеязыковой среде выполнения».

Какой смысл проектировать инфраструктуру таким образом, а не указывать явные инструкции CIL, которые среда выполнения будет вынуждена реализовывать? В конечном счете, атрибут создает договорные обязательства для среды выполнения, но таким образом, который мне кажется запутанным и не сразу очевидным.

Например, Math.Powможно было бы написать так (извините мою неформальную смесь C# + IL и самого IL, если это плохо; это только пример, поясняющий мою точку зрения):

public static double Pow(double x, double y)
{
    ldarg.0
    ldarg.1
    pow // Dedicated CIL instruction
    ret
}

вместо текущего способа:

[MethodImpl(MethodImplOptions.InternalCall)]
public static double Pow(double x, double y);

Почему существует MethodImplOptions.InternalCall?

29
задан Ani 22 June 2012 в 17:19
поделиться