Size: a a a

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

2020 September 25

Э

Эрик in Rust — русскоговорящее сообществo
Хотя я могу и ошибаться.
источник

R

Roman in Rust — русскоговорящее сообществo
Крейт А версии 1.0 имеет трейт trait A {}
Крейт B версии 1.0 имплементит impl A for MyType {}
Крейт А добавляет имплементацию impl<T> A for T{}
источник

R

Roman in Rust — русскоговорящее сообществo
Может ли крейт A публиковать это в 1.1
источник

R

Roman in Rust — русскоговорящее сообществo
Или должен а 2.0?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Roman
Крейт А версии 1.0 имеет трейт trait A {}
Крейт B версии 1.0 имплементит impl A for MyType {}
Крейт А добавляет имплементацию impl<T> A for T{}
Очевидно, что нет.
источник

R

Roman in Rust — русскоговорящее сообществo
Ну вообще логично, да
источник

Э

Эрик in Rust — русскоговорящее сообществo
А вот impl<T> A for Box<T> — может.
источник

R

Roman in Rust — русскоговорящее сообществo
Разве?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Когда сам тип генерикозависимый, но не генерик, оно норм работает.
источник

R

Roman in Rust — русскоговорящее сообществo
Помоему я могу в B заимплементить impl A for Box<MyType> {}
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ilya Lakhin
Короче, проблема фатически неразрешима?
Зачем юзателям твоей либы генерик имплы на B?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Roman
Помоему я могу в B заимплементить impl A for Box<MyType> {}
Нет, Box не твой.
источник

R

Roman in Rust — русскоговорящее сообществo
Разве не ослабили требования, что б там хотя б один тип был твой внутри
источник

Э

Эрик in Rust — русскоговорящее сообществo
Roman
Разве не ослабили требования, что б там хотя б один тип был твой внутри
impl From<MyType> for … vs impl A for …
источник

Э

Эрик in Rust — русскоговорящее сообществo
Разницу видишь?
источник

R

Roman in Rust — русскоговорящее сообществo
Или обязательно верхнеуровневый твой
источник

R

Roman in Rust — русскоговорящее сообществo
Вообще не люблю этот синтаксис.
источник

R

Roman in Rust — русскоговорящее сообществo
Зачем искуственно разделили параметры имплементации трейта на Self и остальные
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Эрик
Зачем юзателям твоей либы генерик имплы на B?
В либе есть функции, принимающие A, есть функции принимающие B. В большинстве случае то, что принимают через B может быть единообразно сконструировано из A, поэтому дфеолтная имплементация актуальна. Но могут быть случаи, когда нужно сделать специализированную версию для методов, принимающих B, которая не может быть построена из A, и вообще запретить принимать этот объект там, где принимается A
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ilya Lakhin
В либе есть функции, принимающие A, есть функции принимающие B. В большинстве случае то, что принимают через B может быть единообразно сконструировано из A, поэтому дфеолтная имплементация актуальна. Но могут быть случаи, когда нужно сделать специализированную версию для методов, принимающих B, которая не может быть построена из A, и вообще запретить принимать этот объект там, где принимается A
Ты на вопрос не ответил. Зачем там генерик имплы, если оно у тебя будет на тип имплементиться, то есть impl A for Type, а не impl<T> A for T?
источник