Здравствуйте, _FRED_, Вы писали:
_FR>Будет похоже, да, но это не будет "замещение".
Нет. Это будет полностью параллельная NRT система. Иначе просто не получается.
_FR>И снова, мы же не нуллабельность, кажется, обсуждаем, а логику инициализации, то есть required — то, что должно работать не только с NRT, но и с любым типом.
Ты явно не разобрался в вопросе. Ключевое слово required — это часть NRT.
Ты не можешь сделать какие-то проверки в анализаторе и при этом параллельно использовать NRT, а required это её часть.
Или ты используешь NRT и сталкиваешься с проблемой курицы яйца, или ты полностью отключает NRT и делаешь расширенный аналог на анализаторе.
_FR>Мне не кажется, что это сложнее NRT.
Это 💯 сложнее, так как это расширение NRT, и.е. NRT + дополнительная логика. Отказавшись от NRT, ты вынужден будешь воспроизвести NRT вручную.
Исходная реализация NRT присутствующая в компиляторе не позволит тебе оставить объект недоинициализированным.
_FR>Позиция же разработчиков языка/компилятора, заключающаяся в том, что если что-то можно сделать анализатором/генератором, то так делать и следует, в целом мне понятна.
Это только в твоих фантазиях можно сделать анализатором. На практике это будет нагромождение костылей.
Нормальная реализация должна быть частью NRT.
Ну или надо выбрасывать NRT и всю логику городить на атрибутах и анализаторе.
И, кстати, тебя ни сколько не смущает, что NRT можно было сделать в виде анализатора?
_FR>Давай лучше подумаем, что, кроме сложности, мешает сделать соответствующий анализатор? Поддержка в языке для полноценной картины, потребует нового модификатора для параметра (C# [Proposal] init block for safe initialization of).
Подумай. Ты явно сделал это очень поверхностно. Я как человек занимавшихся компиляторами, понимаю, что качественно это можно сделать только в рамках подсистемы NRT.
Возьми мои примеры. Попробуй записать их как ты предлагаешь. Попробуй скомпилировать это текущим компилятором. Приведи их здесь если что-то получится.