Size: a a a

2020 April 05

p

polunin.ai in rust_offtopic
Хм, я тут так подумал. Pin это же не проблема async-await?
источник

p

polunin.ai in rust_offtopic
Это проблема асинка в целом
источник

p

polunin.ai in rust_offtopic
То есть async-await не добавил ничего кроме нового синтаксиса?
источник

p

polunin.ai in rust_offtopic
Alexander Krivitskiy
А какие альтернативы? Можно было бы сделать мув конструкторы но они ансейф, можно сделать нативный саппорт нот мувабл типов - но это просто сахар над пинами. Ещё предложения?
Переписать борроу чекер чтобы он разрешил self-ref
источник

p

polunin.ai in rust_offtopic
То есть чтобы он разрешил писать
let foo = Box::new(foo);
let link = foo.as_ref();
Self {
 foo,
 link,
}
источник

AK

Alexander Krivitskiy in rust_offtopic
Fortunato
Блин, а можно ещё раз ссылку на объяснение, почему асинк/эвейт в расте - говно?
Pin unsound в теории, а async await unsound вот почему https://github.com/rust-lang/rust/issues/63818
источник

p

polunin.ai in rust_offtopic
Или чтобы вместо бокса был какой-то аналог его, который не разрешает мув внутреннего объекта
источник

p

polunin.ai in rust_offtopic
И который разрешает взятие ссылок на внутренний объект
источник

AK

Alexander Krivitskiy in rust_offtopic
polunin.ai
Или чтобы вместо бокса был какой-то аналог его, который не разрешает мув внутреннего объекта
Этим аналогом и есть пин)
источник

p

polunin.ai in rust_offtopic
Нет, пин работает по-другому немного
источник

F

Fortunato in rust_offtopic
polunin.ai
Ну можно растянуть правки на несколько эдишенов, но я вроде бы не видел подобных предложений
И т.е. теперь в расте есть здоровый бесполезный кусок, который и чем-то хорошим не заменят?
источник

AK

Alexander Krivitskiy in rust_offtopic
polunin.ai
Нет, пин работает по-другому немного
Я им сам ещё не пользовался, но когда читал блоги лодочника, он рассказывал, что именно эту проблему пином и решает
источник

p

polunin.ai in rust_offtopic
Да, но решает криво. Пин требует пина всей структуры с селф-реф
источник

p

polunin.ai in rust_offtopic
А нужно чтобы был припинен только то поле на которое ссылаются
источник

p

polunin.ai in rust_offtopic
Alexander Krivitskiy
Я им сам ещё не пользовался, но когда читал блоги лодочника, он рассказывал, что именно эту проблему пином и решает
источник

p

polunin.ai in rust_offtopic
а нужно было чтобы код выглядил как
let foo = Pin::new(foo);
let link = foo.as_ref();
Self {
 foo,
 link,
}
источник

p

polunin.ai in rust_offtopic
но в данный момент борроу чекер видит мув foo, и говорит что ссылка link уже недействительна после мува
источник

p

polunin.ai in rust_offtopic
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=97b6ab6014d9f6c4ada70f6cc9e17ace

то есть желательно чтобы вот так можно было как-то
источник

AK

Alexander Krivitskiy in rust_offtopic
polunin.ai
А нужно чтобы был припинен только то поле на которое ссылаются
Эм,а это реально вообще? У тебя мув = memcpy всей структуры в рантайме. Чтобы сделать как ты хочешь, компилятор должен автоматом обновить ссылку после мува.

Т.е. когда есть
struct {
  A
  RefA -> A
}

После мува должно стать

struct {
   ACopy
   RefA -> ACopy
}
источник

p

polunin.ai in rust_offtopic
Alexander Krivitskiy
Эм,а это реально вообще? У тебя мув = memcpy всей структуры в рантайме. Чтобы сделать как ты хочешь, компилятор должен автоматом обновить ссылку после мува.

Т.е. когда есть
struct {
  A
  RefA -> A
}

После мува должно стать

struct {
   ACopy
   RefA -> ACopy
}
поэтому нужна структура которая копирует только указатель, а данные по указателю никогда не муваются
источник