7 ms·
I genuinely don't understand why people use select! at all given how much of a footgun it is.
by littlestymaar 1y ago
I genuinely don't understand why people use select! at all given how much of a footgun it is.
- octoberfranklin 1y agoWell the less-footgun-ish alternative would look something like a Stream API, but the last time I checked tokio-stream wasn't stable yet. Then you could merge a `Stream<A>` and `Stream<B>` into a `Stream<Either<A,B>>` and pull from that. Since you're dealing with owned streams, dropping the stream forces some degree of cleanup. There are still ways to make a mess, but they take more effort. .................................... Ratelimit so I have to reply to mycoliza with an edit here: That example calls `do_thing()`, whose body does not appear anywhere in the webpage. Use better identifiers. If you meant `do_stuff()`, you haven't replaced select!() with streams, since `do_stuff()` calls `select!()`. The problem is `select!()`; if you keep using `select!()` but just slather on a bunch of streams that isn't going to fix anything. You have to get rid of select!() by replacing it with streams.
- mycoliza 1y agoAn analogous problem is equally possible with streams: https://rfd.shared.oxide.computer/rfd/0609#_how_you_can_hit_this_with_streams https://rfd.shared.oxide.computer/rfd/0609#_how_you_can_hit_...
- mycoliza 1y agoIn reply to your edit, that section in the RFD includes a link to the full example in the Rust playground. You’ll note that it does not make any use of ‘select!`: https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=3b8505524169c79a6bd53c3aa9f5fbfa https://play.rust-lang.org/?version=stable&mode=debug&editio... Perhaps the full example should have been reproduced in the RFD for clarity…