Vladimir
&Trait
Vladimir
Указатель на тип трейт
Loyd
Нет, это к трейту не имеет вообще отношения
Vladimir
&str указатель на стр
Vladimir
Может быть и стр не существует?
Loyd
Тебя смущает, что &T и &Trait имеют один синтаксис?
ivan
Vladimir
Loyd
Ну, ты волен считать как хочешь
Loyd
Реальность не должна подстраиваться под твои убеждения )
Vladimir
Почему логика обобщения в контексте "множественных типажей" у тебя работает, а тут нет
Loyd
С каким из моих тезисов ты не согласен?
Vladimir
Почему ты обосабливаешь трейт от типов
Loyd
Потому что трейт это не тип
Vladimir
С тем что Trait не тип например
Vladimir
Ок, ща сек
Loyd
Тип это мн-во допустимых значений и операций над ними. Типаж же это набор ограничений
Loyd
Типаж не задаёт мн-во значений. Это не тип.
Loyd
А вот trait-object это тип, да, потому что задаёт мн-во DxV, где D — данные, V — виртуальная таблица
Loyd
Причина, по которой сейчас нельзя заюзать Sized как bound для трейт объекта в том, что оно конфликтуает с CoerceUnsized. Почему это сейчас так, тоже было, вроде в babysteps, но искать лень
Vladimir
https://play.rust-lang.org/?gist=59c7e55edb20d9769bdc6c7e71e0838d&version=stable
Vladimir
trait Trait {}
trait TraitForTrait {}
impl TraitForTrait for Trait {}
fn main() {
}
Loyd
Ну и что?
Vladimir
Если трейт не тип, почему он юзается в контексте типа?
Vladimir
Трейт может быть как и "ограничением" для существующего типа. Так и сам он по себе тип
Loyd
Может ты засунешь что-то в твой Trait?
Loyd
И посмотришь уже на сообщение?)
Anonymous
никогда не видел &(T₁ + T₂) синтаксис 🤔
Vladimir
Что мне засунуть в трейт?)
Serg
Anonymous
Anonymous
потому что мы не можем сконструировать такой тип
Anonymous
как и impl Meme for str
Loyd
Anonymous
ну похожие
Loyd
Только синтаксически )
Anonymous
то есть оба названия раст готов принять как типы, но ни один из них нельзя сконструировать
Anonymous
из-за отсутствия размеров
Vladimir
https://play.rust-lang.org/?gist=cdbe950ee4dc0ae8c42875be0171cfcd&version=undefined
Vladimir
trait Trait {
fn test(&self) -> () {}
}
trait TraitForTrait {
fn test2(&self) -> (); }
impl TraitForTrait for Trait {
fn test2(&self) -> () {self.test()}
}
impl Trait for u8 {}
fn main() {
let x = &2u8 as &Trait;
x.test2();
}
Vladimir
?
Vladimir
let x = &2u8;
x.test2();это уже работать не будет
Loyd
Не пойму, что ты пытаешься доказать
Anonymous
лолл
Vladimir
смысле что
Loyd
Где ты тут Trait как тип сконструировал?
Vladimir
я сконструировал &Trait
Vladimir
я не могу получить ЗНАЧЕНИЕ TRAIT
Vladimir
но это не значит, что он не тип
Vladimir
ты путаешь два понятия
Vladimir
точно также я не могу получить значение str
Loyd
Эм. Я тебе точно дал определения
Anonymous
то есть нет разницы кому имплементить, &Trait или Trait?
Vladimir
попросили запихнуть функцию в трейт
Vladimir
вот
Vladimir
функция выполняется для трейта?
Vladimir
или для чего
Loyd
Ну, с функцией да, я думал, что заругается. Не заругался, окей. Но как это всё доказывает то, что Тип == Трейт?
Loyd
Ну, вот ты сконструировал trait-object, который тип, да
Vladimir
Я вызвал функцию для экземпляра ссылки на трейт
Vladimir
в чем проблема твоя?
Vladimir
нет, еще раз говорю
Loyd
Так, ещё раз
Vladimir
str тоже тип
Vladimir
сконструируй его
Loyd
Покажи мне, что Trait == Type
Vladimir
ты путаешь два понятия "тип" и "значение"
Vladimir
ты хочешь чтоб я показал тебе, что Trait имеет значения
Vladimir
?
Loyd
Loyd
Дай мне определение типа и типажа
Vladimir
всмысле стр я путаю?
Loyd
Я фигею
Loyd
Это как интерфейс с классом путать
Loyd
Vladimir
создай мне str
Vladimir
тогда поговорим
Loyd
Эм
Anonymous
эт интересный вопрос, может кто в irc спросить?