Информация об изменениях

Сообщение Re[7]: Опциональные типы от 22.02.2017 12:51

Изменено 22.02.2017 12:53 D. Mon

Re[7]: Опциональные типы
Здравствуйте, vdimas,

что-то я перестал понимать твои слова практически.

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.
Re[7]: Опциональные типы
Здравствуйте, vdimas,

что-то я перестал понимать твои слова практически.

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.