Size: a a a

Rust — русскоговорящее сообществo

2020 March 09

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
trait A<T> {
   fn f(t: T);
}

struct S<X, Y: A<X>> {
   y: Y
}

Без PhantomData нельзя его убедить, что X используется?
источник

В

Вафель in Rust — русскоговорящее сообществo
Emmanuel Goldstein
trait A<T> {
   fn f(t: T);
}

struct S<X, Y: A<X>> {
   y: Y
}

Без PhantomData нельзя его убедить, что X используется?
Нет нельзя.

Но ты уверен что тебе нужен этот баунд в структуре? И ты уверен что T должен быть дженерик параметром, а не ассоциированным типом?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Да, уверен
источник

А⚙

Антон ⚙️ in Rust — русскоговорящее сообществo
Sergey
Можно и GIL отпустить, чтобы не блочило event loop
Действительно рейс-кондитер
источник

BD

Berkus Decker in Rust — русскоговорящее сообществo
Emmanuel Goldstein
trait A<T> {
   fn f(t: T);
}

struct S<X, Y: A<X>> {
   y: Y
}

Без PhantomData нельзя его убедить, что X используется?
чем тебе мешает PhantomData?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Berkus Decker
чем тебе мешает PhantomData?
Фантомдата мне мешал тем, что PhantomData<T> ломает Sync если T не Sync.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
В итоге у меня там безумный PhantomData<Mutex<T>>.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Люблю фантомные мьютексы
источник

А⚙

Антон ⚙️ in Rust — русскоговорящее сообществo
Emmanuel Goldstein
В итоге у меня там безумный PhantomData<Mutex<T>>.
Логично
источник

А⚙

Антон ⚙️ in Rust — русскоговорящее сообществo
Вообще, можно было ещё PhantomData<fn() -> T>
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Да, уверен
а почему нельзя так как выше пишут? Какой кейс? Интересуюсь
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
🦉 ⁣
а почему нельзя так как выше пишут? Какой кейс? Интересуюсь
Трейт A — это Storage. Юзер может выбрать любой тип того, что он хранит, соответственно, T — это аргумент дженерика а не ассоциированный тип
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Антон ⚙️
Вообще, можно было ещё PhantomData<fn() -> T>
Мьютекс нагляднее, КМК: показывает, что мы так извращаемся ради того, чтобы не ломать Sync.
источник

В

Вафель in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Трейт A — это Storage. Юзер может выбрать любой тип того, что он хранит, соответственно, T — это аргумент дженерика а не ассоциированный тип
И зачем тебе для этого баунд в структуре? Баунды в структурах практически никогда не нужны (единственный кейс —  когда тебе надо в структуре хранить не T, а T::Assoc)

Also, если (условно) Vec<A>: Storage<A>, то можно всё таки использовать ассоциированный тип.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Мьютекс нагляднее, КМК: показывает, что мы так извращаемся ради того, чтобы не ломать Sync.
Наоборот: ясно видно, что наша структура никак не хранит значения типа T
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Mikail Bagishov
Наоборот: ясно видно, что наша структура никак не хранит значения типа T
Она так и так не хранит, это ж фантомдата
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Вафель
И зачем тебе для этого баунд в структуре? Баунды в структурах практически никогда не нужны (единственный кейс —  когда тебе надо в структуре хранить не T, а T::Assoc)

Also, если (условно) Vec<A>: Storage<A>, то можно всё таки использовать ассоциированный тип.
Именно ради ассоциированного типа, ЕМНИП. Потом ещё раз посмотрю
источник

В

Вафель in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Именно ради ассоциированного типа, ЕМНИП. Потом ещё раз посмотрю
Ааа...
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Она так и так не хранит, это ж фантомдата
Но при этом тип может хранить значение типа T, или ссылку на него, или что-то подобное
источник

В

Вафель in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Она так и так не хранит, это ж фантомдата
Ну вообще Антон дата считает что ты хранишь T, но как-то хитро. Например у. тебя *const (), а за ним на самом деле T
источник