Re[25]: C# [Proposal] init block for safe initialization of
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.12.25 09:09
Оценка:
Здравствуйте, Sinclair, Вы писали:

С наступающим Новым Годом!
и солнце б утром не вставало, когда бы не было меня
Re[25]: C# [Proposal] init block for safe initialization of
От: Sinclair Россия https://github.com/evilguest/
Дата: 30.12.25 17:09
Оценка: :)
Здравствуйте, pilgrim_, Вы писали:

_>Сергей, такое ощущение что у тебя перед глазами стоит только не циклический двусвязный список, а теперь зацикли его, Как тут в примере у Антона:

+
_>
  Для наглядности возможные графы
_>Image: 5-cycle.png
_>Image: image001.png


Ну, в таком виде пентаграмма изоморфна обычному пятиугольнику (достаточно её распутать). Но никто не сказал, что node.Previous.Next обязательно == node
можно же сделать и так:
a.Next = b;
b.Next = c;
c.Next = d;
d.Next = e;
e.Next = a;
e.Previous = c;
d.Previous = b;
c.Previous = a;
b.Previous = e;
a.Previous = d;
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: C# [Proposal] init block for safe initialization of
От: Sinclair Россия https://github.com/evilguest/
Дата: 30.12.25 17:26
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Sinclair, Вы писали:


S>С наступающим Новым Годом!

И вас так же
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: C# [Proposal] init block for safe initialization of
От: pilgrim_ Россия  
Дата: 31.12.25 06:39
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>Ну, в таком виде пентаграмма изоморфна обычному пятиугольнику (достаточно её распутать). Но никто не сказал, что node.Previous.Next обязательно == node

S>можно же сделать и так:
S>
S>a.Next = b;
S>b.Next = c;
S>c.Next = d;
S>d.Next = e;
S>e.Next = a;
S>e.Previous = c;
S>d.Previous = b;
S>c.Previous = a;
S>b.Previous = e;
S>a.Previous = d;
S>


Да как угодно, сорян что влез в ваш цикл, захотелось брекнуть с наступающим НГ!
Re[2]: C# [Proposal] init block for safe initialization of complex
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.12.25 12:15
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>В целом кажется это можно решить анализатором кода без изменения компилятора:

_FR>* Тип SomeType должен быть отмечен неким атрибутом
_FR>* Свойства/поля/параметры/возвращаемые значения методов так же, там где это необходимо, размечаются атрибутами, говорящими, что объекты/значения в них могут быть ещё только частично проинициализированны
_FR>* Как только переменная типа SomeType покидает такой вот "частично проинициализированный" контекст (например возвращается из метода, возвращаемое значение которого атрибутом не размечено), анализатор может проверить, что тип полностью инициализирован.

Ты предлагаешь полностью заместить NRT (Nullable Reference Types) и реализовать собственный анализ потока управления? Т.е. создать параллельную вселенную с закатом солнца вручную?

И тебя не напрягает, что ты не сможешь в коде использовать NRT и required?

Тогда зачем вообще нужен NRT?

А сложность такой системы ты точно правильно оцениваешь?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: C# [Proposal] init block for safe initialization of
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.01.26 05:22
Оценка:
Здравствуйте, pilgrim_, Вы писали:

_>Да как угодно, сорян что влез в ваш цикл, захотелось брекнуть с наступающим НГ!

Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: C# [Proposal] init block for safe initialization of complex
От: _FRED_ Черногория
Дата: 04.01.26 11:02
Оценка:
Здравствуйте, VladD2, Вы писали:

_FR>>В целом кажется это можно решить анализатором кода без изменения компилятора:


VD>Ты предлагаешь полностью заместить NRT (Nullable Reference Types) и реализовать собственный анализ потока управления? Т.е. создать параллельную вселенную с закатом солнца вручную?

VD>И тебя не напрягает, что ты не сможешь в коде использовать NRT и required?
VD>Тогда зачем вообще нужен NRT?

Будет похоже, да, но это не будет "замещение".

И снова, мы же не нуллабельность, кажется, обсуждаем, а логику инициализации, то есть required — то, что должно работать не только с NRT, но и с любым типом.

VD>А сложность такой системы ты точно правильно оцениваешь?


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

Давай лучше подумаем, что, кроме сложности, мешает сделать соответствующий анализатор? Поддержка в языке для полноценной картины, потребует нового модификатора для параметра (C# [Proposal] init block for safe initialization of).
Help will always be given at Hogwarts to those who ask for it.
Re[4]: C# [Proposal] init block for safe initialization of complex
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.01.26 17:18
Оценка:
Здравствуйте, _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.

Возьми мои примеры. Попробуй записать их как ты предлагаешь. Попробуй скомпилировать это текущим компилятором. Приведи их здесь если что-то получится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.