Size: a a a

2020 December 09

MK

Max Kot in Rust Beginners
Так-то мне из self надо только конфиг, но я не уверен что в будущем будет нужен только он
источник

MK

Max Kot in Rust Beginners
Так-то можно было просто конфиг клонировать
источник

PP

Pavel Perestoronin in Rust Beginners
Max Kot
Так-то мне из self надо только конфиг, но я не уверен что в будущем будет нужен только он
ну я не очень представляю, что должно получиться в итоге, но суть в том, что нужно внимательно следить за владением и все будет хорошо)
источник

MK

Max Kot in Rust Beginners
А если допустим передать только структуру конфиг которая в структуре сервера, вызвать клон просто?
источник

PP

Pavel Perestoronin in Rust Beginners
Max Kot
А если допустим передать только структуру конфиг которая в структуре сервера, вызвать клон просто?
полагаю, что все сработает, но там будет другая копия
источник

MK

Max Kot in Rust Beginners
Данные в конфиге не будут меняться
источник

PP

Pavel Perestoronin in Rust Beginners
ну тогда проблем быть не должно)
источник

MK

Max Kot in Rust Beginners
Только структура конфига обернута в arc
источник

PP

Pavel Perestoronin in Rust Beginners
Max Kot
Только структура конфига обернута в arc
это тоже не проблема, если ты не собираешься менять ничего в другом потоке
источник
2020 December 10

PP

Pavel Perestoronin in Rust Beginners
менять в структуре конфига*
источник

MK

Max Kot in Rust Beginners
Всеравно та же ошибка
источник

MK

Max Kot in Rust Beginners
error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
 --> src/network/udp.rs:80:43
  |
80 |   ...                   thread::spawn(move || {
  |  _____________________________________^
81 | | ...                       let cfg = self.config.clone();
82 | | ...                       UDPServer::handle(receiver, *cfg);
83 | | ...                   });
  | |_______________________^
  |
note: first, the lifetime cannot outlive the lifetime 'a as defined on the impl at 33:7...
 --> src/network/udp.rs:33:7
  |
33 | impl <'a>UDPServer {
  |       ^^
note: ...so that the types are compatible
 --> src/network/udp.rs:80:43
  |
80 |   ...                   thread::spawn(move || {
  |  _____________________________________^
81 | | ...                       let cfg = self.config.clone();
82 | | ...                       UDPServer::handle(receiver, *cfg);
83 | | ...                   });
  | |_______________________^
  = note: expected &UDPServer
             found &'a UDPServer
  = note: but, the lifetime must be valid for the static lifetime...
note: ...so that the type [closure@src/network/udp.rs:80:43: 83:30] will meet its required lifetime bounds
 --> src/network/udp.rs:80:29
  |
80 | ...                   thread::spawn(move || {
  |                       ^^^^^^^^^^^^^

error: aborting due to previous error
источник

MK

Max Kot in Rust Beginners
если убрать время жизни

error[E0759]: self has an anonymous lifetime '_ but it needs to satisfy a 'static lifetime requirement
 --> src/network/udp.rs:80:43
  |
57 |       pub fn run(&mut self) {
  |                  --------- this data with an anonymous lifetime '_...
...
80 |                               thread::spawn(move || {
  |  ___________________________________________^
81 | |                                 let cfg = self.config.clone();
82 | |                                 UDPServer::handle(receiver, *cfg);
83 | |                             });
  | |_____________________________^ ...is captured here...
  |
note: ...and is required to live as long as 'static here
 --> src/network/udp.rs:80:29
  |
80 | ...                   thread::spawn(move || {
  |                       ^^^^^^^^^^^^^

error: aborting due to previous error
источник

MK

Max Kot in Rust Beginners
тоже самое
источник

A

Aldar in Rust Beginners
Vec::new() - аллоцирует на стеке, или в куче?
источник

MB

Mikail Bagishov in Rust Beginners
Нигде не аллоцирует
источник

A

Aldar in Rust Beginners
значит на стеке, то есть размещает пустой вектор
источник

MB

Mikail Bagishov in Rust Beginners
Ну само значение Vec должно где-то лежать (и необязательно на стеке), но никаких дополнительных аллокаций нет.
источник

JC

Julian =) Coffee in Rust Beginners
Aldar
значит на стеке, то есть размещает пустой вектор
Vec это указатель, размер и capacity
источник

A

Aldar in Rust Beginners
Mikail Bagishov
Ну само значение Vec должно где-то лежать (и необязательно на стеке), но никаких дополнительных аллокаций нет.
так если не на стеке, то где?
источник