Size: a a a

2021 February 20

a

antuan in Rust Async
Denis
выглядит как будто ты уже проиграл
обнадеживающе.
либа на токио 1, актикс на токио 1 в бете...
источник

a

antuan in Rust Async
antuan
обнадеживающе.
либа на токио 1, актикс на токио 1 в бете...
т.е. допустим бету я заюзал, ок. но сервер запустить так и не осилил: паника. и судя по сорцам запускаться он даже и не должен...)
источник

MB

Mikail Bagishov in Rust Async
antuan
а есть на примете пример, как это делать? сам дотумкать не могу, а гугл недостаточно услужлив чет :(
Ну идея такая:
1) Создаем tokio 1.0 рантайм. Можно, например, положить его в once_cell::Lazy статик.
2) Пишем обертку примерно такого вида (ну только еще стоит pin-project навесить):
struct Compat<F>(F);

impl<F: Future> Future for Compat<F> {
   type Output = F::Output;
   fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>{
      let _enter = GLOBAL_TOKIO_1.enter();
      self.0.poll(cx)
  }
}


Теперь та футура, которая внутри использует tokio 1.0 (например она обращается к уже обновленной библиотетке) может быть завернута в Compat. Дальше эту обертку можно послать в любой экзекутор, хоть в tokio 0.2, хоть в async-std, куда угодно. Наша обертка настраивает контекст, который позволит этой футуре корректно работать.
источник

MB

Mikail Bagishov in Rust Async
Но да, это не позволит добиться совместимости, скажем конкретных типов каналов и локов, они все равно останутся разными типами.
источник

MB

Mikail Bagishov in Rust Async
С другой стороны, ты можешь спокойно в старом tokio 0.2-шном коде использовать каналы/локи из tokio 1.0
источник

a

antuan in Rust Async
Mikail Bagishov
С другой стороны, ты можешь спокойно в старом tokio 0.2-шном коде использовать каналы/локи из tokio 1.0
действительно? у меня почему-то сомнения...
щас попробую попробовать
источник

D

Denis in Rust Async
гм
источник

D

Denis in Rust Async
там контекст окажется не тот скорее всего ведь
источник

D

Denis in Rust Async
который cx
источник

a

antuan in Rust Async
я прям предвижу гору граблей. попробую всё ж, наверное, упереться рогом и завести актикс-4
источник

MB

Mikail Bagishov in Rust Async
Denis
там контекст окажется не тот скорее всего ведь
насколько я помню, им контекст не нужен. Пойду проверю.
источник

D

Denis in Rust Async
Mikail Bagishov
насколько я помню, им контекст не нужен. Пойду проверю.
им — это конкретно каналам?
источник

D

Denis in Rust Async
там вейкеры из разных рантаймов будут, не уверен, что они будут пробуждаться нормально
источник

a

antuan in Rust Async
Mikail Bagishov
насколько я помню, им контекст не нужен. Пойду проверю.
у рвлока внури семафор, у него внутри acquire, а вот ему уже нужен контекст
источник

MB

Mikail Bagishov in Rust Async
antuan
у рвлока внури семафор, у него внутри acquire, а вот ему уже нужен контекст
источник

MB

Mikail Bagishov in Rust Async
Denis
там вейкеры из разных рантаймов будут, не уверен, что они будут пробуждаться нормально
Но ведь вся идея стд-шных вейкеров в том, чтобы любой рантайм работал с любой либой.
источник

D

Denis in Rust Async
Mikail Bagishov
Но ведь вся идея стд-шных вейкеров в том, чтобы любой рантайм работал с любой либой.
ну мб
источник

a

antuan in Rust Async
т.е. это тоже должно работать, я правильно понял?
#[tokio_02::main]
async fn main() {
   let lock_1 = tokio::sync::RwLock::new(false);
   println!("{:?}", lock_1.read().await);
}
источник

MB

Mikail Bagishov in Rust Async
antuan
т.е. это тоже должно работать, я правильно понял?
#[tokio_02::main]
async fn main() {
   let lock_1 = tokio::sync::RwLock::new(false);
   println!("{:?}", lock_1.read().await);
}
Я ожидаю что должно
источник

a

antuan in Rust Async
в обратную сторону работает. как я написал - даже не билдится чет....
associated function `new` is private
23 | #[tokio_02::main]
  | ^^^^^^^^^^^^^^^^^ private associated function
источник