Size: a a a

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

2020 April 07

p

polunin.ai in Rust — русскоговорящее сообществo
Kitsu
А есть список фичей яп, которые являются плохими, а какие хорошие? </sarcasm>
все которые сейчас присутствуют - были приняты по каким-то причинам. неявная коерсия при вызове метода была добавлена потому что писать (&mut t).foo() неудобно. А для твоего примера нужно придумывать целый дополнительный синтаксис, либо переписывать половину компилятора.
источник

а

а кто это in Rust — русскоговорящее сообществo
Berkus Decker
translatOr
что Adv0cat написал, то и ответил
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
polunin.ai
все которые сейчас присутствуют - были приняты по каким-то причинам. неявная коерсия при вызове метода была добавлена потому что писать (&mut t).foo() неудобно. А для твоего примера нужно придумывать целый дополнительный синтаксис, либо переписывать половину компилятора.
Зачем дополнительный синтаксис для неявного преобразования? Я не знаю, насколько тяжело такие преобразования задаются (кажется не очень тяжело: компилятор уже сейчас находит их и предлагает в виде хинтов "help: consider borrowing here"), но точно не полкомпилятора
источник

а

а кто это in Rust — русскоговорящее сообществo
Berkus Decker
ну и если про продукт говорим то google translatE
безусловно важное замечание
источник

K

Kitsu in Rust — русскоговорящее сообществo
polunin.ai
все которые сейчас присутствуют - были приняты по каким-то причинам. неявная коерсия при вызове метода была добавлена потому что писать (&mut t).foo() неудобно. А для твоего примера нужно придумывать целый дополнительный синтаксис, либо переписывать половину компилятора.
Не очень понятно зачем все это нужно, вопрос исключительно в рфц и желании принять новый сахар и все
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
борроучекер поможет избавиться от проблем
let t: T = T::new();
thread::spawn(move || T::foo(t));
bar(t);

impl T { fn foo(&self) }

А теперь, какую ошибку это должно выдать и каков должен быть текст этой ошибки?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Kitsu
Не очень понятно зачем все это нужно, вопрос исключительно в рфц и желании принять новый сахар и все
ну в общем все неявное плохо. порой даже t.foo() будет хуже чем (&mut t).foo(). у меня все.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
let t: T = T::new();
thread::spawn(move || T::foo(t));
bar(t);

impl T { fn foo(&self) }

А теперь, какую ошибку это должно выдать и каков должен быть текст этой ошибки?
Такую, которую сейчас выдала бы строчка
thread::spawn(move || T::foo(&t));
Видимо "closure does not live long enough because it is not 'static"
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Эрик
let t: T = T::new();
thread::spawn(move || T::foo(t));
bar(t);

impl T { fn foo(&self) }

А теперь, какую ошибку это должно выдать и каков должен быть текст этой ошибки?
ну там была бы такая же как и сейчас только надпись "здесь происходит автоматическое взятие ссылки"
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Mikail Bagishov
Такую, которую сейчас выдала бы строчка
thread::spawn(move || T::foo(&t));
Видимо "closure does not live long enough because it is not 'static"
Ну и с дополнительным
note: t was automatically borrowed because [спан с объявлением foo]
источник

Э

Эрик in Rust — русскоговорящее сообществo
Не очень, честно говоря. Если проблема с лайфтамом появится в контексте
foo(&mut self) -> &mut Self
bar(&self) -> &Self
то половина ошибки будет "автоматически взятый референс вот тут".
источник

Э

Эрик in Rust — русскоговорящее сообществo
Лучше уж явно.
источник

AT

Alexander Tchitchigin in Rust — русскоговорящее сообществo
Kitsu
А есть список фичей яп, которые являются плохими, а какие хорошие? </sarcasm>
Вообще-то да...
источник

Э

Эрик in Rust — русскоговорящее сообществo
Kitsu
А есть какие-то фундаментальные причины, почему аргументы у типа функции не coerc-ятся в референсы, e.g. Fn(T) => Fn(&T) / Fn(&mut T)? Или просто никто не сделал?
Ну и если мы берём оригинальную проблему, то совершенно очевидно, что Fn(T) не может брать &T, потому что разные типы, а объявлен именно как Fn(T).
источник

K

Kitsu in Rust — русскоговорящее сообществo
Эрик
let t: T = T::new();
thread::spawn(move || T::foo(t));
bar(t);

impl T { fn foo(&self) }

А теперь, какую ошибку это должно выдать и каков должен быть текст этой ошибки?
t was moved here, что тут еще может быть?
источник

K

Kitsu in Rust — русскоговорящее сообществo
Alexander Tchitchigin
Вообще-то да...
Можно ссылку?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
источник

K

Kitsu in Rust — русскоговорящее сообществo
Эрик
Ну и если мы берём оригинальную проблему, то совершенно очевидно, что Fn(T) не может брать &T, потому что разные типы, а объявлен именно как Fn(T).
Не очень понял, яж говорил только про каст Fn(T) => Fn(&T)
источник

Э

Эрик in Rust — русскоговорящее сообществo
И я про это.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Fn(T) и Fn(&T) - два разных типа.
источник