Здравствуйте, 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>.