On Sun, Jun 16, 2024 at 11:32:31AM -0400, Kent Overstreet wrote: > On Sun, Jun 16, 2024 at 05:14:56PM +0200, Miguel Ojeda wrote: > > On Sun, Jun 16, 2024 at 4:16 PM Boqun Feng <boqun.feng@xxxxxxxxx> wrote: > > > > > > Hmm? Have you seen the email I replied to John, a broader Rust community > > > seems doesn't appreciate the idea of generic atomics. > > > > I don't think we can easily draw that conclusion from those download > > numbers / dependent crates. > > > > portable-atomic may be more popular simply because it provides > > features for platforms the standard library does not. The interface > > being generic or not may have nothing to do with it. Or perhaps > > because it has a 1.x version, while the other doesn't, etc. > > > > In fact, the atomic crate is essentially about providing `Atomic<T>`, > > so one could argue that all those downloads are precisely from people > > that want a generic atomic. > > > > Moreover, I noticed portable-atomic's issue #1 in GitHub is, > > precisely, adding `Atomic<T>` support. The maintainer has a PR for > > that updated over time, most recently a few hours ago. > > > > There is also `AtomicCell<T>` from crossbeam, which is the first > > feature listed in its docs. > > > > Anyway... > > > > The way I see it, both approaches seem similar (i.e. for what we are > > going to use them for today, at least) and neither apparently has a > > major downside today for those use cases (apart from needed refactors > > later to go to another approach). > > > > (By the "generic approach", by the way, I mean just providing > > `Atomic<{i32,i64}>`, not a complex design) > > > > So it is up to you on what you send for the non-RFC patches, of > > course, and if nobody has the time / wants to do the work for the > > "simple" generic approach, then we can just go ahead with this for the > > moment. But I think it would be nice to at least consider the "simple" > > generic approach to see how much worse it would be. > > > > Other bits to consider, that perhaps give you arguments for one or the > > other: consequences on the compilation time, on inlining, on the error > > messages for new users, on the generated documentation, on how easy to > > grep they are, etc. > > Yeah, rereading the thread - I'm with Miguel and Gary. > > Generics are simply the correct way to do it, if the wider rust > community didn't do it that way I think that can be chalked up more to > historical baggage or needlessly copying the base integer type scheme. > > Let's please do it right here, and generics are the correct approach. If so, maybe we should do u<Wide> instead of u8, u16, oh, and probably just Integer<Sign, Wide> instead of i{8,16,32,64) and u{8,16,32,64} ;-) Regards, Boqun