Явно бесконечные петли обрабатываются в .Net в качестве особого случая?

Ранее сегодня, как я кодировал метод, и он ударил меня, что я не был уверен, что именно, почему идиома, который я реализовал компилирование. Если все остальное абстрагировано, он будет выглядеть что-то подобное:

    private int Example()
    {
        while (true)
        {
            if (some condition)
            {
               return 1;
            }
        }
    }

У вас есть явная бесконечная петля, а некоторые набор условий внутри цикла, который приводит к концу цикла с помощью оператора возврата. Давайте проигнорируем на то время, когда я делал это, в отличие от проверки состояния прекращения в то время как о том, когда ответ был запутан и не имеет значения - то, что я хочу знать, почему компилятор не помешает это с помощью «не Все пути возвращают значение. " Ошибка, как, строго говоря, не все пути возвращают значение. Корпус, в котором цикл While никогда не вводится (который, конечно, никогда не бывает) не возвращает ничего.

Теперь, есть две причины, по которым я могу себе представить, что это происходит: это побочный эффект оптимизации, который происходит по другим причинам, или этот случай явно обрабатывается компилятором, чтобы позволить этому идиому. Мой инстинкт - это, вероятно, первый случай. Это не удивляет меня вообще, например, что это компилирует:

private int Example2()
{
   if (true) return 1;
}

, потому что компилятор видит константу верному в IF, и оптимизирует условное условно. Я действительно не понимаю, почему это «исправить» первый пример, хотя.

О, и еще более странно, если в пьесе есть некоторая оптимизация, которая избавляется от цикла, это компилирует:

    private int Example3()
    {
        while (true)
        {
            if (false)
            {
               return 1;
            }
        }
    }

Я думаю, что вся внутренняя цикла будет оптимизирована, избавление от всех действительных возвратов Отказ Что на самом деле происходит здесь на уровне компилятора Bytecode / компилятора, что делает все это имеет смысл?

20
задан jwrush 6 September 2011 в 16:44
поделиться