что-то я перестал понимать твои слова практически.
V>>>Ну, любой ссылочный тип у нас имеет T+1, потому что мы храним как значение T, так и ссылку на него. DM>>Чего-чего? Не надо про любой ссылочный тип, у них может быть разная семантика.
V>А если ты имел ввиду, что "ссылочность" значения прячется от системы типов, то ты в этом случае НЕ можешь рассуждать о ссылочном типе — это будет просто некая тонкость реализации.
Ничего не понял тут. Еще раз: что именно у тебя здесь означает Т+1 ? Давай не будем вперед паровоза бегать и додумывать друг за друга.
DM>>Трюк как в Option<Box<T>> годится только если Box<T> не может быть нулевым указателем.
V>Да понятно. V>Правда, в этом случае не нужен промежуточный Box<T>, т.е. достаточно лишь Option<T>, не?
Для чего достаточно? Это разные вещи получатся с разным поведением и разным представлением в памяти.
DM>>Если ты не можешь отличить null как None от null как значение исходного ссылочного типа, то все, приехали
V>Ссылочный тип по-определению — это зависимый тип. V>Тот самый, угу. V>Т.е., тип, зависящий от значения: V>* валидный адрес — тип T V>* нулевой адрес — тип None.
Стоп-стоп, во-первых у тебя тут Т уже что-то другое начал обозначать. Во-вторых, ссылочный тип не обязательно содержит null, я ж об этом говорю. См. тот же Котлин или Раст.
V>Надеюсь, сейчас ты и сам увидел, что ты малость недопонял, что я тебе говорил?
Совсем недопонял, похоже.
V>Речь была о том, что в отличие от некоего value-type Nullable<Nullable<...<T>...>>, переменной ссылочного типа можно присвоить просто None (null, NULL, Nil и т.д.) — т.е. присвоить некое значение, НЕ связанное с типом T (а не конструировать значение вот этого страшного типа с длинным именем).
V>Почему просто null? Потому что это алгебраик — сумма типов.
Ну вот есть ссылочный тип string в условной джаве или шарпе.
Мы можем написать string s = null;
Теперь напиши Option<string> по твоей задумке, да так, чтобы получилось T + 1, а не T.