Многие методы в BCL отмечены атрибутом [MethodImpl(MethodImplOptions.InternalCall)]
.
Этот указывает, что "метод реализован в самой общей среде выполнения языка".
Какова была необходимость в разработке структуры таким образом, чтобы указать конкретные инструкции CIL, которые будут принудительно внедрены во время выполнения? В конечном счете, атрибут создает контрактные обязательства для среды выполнения, но таким образом, который кажется мне запутанным и не сразу очевидным.
Например, Math.Pow
мог быть написан таким образом (извините мою неформальную смесь С# + 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
?