I think it's a great little feature that would set rust apart in the embedded development space, and perfectly viable to be a compiler feature. It's not for everyone, but the people that would find it useful would find it REALLY useful. Rust might even find a niche in safety critical software.
- Clark On Fri, Mar 28, 2014 at 9:56 AM, Peter Marheine <pe...@taricorp.net> wrote: > While potentially useful, I don't think this use case is common enough > to warrant being a core feature. This sounds like a good use case for > a macro, though. Something like: > > match bitfield!(val, 6..7) { > 0b00 => ..., > 0b01 => ..., > 0b10 => ..., > 0b11 => ... > } > > could expand to > > match (val >> 6) & ((1 << 2) - 1) { > 0b00 => ..., > ... > _ => unreachable!() > } > > wherein the bitfield! macro either emits either an arbitrary-sized > type (I'm not sure how feasible this is-- LLVM allows arbitrary-width > integers, but I don't know how that would work with rustc) or is able > to verify on its own that the provided patterns are exhaustive for a > n-bit value (in which case the macro must contain the match block as > well). > > On Fri, Mar 28, 2014 at 8:04 AM, Clark Gaebel <cgae...@uwaterloo.ca> > wrote: > > I like this! Although I think that match might've been better written > `(val > >>> 6) & 0b11`, but it'd be really nice for the compiler to catch those > type > > of errors! > > > > - Clark > > > > > > On Fri, Mar 28, 2014 at 5:54 AM, Vladimir Pouzanov <farcal...@gmail.com> > > wrote: > >> > >> There's one thing that I often have to deal in embedded code — doing > match > >> on a few bits from an I/O register, which is commonly u32: > >> > >> let val : u32 = ...; > >> match (val & 0b11) >> 6 { > >> 0b00 => ..., > >> 0b01 => ..., > >> 0b10 => ..., > >> _ => {} > >> } > >> > >> You can clearly see two problems here: I need to provide a catch-all > >> match, even if the code guarantees a limited set of values; also I lost > >> 0b11, and there's no warning due to catch all. > >> > >> Is it possible to make rustc aware of such cases? > >> > >> What would be totally awesome is some kind of [] operator for ints, that > >> would extract bits, like that: > >> > >> match val[6..7] { ... } > >> > >> Is that something of interest to community? I would be willing to write > an > >> RFC for that, and possibly extend the compiler. > >> > >> -- > >> Sincerely, > >> Vladimir "Farcaller" Pouzanov > >> http://farcaller.net/ > >> > >> _______________________________________________ > >> Rust-dev mailing list > >> Rust-dev@mozilla.org > >> https://mail.mozilla.org/listinfo/rust-dev > >> > > > > > > > > -- > > Clark. > > > > Key ID : 0x78099922 > > Fingerprint: B292 493C 51AE F3AB D016 DD04 E5E3 C36F 5534 F907 > > > > _______________________________________________ > > Rust-dev mailing list > > Rust-dev@mozilla.org > > https://mail.mozilla.org/listinfo/rust-dev > > > > > > -- > Peter Marheine > Don't Panic > -- Clark. Key ID : 0x78099922 Fingerprint: B292 493C 51AE F3AB D016 DD04 E5E3 C36F 5534 F907
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev