Re[9]: Опциональные типы
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 23.02.17 03:13
Оценка: +1 :)
Здравствуйте, vdimas, Вы писали:

DM>>Еще раз: что именно у тебя здесь означает Т+1?

V>Тоже, что у тебя — сумма типов, т.е. алгебраик {A t:T | B}, где A и B произвольные идентификаторы, например Just и Nothing.

Ок. Тогда утверждение о том, что любой ссылочный тип таков, я считаю ошибочным. Чуть ниже о том же.

V>>>Правда, в этом случае не нужен промежуточный Box<T>, т.е. достаточно лишь Option<T>, не?

DM>>Для чего достаточно?
V>Для семантики Option<Box<T>>.

Ну так она будет отличаться от Option<T>.

V>Это твои слова?

V>

Например, в Расте Box<T> и Option<Box<T>> представлены в памяти одинаково

V>Ты в них уверен?

Вот из доки слова:
This usage of Option to create safe nullable pointers is so common that Rust does special optimizations to make the representation of Option<Box<T>> a single pointer. Optional pointers in Rust are stored as efficiently as any other pointer type.
https://doc.rust-lang.org/1.10.0/std/option/index.html

V>Точно ли Rust умеет оптимизировать такие сценарии до описанного?


А ты точно читал доку?

DM>>Это разные вещи получатся с разным поведением и разным представлением в памяти.

V>Ты же выше писал, что Option<Box<T>> и Box<T> имеют одинаковое представление?

Я про Option<Box<T>> и Option<T>.

DM>>Во-вторых, ссылочный тип не обязательно содержит null, я ж об этом говорю. См. тот же Котлин или Раст.

V>Ссылочный тип обязательно содержит.

Нет, это твои иллюзии. Есть немало языков, где это не так. Или просто альтернативное определение ссылочного типа у тебя. Попробуй его сформулировать точно.

V>Обрати внимание на struct Box и struct Strong.

V>Оба типа хранят внутри себя ссылочный тип, но сами НЕ являются ссылочным типом.

Почему именно не являются?

DM>>Ну вот есть ссылочный тип string в условной джаве или шарпе.

DM>>Мы можем написать string s = null;
V>Можем.

DM>>Теперь напиши Option<string> по твоей задумке, да так, чтобы получилось T + 1, а не T.


V>String в дотнете и джаве — он уже является Option изкаробки, как любой настоящий ссылочный тип.


Нет. Еще раз напомню про T+1, T+1+1 и т.д.
Попробуй сформулировать точно определение ссылочного типа и определение Option<T>.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.