Почему ref locals должны быть назначены в момент объявления?

Продолжая свое путешествие в ref locals, я обнаружил еще одно ограничение, причину которого я не понимаю, а именно: локальные ref должны быть однозначно назначены в момент объявления .

Я понимаю, почему вы не можете инициализировать его ссылкой на переменную, которая не назначена определенно, поскольку это потребует от компилятора каким-то образом связать статусы назначения как переменной, так и локальной ссылки.

object variable;
ref object reference = ref variable;
variable = new object();
// Now `reference` should be definitely assigned, 
// so the compiler would have to work some magic to recognize that.

Но почему это незаконно:

object variable = new object();
ref object reference;
reference = ref variable;

Разве компилятор не мог просто рассматривать reference как любую другую переменную, не назначенную определенно? Это еще более странно, потому что, начиная с C# 7.3, вы можете переназначать ref locals, но это конкретное ограничение все еще остается в силе. Не нарушает ли каким-то образом неинициализированная ссылка IL? Как-то небезопасно допускать существование такой переменной? Или снятие этого ограничения теоретически возможно, но очень сложно/не стоит времени?


person V0ldek    schedule 08.09.2019    source источник
comment
Я считаю, что это еще один случай мы никогда не должны разрешать псевдоним мертвой переменной.   -  person GSerg    schedule 08.09.2019
comment
Согласен, разрешение переназначения должно позволить им отказаться от правила 7.0. Трудно анализировать последствия псевдонимов, изменение компилятора, вероятно, было существенным. Вероятно, все выглядело бы по-другому, если бы не было гибкости, некоторые шансы на то, что будущая версия снова изменит правило.   -  person Hans Passant    schedule 08.09.2019
comment
Я предлагаю закрыть это как дубликат ссылки GSerg.   -  person TaW    schedule 08.09.2019