1.83K subscribers
3.23K photos
127 videos
15 files
3.52K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #rust #rustasync #suckassstory

Ask not what the compiler can do for you

TL;DR: из-за того, что async_trait боксит футуры и стирает типы, в асинхронном коде, использующем этот крейт, можно организовать безусловную рекурсию, и ни компилятор, ни clippy этого не отловят.
👍1
Блог*
#prog #rust #rustasync #article Efficient indexing with Quickwit Rust actor framework Или немного о том, почему разработчики Quickwit решили реализовать свой акторный фреймворк. Также в тексте есть ссылка на статью Actors with Tokio, которая описывает, как…
#prog #rust #rustasync

Если вы делаете что-то с акторами в Rust, может быть полезно иметь у актора возможность отправлять сообщения самому себе. К сожалению, способ в лоб — хранить отправляющую половинку канала у себя — приводит к тому, что теперь невозможно полагаться на ошибку получения из канала как на сигнал к прекращению работы актора: Sender у актора удерживает живым весь канал, и потому, если других Sender-ов нет, recv на канале навечно зависает на попытке получить из канала сообщение.

Для решения этой проблемы в tokio есть WeakSenderWeakUnboundedSender), которые можно считать аналогом std::sync::Weak<ChannelInner<T>> (что, в общем-то, недалеко от истины). Эти Sender-ы позволяют отправлять сообщения в канал при апгрейде до полноценных версий, но сами по себе не поддерживают канал в живом состоянии — идеально для того, чтобы держать в акторе.

Кстати, эта фича была добавлена по запросу, который как раз ссылается на уже упомянутую в Блог*е статью Actors with tokio. Запрос на аналогичную функциональность для каналов в std есть аж с 2016 года, но до сих пор не реализован. И в crossbeam-channel этого тоже нет, увы.
🔥6🖕21