Size: a a a

2020 December 02

r

red75prime in Rust Beginners
Max Kot
А если покрайней мере без учёта ошибок?
Из библиотеки? Так-то в main можно создать объект и в его реализации Drop вызвать функцию
источник

MB

Mikail Bagishov in Rust Beginners
Max Kot
При любом завершении
1. В начале мейна можешь создать значение типа, реализующего Drop.
2. Если ты ставишь panic=abort, то к пункту 1 можно добавить panic_hook
3. atexit.
источник

r

red75prime in Rust Beginners
Хотя, потоки могут пережить main
источник

MB

Mikail Bagishov in Rust Beginners
Ну и 4. Запустить дочерний процесс, который будет отслеживать завершение родителя, тогда он точно сможет сделать все необходимое даже если основной процесс был убит сигналом.
источник

MB

Mikail Bagishov in Rust Beginners
Короче говоря, инструмент зависит от задачи. Вариантов масса.
источник

MK

Max Kot in Rust Beginners
Допустим работаю с бд и при любом завершении main, надо сделать кое что с одним файлом и разорвать соединение с бд
источник

MK

Max Kot in Rust Beginners
В go для данной задачи подходит closer.bind, но тут хз
источник

MB

Mikail Bagishov in Rust Beginners
Ну я не знаю что такое closer и как он работает.

Я думаю, что 1 вариант должен сойти
источник

MB

Mikail Bagishov in Rust Beginners
Ты про вот это: https://godoc.org/github.com/xlab/closer#Exit ?
Что она вообще делает? Из примера вроде как получается, что там вообще руками Close() вызывать надо
источник

MK

Max Kot in Rust Beginners
источник

MB

Mikail Bagishov in Rust Beginners
Ну то есть я правильно загуглил.
источник

ИП

Игорь Полосков... in Rust Beginners
Хочу использовать генератор случайных чисел из rand. Прописал в Cargo.toml [dependencies] rand = "0.7"
При сборке ругается:
error: failed to download from https://crates.io/api/v1/crates/rand/0.7.3/download
Caused by:
 [35] SSL connect error (gnutls_handshake() failed: Error in the pull function.)
источник

ИП

Игорь Полосков... in Rust Beginners
линукс
источник

a

antuan in Rust Beginners
вразумите несмышленого глупца пожалуйста.
вот есть у меня асинхронная функция, на вход принимает вектор некоторых объектов.
сначала она должна сходить в бд (через tokio-diesel есесн), чтобы проверить наличие в бд переданных объектов по их ключу. для найденных объектов нужно сделать update некоторыми полями объектов из аргумента-вектора, для не найденных - инсерт всех не найденных из того же вектора. (upsert не рассматривается)

если верить компилятору, то в рамках этой функции у меня не может быть никаких заимствований (ну если только каким-то образом со 'static лайфтаймом, но способов это сделать я чет пока не постиг), а значит - ворох clone'ов.
примерный код тут: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=9efe56afafd5699a4d0044e2b0604eec

меня несколько это смущает. предполагаю, гора clone'ов будет негативно сказываться на производительности. чем больше будет объектов в вектори и чем более развесисты будут эти структуры - тем clone'ов будет больше. однако другого способа обойти эту проблему я не вижу (ну ток если каждый объект в Arc не засунуть).

ок ли это? если нет, то как ещё можно обойти ограничения?
источник

MB

Mikail Bagishov in Rust Beginners
Покажи текст ошибки, когда ты пытаешься что-то заборровить
источник

a

antuan in Rust Beginners
error[E0597]: `r.title` does not live long enough
  --> src/db/models/record.rs:90:51
   |
90  |                                 records::title.eq(&r.title),
   |                                 ------------------^^^^^^^^-
   |                                 |                 |
   |                                 |                 borrowed value does not live long enough
   |                                 argument requires that `r.title` is borrowed for `'static`
...
101 |                 });
   |                 - `r.title` dropped here while still borrowed
источник

a

antuan in Rust Beginners
причины примерно те же, что и здесь, предполагаю: https://tokio.rs/tokio/tutorial/spawning#static-bound
источник

a

antuan in Rust Beginners
с той только разницей, что ничего не спавнится явно. но тем не менее, есть .await, после которого есть использование тех же переменных
источник

MB

Mikail Bagishov in Rust Beginners
antuan
причины примерно те же, что и здесь, предполагаю: https://tokio.rs/tokio/tutorial/spawning#static-bound
Тут нет спавна, по идее 'static тут не должен быть нужен.
источник

MB

Mikail Bagishov in Rust Beginners
antuan
error[E0597]: `r.title` does not live long enough
  --> src/db/models/record.rs:90:51
   |
90  |                                 records::title.eq(&r.title),
   |                                 ------------------^^^^^^^^-
   |                                 |                 |
   |                                 |                 borrowed value does not live long enough
   |                                 argument requires that `r.title` is borrowed for `'static`
...
101 |                 });
   |                 - `r.title` dropped here while still borrowed
В коде который ты скинул никакого поля title нет.
источник