Итак Я читал много раз до, что технически .NET поддерживает оптимизацию хвостовых вызовов (TCO), потому что для нее есть код операции, а просто С# t генерирует его.
Я не совсем уверен, зачем TCO нужен код операции или что он будет делать. Насколько мне известно, требование о возможности TCO состоит в том, что результаты рекурсивного вызова не объединены с какими-либо переменными в текущей области функций. Если у вас этого нет, я не вижу, как код операции мешает вам открывать фрейм стека. Если у вас это есть, то не может ли компилятор легко скомпилировать его на что-то итеративное?
Итак, в чем смысл кода операции? Очевидно, там что-то мне не хватает. В случаях, когда TCO возможно вообще, не всегда ли можно обрабатывать его на уровне компилятора, чем на уровне кода операции? Какой пример того, где он не может?