172 похожих чатов

Https://Play.Rust-Lang.Org/?Version=Stable&Mode=Debug&Edition=2018&Gist=76f11a2180913a8106d05d1a6b291245 Type Duplet = (Cow<'static, str>, Cow<'static, str>); let map: HashMap<Duplet, ()>

= ...;
let s1 = String::new();
let s2 = String::new();

map.get(&(Cow::Borrowed(s1.as_str()), Cow::Borrowed(s2.as_str())));


А почему это компилируется? Тут лайфтаймы контрвариантными становятся?

18 ответов

28 просмотров

Да Вот таблица variance https://doc.rust-lang.org/nomicon/subtyping.html#variance

Max Силинг
Да Вот таблица variance https://doc.rust-lang.org/...

С контравариантными лайфтаймами много проблем, поэтому их пару раз порывались попячить из языка, но уже поздно

Max Силинг
Да Вот таблица variance https://doc.rust-lang.org/...

а какой смысл этого занятия? Просто битфлаги вроде сделаны для того чтобы ты мог сделать A | B. ПРи этом объединить AData | BData не выйдет если у них хотя бы 1 поле совпадает

Αλεχ Zhukovsky
а какой смысл этого занятия? Просто битфлаги вроде...

У меня есть ивенты Клиент посылает запрос на подписку Вот тут требуется поведение как у битфлагов — можно подписаться на A | B Сервер посылает обратно ивенты Тут требуется tagged union — каждый ивент это либо A, либо B плюс данные

folex- Автор вопроса
Max Силинг
Да Вот таблица variance https://doc.rust-lang.org/...

Спасибо! Но в табличке контрвариантны только аргументы функций, а про контрвариантные лайфтаймы я там не вижу 🤔 > NOTE: the only source of contravariance in the language is the arguments to a function, which is why it really doesn't come up much in practice.

folex
Спасибо! Но в табличке контрвариантны только аргум...

Так это и есть аргумент функции Внутри аргумента функции может быть лайфтайм Аргументы функции контравариантны

Max Силинг
Так это и есть аргумент функции Внутри аргумента ф...

Собственно, лайфтаймы это единственная вещь в языке, у которой вообще есть варианс Для всего остального просто не определены отношения сабтайпинга

folex- Автор вопроса
Max Силинг
Так это и есть аргумент функции Внутри аргумента ф...

а, понял. Аргументы функции get же. Спасибо 🙂

Max Силинг
Собственно, лайфтаймы это единственная вещь в язык...

Я только что соврал, у трейтов тоже определён некий ограниченный «сабтайпинг», в частности

folex
а, понял. Аргументы функции get же. Спасибо 🙂

В частности, Box<dyn A + Send> пролезает в Box<dyn A> https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0132e6b3f228b12945ac979ca27963c3

folex- Автор вопроса
folex
а вот тут я поплыл

Трейт обджекты могут коэрсится к менее строгим трейт обджектам, что на вид выглядит как сабтайпинг Считать это сабтайпингом или коэршном я не уверен С одной стороны, референс утверждает, что > Subtyping in Rust is very restricted and occurs only due to variance with respect to lifetimes and between types with higher ranked lifetimes. https://doc.rust-lang.org/reference/subtyping.html С другой стороны, все коэршны перечислены здесь, и тут такого нет https://doc.rust-lang.org/reference/type-coercions.html

folex- Автор вопроса
folex
а вот тут я поплыл

а, ну хотя всё в порядке же. foo ничего опасного сделать не сможет, всё логично

Max Силинг
Трейт обджекты могут коэрсится к менее строгим тре...

Кстати, интересный вопрос, что тут происходит

Traveller Kolsky
T is Unsize<dyn Trait> when T: Trait

Угу, CoerceUnsized между боксами с одинаковыми аллокаторами https://doc.rust-lang.org/stable/std/ops/trait.CoerceUnsized.html#impl-CoerceUnsized%3CBox%3CU%2C%20A%3E%3E Тогда это коэршн, а не сабтайпинг

Max Силинг
У меня есть ивенты Клиент посылает запрос на подпи...

Я сделал для такого у себя немножко корявый вариант ручками десериалайз написал и обмазался макросами

folex- Автор вопроса

как вот тут

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта