Size: a a a

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

2020 April 19

AT

Alexander Tchitchigin in Rust — русскоговорящее сообществo
Hadji
А что за Пирс?
Тот, который "Типы в языках программирования" написал.
источник

H

Hadji in Rust — русскоговорящее сообществo
А, ТАПЛ :) Читал, но автора забыл 🙈
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ilya Lakhin
Привет! Есть вопрос по Tokio(и фьючерсам в целом). Мне нужен такой примитив синхронизации, который позволит блокировать все задачи, которые будут обращаться к этому примитиву, и разблокировать их всех одновременно, когда примитив разрешит. Смотрю, что есть в Токио: https://tokio-rs.github.io/tokio/doc/tokio/sync/index.html

Barrier блокирует только наперед заданный набор задач. У меня количество неизвестно. Не подходит.

Semaphore теоретически подходит, но acquire скушивает по одному пермиту. Мне нужно чтобы не "кушал", чтобы просто выставлялся один общий неотчуждаемый пермит на всех.

Notify разблокирует ресурс только при первом обращения. При повторном обращении заблокирует опять. Мне нужно, чтобы ресурс разблокировался навсегда
В зависимости от задачи есть вариант заблочить RwLock'ом, взяв мутабельный доступ к локу, и отпустить его, когда надо дать доступ задачам. Но там задачи должны брать немутабельный доступ.
источник

T

Tema in Rust — русскоговорящее сообществo
Вафель
В примере нет .status(). Там просто в консоль выводиться весь Result<...>
теперь компилится без ошибок но и в консоль ничего не выводит

вот такую функцию сделал:

async fn do_something() {
 let mut client = Client::default();

 let response = client.get("https://jsonplaceholder.typicode.com/todos/1")
     .send().await;

 println!("Response: {:?}", response);
}


и ее вызываю там где надо
источник

T

Tema in Rust — русскоговорящее сообществo
то есть даже не могу найти в логах слова Response
источник

K

Kitsu in Rust — русскоговорящее сообществo
Ilya Lakhin
Привет! Есть вопрос по Tokio(и фьючерсам в целом). Мне нужен такой примитив синхронизации, который позволит блокировать все задачи, которые будут обращаться к этому примитиву, и разблокировать их всех одновременно, когда примитив разрешит. Смотрю, что есть в Токио: https://tokio-rs.github.io/tokio/doc/tokio/sync/index.html

Barrier блокирует только наперед заданный набор задач. У меня количество неизвестно. Не подходит.

Semaphore теоретически подходит, но acquire скушивает по одному пермиту. Мне нужно чтобы не "кушал", чтобы просто выставлялся один общий неотчуждаемый пермит на всех.

Notify разблокирует ресурс только при первом обращения. При повторном обращении заблокирует опять. Мне нужно, чтобы ресурс разблокировался навсегда
Кажется проще написать самому обертку. А что за кейс такой, когда задач динамичное количество?
источник

K

Kitsu in Rust — русскоговорящее сообществo
Tema
теперь компилится без ошибок но и в консоль ничего не выводит

вот такую функцию сделал:

async fn do_something() {
 let mut client = Client::default();

 let response = client.get("https://jsonplaceholder.typicode.com/todos/1")
     .send().await;

 println!("Response: {:?}", response);
}


и ее вызываю там где надо
а как вызываешь?
источник

T

Tema in Rust — русскоговорящее сообществo
Kitsu
а как вызываешь?
do_something();
источник

r

red75prime in Rust — русскоговорящее сообществo
Tema
теперь компилится без ошибок но и в консоль ничего не выводит

вот такую функцию сделал:

async fn do_something() {
 let mut client = Client::default();

 let response = client.get("https://jsonplaceholder.typicode.com/todos/1")
     .send().await;

 println!("Response: {:?}", response);
}


и ее вызываю там где надо
Вызвать недостаточно. Нужно на результате вызова сделать .await
источник

K

Kitsu in Rust — русскоговорящее сообществo
Tema
do_something();
ну вот тебе и проблема, делай .await
источник

T

Tema in Rust — русскоговорящее сообществo
оО да я не могу
источник

K

Kitsu in Rust — русскоговорящее сообществo
ну либо *::spawn
источник

T

Tema in Rust — русскоговорящее сообществo
error[E0706]: trait fns cannot be declared async
источник

T

Tema in Rust — русскоговорящее сообществo
когда добавляю async к функции моей которая внутри impl Perform<LoginResponse> for Oper<Register> {
источник

Э

Эрик in Rust — русскоговорящее сообществo
Значит ты авейтишь не то что надо. Напиши
let a = do_something().await;
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Эрик
В зависимости от задачи есть вариант заблочить RwLock'ом, взяв мутабельный доступ к локу, и отпустить его, когда надо дать доступ задачам. Но там задачи должны брать немутабельный доступ.
Проблема в том, что гарды завязаны на сам RwLock, то есть имеют ограниченный lifetime. То есть я не могу залочить, и потом когда-нибудь в будущем, в другой задаче, например, разблокировать. По этой же причине не подходит Mutex
источник

В

Вафель in Rust — русскоговорящее сообществo
Tema
когда добавляю async к функции моей которая внутри impl Perform<LoginResponse> for Oper<Register> {
В трейтах нельзя делать асинхронные функции...

Откуда Perform?
источник

AV

A V in Rust — русскоговорящее сообществo
https://github.com/vorot93/rust-devp2p-discv5/blob/master/src/lib.rs#L164

2 вопроса:
* Насколько корректен transmute?
* Можно ли без него обойтись?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ilya Lakhin
Проблема в том, что гарды завязаны на сам RwLock, то есть имеют ограниченный lifetime. То есть я не могу залочить, и потом когда-нибудь в будущем, в другой задаче, например, разблокировать. По этой же причине не подходит Mutex
Какие-то странные задачи у тебя. Точно никак не вычислить количество для барьера?
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Kitsu
Кажется проще написать самому обертку. А что за кейс такой, когда задач динамичное количество?
Синхронизация ресурсов GPU
источник